>> Edit article
이름
제목
패스워드
: 아 넷스 넘드리당. : : SIOCGIF~ 이런 류는 sys/ioctl.h에 들어있습니다. : #include <sys/ioctl.h> : 헤더를 포함하시길. : : : 리눅스 보안쪽을 공부하려구 무작정 책을 보구 있습니다. : : : : 리눅스 프로그래밍을 공부한게 아니라서... : : : : 혹 이글을 보시구 먼저 공부해야 할게 있다면 가차없는 채찍질을 해 주세요. : : : : : : linux_sniffer.c 화일을 받아다가 : : cc linux_sniffer.c -o linux_sniffer 하구 컴팔을 했는데 오류 메시지는 다음과 같습니다. : : : : linux_sniffer.c: In function 'initdevice': : : linux_sniffer.c:72: 'SIOCGIFFLAGS' undeclared (first use in this function) : : linux_sniffer.c:72: (Each undelcared identifier is reported only once : : for each function it appears in.) : : linux_sniffer.c:84: 'SIOCSIFFLAGS' undeclared (first use in this function) : : : : : : 이걸 보시구 꼭 연락좀 주시면 감사하겠습니다. : : : : : : : : 소스 코드를 넣죠. : : : : /* ipl.c 1/3/95 by loq */ : : /* monitors ip packets for Linux */ : : #include <sys/types.h> : : #include <sys/socket.h> : : #include <sys/time.h> : : #include <netinet/in.h> : : #include <linux/if.h> : : #include <signal.h> : : #include <stdio.h> : : #include <linux/socket.h> : : #include <linux/ip.h> : : #include <linux/tcp.h> : : #include <linux/if_ether.h> : : : : #define BUFLEN 8192 : : #define ETHLINKHDR 14 : : : : : : print_data(int count, char *buff) : : { : : int i,j,c; : : int printnext=1; : : if(count) : : { : : if(count%16) : : c=count+(16-count%16); : : else c=count; : : } : : else : : c=count; : : for(i=0;i<c;i++) : : { : : if(printnext) { printnext--; printf("%.4x ",i&0xffff); } : : if(i<count) : : printf("%3.2x",buff[i]&0xff); : : else : : printf(" "); : : if(!((i+1)%8)) : : if((i+1)%16) : : printf(" -"); : : else : : { : : printf(" "); : : for(j=i-15;j<=i;j++) : : if(j<count) { : : if( (buff[j]&0xff) >= 0x20 && : : (buff[j]&0xff)<=0x7e) : : printf("%c",buff[j]&0xff); : : else printf("."); : : } else printf(" "); : : printf(""); printnext=1; : : } : : } : : } : : : : int : : initdevice(device, pflag) : : char *device; : : int pflag; : : { : : #define PROTO htons(0x0800) /* Ethernet code for IP protocol */ : : : : int if_fd=0; : : struct ifreq ifr; : : : : if ( (if_fd=socket(AF_INET,SOCK_PACKET,PROTO)) < 0 ) { : : perror("Can't get socket"); : : exit(2); : : } : : : : strcpy(ifr.ifr_name, device); /* interface we're gonna use */ : : if( ioctl(if_fd, SIOCGIFFLAGS, &ifr) < 0 ) { /* get flags */ : : close(if_fd); : : perror("Can't get flags"); : : exit(2); : : } : : #if 1 : : if ( pflag ) : : ifr.ifr_flags |= IFF_PROMISC; /* set promiscuous mode */ : : else : : ifr.ifr_flags &= ~(IFF_PROMISC); : : #endif : : : : if( ioctl(if_fd, SIOCSIFFLAGS, &ifr) < 0 ) { /* set flags */ : : close(if_fd); : : perror("Can't set flags"); : : exit(2); : : } : : return if_fd; : : } : : : : struct etherpacket { : : struct ethhdr eth; : : struct iphdr ip; : : struct tcphdr tcp; : : char data[8192]; : : }; : : : : main() : : { : : int linktype; : : int if_eth_fd=initdevice("eth0",1); : : #if 0 : : int if_ppp_fd=initdevice("sl0",1); : : #endif : : struct etherpacket ep; : : struct sockaddr dest; : : struct iphdr *ip; : : struct tcphdr *tcp; : : struct timeval timeout; : : fd_set rd,wr; : : int dlen; : : #if 0 : : struct slcompress *slc=slhc_init(64,64); : : #endif : : : : for(;;) : : { : : bzero(&dest,sizeof(dest)); : : dlen=0; : : FD_ZERO(&rd); : : FD_ZERO(&wr); : : FD_SET(if_eth_fd,&rd); : : #if 0 : : FD_SET(if_ppp_fd,&rd); : : #endif : : timeout.tv_sec=0; : : timeout.tv_usec=0; : : ip=(struct iphdr *)(((unsigned long)&ep.ip)-2); : : tcp=(struct tcphdr *)(((unsigned long)&ep.tcp)-2); : : while(timeout.tv_sec==0 && timeout.tv_usec==0) : : { : : timeout.tv_sec=10; : : timeout.tv_usec=0; : : select(20,&rd,&wr,NULL,&timeout); : : if(FD_ISSET(if_eth_fd,&rd)) : : { : : printf("eth"); : : recvfrom(if_eth_fd,&ep,sizeof(ep),0,&dest,&dlen); : : } : : #if 0 : : else : : if(FD_ISSET(if_ppp_fd,&rd)) : : { : : recvfrom(if_ppp_fd,&ep,sizeof(ep),0,&dest,&dlen); : : printf("ppp"); : : } : : #endif : : } : : : : printf("proto: %.4x",ntohs(ep.eth.h_proto)); : : #if 0 : : if(ep.eth.h_proto==ntohs(8053)) : : { : : slhc_uncompress(slc,&ep,sizeof(ep)); : : } : : #endif : : : : if(ep.eth.h_proto==ntohs(ETH_P_IP)) : : { : : printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x->", : : ep.eth.h_source[0],ep.eth.h_source[1], : : ep.eth.h_source[2],ep.eth.h_source[3], : : ep.eth.h_source[4],ep.eth.h_source[5]); : : printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x ", : : ep.eth.h_dest[0],ep.eth.h_dest[1], : : ep.eth.h_dest[2],ep.eth.h_dest[3], : : ep.eth.h_dest[4],ep.eth.h_dest[5]); : : printf("%s[%d]->",inet_ntoa(ip->saddr),ntohs(tcp->source)); : : printf("%s[%d]",inet_ntoa(ip->daddr),ntohs(tcp->dest)); : : print_data(htons(ip->tot_len)-sizeof(ep.ip)-sizeof(ep.tcp), : : ep.data-2); : : } : : } : : } : : : : -- : : 도배성 글인갑다. 지숭.--감사염 ^^
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved