>> 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