ethrnet sniiffing(이더넷 추척)은 무엇인가?

페이지 정보

profile_image
작성자
댓글 0건 조회 27회 작성일 23-06-23 11:34

본문

Ethernet sniffing 이란,자신이 찾고자 하는  정보를 발견하기 위해서 전송상태를 감시하는 것을
<br/>의미한다. 즉 어떤&nbsp; 조건에 맞는 자료르 프로그램이 발견하게 되면,&nbsp; 그 내용은 프로그램에 의해
<br/>파일로 저장이 된다. 정보를 알아내기&nbsp; 위하여 일반적으로 가장많이 쓰이는 조건은 &#039;login&#039;,또는
<br/>&#039;password&#039;와 같은 단어들이다.
<br/>많은 Ethernet sniffers 가 있으며,다음은 그 예들이다.
<br/>시스템에 따른 스니터와 스니퍼가 있는 FTP
<br/>
<br/>OS&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Sniffer
<br/>~~&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ~~~~~~~
<br/>HP/UX&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  nettl (monitor) & netfmt (display)
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  nfswatch&nbsp; &nbsp; &nbsp; &nbsp; /* Available via anonymous ftp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  */
<br/>Irix&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nfswatch&nbsp; &nbsp; &nbsp; &nbsp; /* Available via anonymous ftp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  */
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Etherman
<br/>SunOS&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  etherfind
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  nfswatch&nbsp; &nbsp; &nbsp; &nbsp; /* Available via anonymous ftp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  */
<br/>Solaris&nbsp; &nbsp; &nbsp; &nbsp;  snoop
<br/>DOS&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ETHLOAD&nbsp; &nbsp; &nbsp; &nbsp;  /* Available via anonymous ftp as&nbsp; &nbsp; &nbsp; &nbsp; */
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  /* ethld104.zip&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  The Gobbler&nbsp; &nbsp;  /* Available via anonymous ftp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  */
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  LanPatrol
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  LanWatch
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Netmon
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Netwatch
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Netzhack&nbsp; &nbsp; &nbsp; &nbsp; /* Available via anonymous ftp at&nbsp; &nbsp; &nbsp; &nbsp; */
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  /* mistress.informatik.unibw-muenchen.de */
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  /* /pub/netzhack.mac&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  */
<br/>Macintosh&nbsp; &nbsp; &nbsp;  Etherpeek
<br/>
<br/>Here is source code for an ethernet sniffer:
<br/>
<br/>/* Esniff.c */
<br/>
<br/>#include &lt;stdio.h&gt;
<br/>#include &lt;ctype.h&gt;
<br/>#include &lt;string.h&gt;
<br/>
<br/>#include &lt;sys/time.h&gt;
<br/>#include &lt;sys/file.h&gt;
<br/>#include &lt;sys/stropts.h&gt;
<br/>#include &lt;sys/signal.h&gt;
<br/>#include &lt;sys/types.h&gt;
<br/>#include &lt;sys/socket.h&gt;
<br/>#include &lt;sys/ioctl.h&gt;
<br/>
<br/>#include &lt;net/if.h&gt;
<br/>#include &lt;net/nit_if.h&gt;
<br/>#include &lt;net/nit_buf.h&gt;
<br/>#include &lt;net/if_arp.h&gt;
<br/>
<br/>#include &lt;netinet/in.h&gt;
<br/>#include &lt;netinet/if_ether.h&gt;
<br/>#include &lt;netinet/in_systm.h&gt;
<br/>#include &lt;netinet/ip.h&gt;
<br/>#include &lt;netinet/udp.h&gt;
<br/>#include &lt;netinet/ip_var.h&gt;
<br/>#include &lt;netinet/udp_var.h&gt;
<br/>#include &lt;netinet/in_systm.h&gt;
<br/>#include &lt;netinet/tcp.h&gt;
<br/>#include &lt;netinet/ip_icmp.h&gt;
<br/>
<br/>#include &lt;netdb.h&gt;
<br/>#include &lt;arpa/inet.h&gt;
<br/>
<br/>#define ERR stderr
<br/>
<br/>char&nbsp; &nbsp; *malloc();
<br/>char&nbsp; &nbsp; *device,
<br/>&nbsp; &nbsp; &nbsp;  *ProgName,
<br/>&nbsp; &nbsp; &nbsp;  *LogName;
<br/>FILE&nbsp; &nbsp; *LOG;
<br/>int&nbsp; &nbsp;  debug=0;
<br/>
<br/>#define NIT_DEV&nbsp; &nbsp;  "/dev/nit"
<br/>#define CHUNKSIZE&nbsp;  4096&nbsp; &nbsp; &nbsp; &nbsp; /* device buffer size */
<br/>int&nbsp; &nbsp;  if_fd = -1;
<br/>int&nbsp; &nbsp;  Packet[CHUNKSIZE+32];
<br/>
<br/>void Pexit(err,msg)
<br/>int err; char *msg;
<br/>{ perror(msg);
<br/>&nbsp;exit(err); }
<br/>
<br/>void Zexit(err,msg)
<br/>int err; char *msg;
<br/>{ fprintf(ERR,msg);
<br/>&nbsp;exit(err); }
<br/>
<br/>#define IP&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((struct ip *)Packet)
<br/>#define IP_OFFSET&nbsp;  (0x1FFF)
<br/>#define SZETH&nbsp; &nbsp; &nbsp;  (sizeof(struct ether_header))
<br/>#define IPLEN&nbsp; &nbsp; &nbsp;  (ntohs(ip-&gt;ip_len))
<br/>#define IPHLEN&nbsp; &nbsp; &nbsp; (ip-&gt;ip_hl)
<br/>#define TCPOFF&nbsp; &nbsp; &nbsp; (tcph-&gt;th_off)
<br/>#define IPS&nbsp; &nbsp; &nbsp; &nbsp;  (ip-&gt;ip_src)
<br/>#define IPD&nbsp; &nbsp; &nbsp; &nbsp;  (ip-&gt;ip_dst)
<br/>#define TCPS&nbsp; &nbsp; &nbsp; &nbsp; (tcph-&gt;th_sport)
<br/>#define TCPD&nbsp; &nbsp; &nbsp; &nbsp; (tcph-&gt;th_dport)
<br/>#define IPeq(s,t)&nbsp;  ((s).s_addr == (t).s_addr)
<br/>
<br/>#define TCPFL(FLAGS) (tcph-&gt;th_flags & (FLAGS))
<br/>
<br/>#define MAXBUFLEN&nbsp; (128)
<br/>time_t&nbsp; LastTIME = 0;
<br/>
<br/>struct CREC {
<br/>&nbsp; &nbsp; struct CREC *Next,
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *Last;
<br/>&nbsp; &nbsp; time_t&nbsp; Time;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* start time */
<br/>&nbsp; &nbsp; struct in_addr SRCip,
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  DSTip;
<br/>&nbsp; &nbsp; u_int&nbsp;  SRCport,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  /* src/dst ports */
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DSTport;
<br/>&nbsp; &nbsp; u_char&nbsp; Data[MAXBUFLEN+2]; /* important stuff :-) */
<br/>&nbsp; &nbsp; u_int&nbsp;  Length;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* current data length */
<br/>&nbsp; &nbsp; u_int&nbsp;  PKcnt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  /* # pkts */
<br/>&nbsp; &nbsp; u_long&nbsp; LASTseq;
<br/>};
<br/>
<br/>struct CREC *CLroot = NULL;
<br/>
<br/>char *Symaddr(ip)
<br/>register struct in_addr ip;
<br/>{ register struct hostent *he =
<br/>&nbsp; &nbsp;  gethostbyaddr((char *)&ip.s_addr, sizeof(struct in_addr),AF_INET);
<br/>
<br/>&nbsp;return( (he)?(he-&gt;h_name):(inet_ntoa(ip)) );
<br/>}
<br/>
<br/>char *TCPflags(flgs)
<br/>register u_char flgs;
<br/>{ static char iobuf[8];
<br/>#define SFL(P,THF,C) iobuf[P]=((flgs & THF)?C:&#039;-&#039;)
<br/>
<br/>&nbsp;SFL(0,TH_FIN, &#039;F&#039;);
<br/>&nbsp;SFL(1,TH_SYN, &#039;S&#039;);
<br/>&nbsp;SFL(2,TH_RST, &#039;R&#039;);
<br/>&nbsp;SFL(3,TH_PUSH,&#039;P&#039;);
<br/>&nbsp;SFL(4,TH_ACK, &#039;A&#039;);
<br/>&nbsp;SFL(5,TH_URG, &#039;U&#039;);
<br/>&nbsp;iobuf[6]=0;
<br/>&nbsp;return(iobuf);
<br/>}
<br/>
<br/>char *SERVp(port)
<br/>register u_int port;
<br/>{ static char buf[10];
<br/>&nbsp;register char *p;
<br/>
<br/>&nbsp; switch(port) {
<br/>&nbsp; &nbsp; case IPPORT_LOGINSERVER: p="rlogin"; break;
<br/>&nbsp; &nbsp; case IPPORT_TELNET:&nbsp; &nbsp; &nbsp; p="telnet"; break;
<br/>&nbsp; &nbsp; case IPPORT_SMTP:&nbsp; &nbsp; &nbsp; &nbsp; p="smtp"; break;
<br/>&nbsp; &nbsp; case IPPORT_FTP:&nbsp; &nbsp; &nbsp; &nbsp;  p="ftp"; break;
<br/>&nbsp; &nbsp; default: sprintf(buf,"%u",port); p=buf; break;
<br/>&nbsp; }
<br/>&nbsp; return(p);
<br/>}
<br/>
<br/>char *Ptm(t)
<br/>register time_t *t;
<br/>{ register char *p = ctime(t);
<br/>&nbsp;p[strlen(p)-6]=0; /* strip " YYYY\\n" */
<br/>&nbsp;return(p);
<br/>}
<br/>
<br/>char *NOWtm()
<br/>{ time_t tm;
<br/>&nbsp;time(&tm);
<br/>&nbsp;return( Ptm(&tm) );
<br/>}
<br/>
<br/>#define MAX(a,b) (((a)&gt;(b))?(a):(b))
<br/>#define MIN(a,b) (((a)&lt;(b))?(a):(b))
<br/>
<br/>/* add an item */
<br/>#define ADD_NODE(SIP,DIP,SPORT,DPORT,DATA,LEN) { \\
<br/>&nbsp;register struct CREC *CLtmp = \\
<br/>&nbsp; &nbsp; &nbsp;  (struct CREC *)malloc(sizeof(struct CREC)); \\
<br/>&nbsp;time( &(CLtmp-&gt;Time) ); \\
<br/>&nbsp;CLtmp-&gt;SRCip.s_addr = SIP.s_addr; \\
<br/>&nbsp;CLtmp-&gt;DSTip.s_addr = DIP.s_addr; \\
<br/>&nbsp;CLtmp-&gt;SRCport = SPORT; \\
<br/>&nbsp;CLtmp-&gt;DSTport = DPORT; \\
<br/>&nbsp;CLtmp-&gt;Length = MIN(LEN,MAXBUFLEN); \\
<br/>&nbsp;bcopy( (u_char *)DATA, (u_char *)CLtmp-&gt;Data, CLtmp-&gt;Length); \\
<br/>&nbsp;CLtmp-&gt;PKcnt = 1; \\
<br/>&nbsp;CLtmp-&gt;Next = CLroot; \\
<br/>&nbsp;CLtmp-&gt;Last = NULL; \\
<br/>&nbsp;CLroot = CLtmp; \\
<br/>}
<br/>
<br/>register struct CREC *GET_NODE(Sip,SP,Dip,DP)
<br/>register struct in_addr Sip,Dip;
<br/>register u_int SP,DP;
<br/>{ register struct CREC *CLr = CLroot;
<br/>
<br/>&nbsp;while(CLr != NULL) {
<br/>&nbsp;  if( (CLr-&gt;SRCport == SP) && (CLr-&gt;DSTport == DP) &&
<br/>&nbsp; &nbsp; &nbsp;  IPeq(CLr-&gt;SRCip,Sip) && IPeq(CLr-&gt;DSTip,Dip) )
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  break;
<br/>&nbsp;  CLr = CLr-&gt;Next;
<br/>&nbsp;}
<br/>&nbsp;return(CLr);
<br/>}
<br/>
<br/>#define ADDDATA_NODE(CL,DATA,LEN) { \\
<br/>bcopy((u_char *)DATA, (u_char *)&CL-&gt;Data[CL-&gt;Length],LEN); \\
<br/>CL-&gt;Length += LEN; \\
<br/>}
<br/>
<br/>#define PR_DATA(dp,ln) {&nbsp; &nbsp; \\
<br/>&nbsp;register u_char lastc=0; \\
<br/>&nbsp;while(ln-- &gt;0) { \\
<br/>&nbsp; &nbsp; if(*dp &lt; 32) {&nbsp; \\
<br/>&nbsp; &nbsp; &nbsp;  switch(*dp) { \\
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  case &#039;\\0&#039;: if((lastc==&#039;\\r&#039;) || (lastc==&#039;\\n&#039;) || lastc==&#039;\\0&#039;) \\
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  break; \\
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  case &#039;\\r&#039;: \\
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  case &#039;\\n&#039;: fprintf(LOG,"\\n&nbsp; &nbsp;  : "); \\
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  break; \\
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  default&nbsp; : fprintf(LOG,"^%c", (*dp + 64)); \\
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  break; \\
<br/>&nbsp; &nbsp; &nbsp;  } \\
<br/>&nbsp; &nbsp; } else { \\
<br/>&nbsp; &nbsp; &nbsp;  if(isprint(*dp)) fputc(*dp,LOG); \\
<br/>&nbsp; &nbsp; &nbsp;  else fprintf(LOG,"(%d)",*dp); \\
<br/>&nbsp; &nbsp; } \\
<br/>&nbsp; &nbsp; lastc = *dp++; \\
<br/>&nbsp;} \\
<br/>&nbsp;fflush(LOG); \\
<br/>}
<br/>
<br/>void END_NODE(CLe,d,dl,msg)
<br/>register struct CREC *CLe;
<br/>register u_char *d;
<br/>register int dl;
<br/>register char *msg;
<br/>{
<br/>&nbsp; fprintf(LOG,"\\n-- TCP/IP LOG -- TM: %s --\\n", Ptm(&CLe-&gt;Time));
<br/>&nbsp; fprintf(LOG," PATH: %s(%s) =&gt;", Symaddr(CLe-&gt;SRCip),SERVp(CLe-&gt;SRCport));
<br/>&nbsp; fprintf(LOG," %s(%s)\\n", Symaddr(CLe-&gt;DSTip),SERVp(CLe-&gt;DSTport));
<br/>&nbsp; fprintf(LOG," STAT: %s, %d pkts, %d bytes [%s]\\n",
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  NOWtm(),CLe-&gt;PKcnt,(CLe-&gt;Length+dl),msg);
<br/>&nbsp; fprintf(LOG," DATA: ");
<br/>&nbsp;  { register u_int i = CLe-&gt;Length;
<br/>&nbsp; &nbsp;  register u_char *p = CLe-&gt;Data;
<br/>&nbsp; &nbsp;  PR_DATA(p,i);
<br/>&nbsp; &nbsp;  PR_DATA(d,dl);
<br/>&nbsp;  }
<br/>
<br/>&nbsp; fprintf(LOG,"\\n-- \\n");
<br/>&nbsp; fflush(LOG);
<br/>
<br/>&nbsp; if(CLe-&gt;Next != NULL)
<br/>&nbsp;  CLe-&gt;Next-&gt;Last = CLe-&gt;Last;
<br/>&nbsp; if(CLe-&gt;Last != NULL)
<br/>&nbsp;  CLe-&gt;Last-&gt;Next = CLe-&gt;Next;
<br/>&nbsp; else
<br/>&nbsp;  CLroot = CLe-&gt;Next;
<br/>&nbsp; free(CLe);
<br/>}
<br/>
<br/>/* 30 mins (x 60 seconds) */
<br/>#define IDLE_TIMEOUT 1800
<br/>#define IDLE_NODE() { \\
<br/>&nbsp;time_t tm; \\
<br/>&nbsp;time(&tm); \\
<br/>&nbsp;if(LastTIME&lt;tm) { \\
<br/>&nbsp; &nbsp; register struct CREC *CLe,*CLt = CLroot; \\
<br/>&nbsp; &nbsp; LastTIME=(tm+IDLE_TIMEOUT); tm-=IDLE_TIMEOUT; \\
<br/>&nbsp; &nbsp; while(CLe=CLt) { \\
<br/>&nbsp; &nbsp; &nbsp; CLt=CLe-&gt;Next; \\
<br/>&nbsp; &nbsp; &nbsp; if(CLe-&gt;Time &lt;tm) \\
<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; END_NODE(CLe,(u_char *)NULL,0,"IDLE TIMEOUT"); \\
<br/>&nbsp; &nbsp; } \\
<br/>&nbsp;} \\
<br/>}
<br/>
<br/>void filter(cp, pktlen)
<br/>register char *cp;
<br/>register u_int pktlen;
<br/>{
<br/>register struct ip&nbsp; &nbsp;  *ip;
<br/>register struct tcphdr *tcph;
<br/>
<br/>{ register u_short EtherType=ntohs(((struct ether_header *)cp)-&gt;ether_type);
<br/>
<br/>&nbsp; if(EtherType &lt; 0x600) {
<br/>&nbsp; &nbsp; EtherType = *(u_short *)(cp + SZETH + 6);
<br/>&nbsp; &nbsp; cp+=8; pktlen-=8;
<br/>&nbsp; }
<br/>
<br/>&nbsp; if(EtherType != ETHERTYPE_IP) /* chuk it if its not IP */
<br/>&nbsp; &nbsp;  return;
<br/>}
<br/>
<br/>&nbsp;  /* ugh, gotta do an alignment :-( */
<br/>bcopy(cp + SZETH, (char *)Packet,(int)(pktlen - SZETH));
<br/>
<br/>ip = (struct ip *)Packet;
<br/>if( ip-&gt;ip_p != IPPROTO_TCP) /* chuk non tcp pkts */
<br/>&nbsp;  return;
<br/>tcph = (struct tcphdr *)(Packet + IPHLEN);
<br/>
<br/>if(!( (TCPD == IPPORT_TELNET) ||
<br/>&nbsp; &nbsp; &nbsp; (TCPD == IPPORT_LOGINSERVER) ||
<br/>&nbsp; &nbsp; &nbsp; (TCPD == IPPORT_FTP)
<br/>&nbsp; )) return;
<br/>
<br/>{ register struct CREC *CLm;
<br/>&nbsp; register int length = ((IPLEN - (IPHLEN * 4)) - (TCPOFF * 4));
<br/>&nbsp; register u_char *p = (u_char *)Packet;
<br/>
<br/>&nbsp; p += ((IPHLEN * 4) + (TCPOFF * 4));
<br/>
<br/>if(debug) {
<br/>&nbsp;fprintf(LOG,"PKT: (%s %04X) ", TCPflags(tcph-&gt;th_flags),length);
<br/>&nbsp;fprintf(LOG,"%s[%s] =&gt; ", inet_ntoa(IPS),SERVp(TCPS));
<br/>&nbsp;fprintf(LOG,"%s[%s]\\n", inet_ntoa(IPD),SERVp(TCPD));
<br/>}
<br/>
<br/>&nbsp; if( CLm = GET_NODE(IPS, TCPS, IPD, TCPD) ) {
<br/>
<br/>&nbsp; &nbsp;  CLm-&gt;PKcnt++;
<br/>
<br/>&nbsp; &nbsp;  if(length&gt;0)
<br/>&nbsp; &nbsp; &nbsp;  if( (CLm-&gt;Length + length) &lt; MAXBUFLEN ) {
<br/>&nbsp; &nbsp; &nbsp; &nbsp;  ADDDATA_NODE( CLm, p,length);
<br/>&nbsp; &nbsp; &nbsp;  } else {
<br/>&nbsp; &nbsp; &nbsp; &nbsp;  END_NODE( CLm, p,length, "DATA LIMIT");
<br/>&nbsp; &nbsp; &nbsp;  }
<br/>
<br/>&nbsp; &nbsp;  if(TCPFL(TH_FIN|TH_RST)) {
<br/>&nbsp; &nbsp; &nbsp; &nbsp;  END_NODE( CLm, (u_char *)NULL,0,TCPFL(TH_FIN)?"TH_FIN":"TH_RST" );
<br/>&nbsp; &nbsp;  }
<br/>
<br/>&nbsp; } else {
<br/>
<br/>&nbsp; &nbsp;  if(TCPFL(TH_SYN)) {
<br/>&nbsp; &nbsp; &nbsp; &nbsp; ADD_NODE(IPS,IPD,TCPS,TCPD,p,length);
<br/>&nbsp; &nbsp;  }
<br/>
<br/>&nbsp; }
<br/>
<br/>&nbsp; IDLE_NODE();
<br/>
<br/>}
<br/>
<br/>}
<br/>
<br/>/* signal handler
<br/>*/
<br/>void death()
<br/>{ register struct CREC *CLe;
<br/>
<br/>&nbsp;  while(CLe=CLroot)
<br/>&nbsp; &nbsp; &nbsp;  END_NODE( CLe, (u_char *)NULL,0, "SIGNAL");
<br/>
<br/>&nbsp;  fprintf(LOG,"\\nLog ended at =&gt; %s\\n",NOWtm());
<br/>&nbsp;  fflush(LOG);
<br/>&nbsp;  if(LOG != stdout)
<br/>&nbsp; &nbsp; &nbsp;  fclose(LOG);
<br/>&nbsp;  exit(1);
<br/>}
<br/>
<br/>/* opens network interface, performs ioctls and reads from it,
<br/>* passing data to filter function
<br/>*/
<br/>void do_it()
<br/>{
<br/>&nbsp;  int cc;
<br/>&nbsp;  char *buf;
<br/>&nbsp;  u_short sp_ts_len;
<br/>
<br/>&nbsp;  if(!(buf=malloc(CHUNKSIZE)))
<br/>&nbsp; &nbsp; &nbsp;  Pexit(1,"Eth: malloc");
<br/>
<br/>/* this /dev/nit initialization code pinched from etherfind */
<br/>&nbsp;{
<br/>&nbsp;  struct strioctl si;
<br/>&nbsp;  struct ifreq&nbsp; &nbsp; ifr;
<br/>&nbsp;  struct timeval&nbsp; timeout;
<br/>&nbsp;  u_int&nbsp; chunksize = CHUNKSIZE;
<br/>&nbsp;  u_long if_flags&nbsp; = NI_PROMISC;
<br/>
<br/>&nbsp;  if((if_fd = open(NIT_DEV, O_RDONLY)) &lt; 0)
<br/>&nbsp; &nbsp; &nbsp;  Pexit(1,"Eth: nit open");
<br/>
<br/>&nbsp;  if(ioctl(if_fd, I_SRDOPT, (char *)RMSGD) &lt; 0)
<br/>&nbsp; &nbsp; &nbsp;  Pexit(1,"Eth: ioctl (I_SRDOPT)");
<br/>
<br/>&nbsp;  si.ic_timout = INFTIM;
<br/>
<br/>&nbsp;  if(ioctl(if_fd, I_PUSH, "nbuf") &lt; 0)
<br/>&nbsp; &nbsp; &nbsp;  Pexit(1,"Eth: ioctl (I_PUSH \\nbuf\\")"");

댓글목록

등록된 댓글이 없습니다.