2 * main.c - main hdw-sniff
4 * author: hackbard@hackdaworld.dyndns.org
14 puts("usage: hdw-sniff <options>");
15 puts("\toptions:\t-m <mode> \t1 monitoring, 2 managed");
16 puts("\t\t-d <device> \twlan0,eth0");
17 puts("\t\t-l <logfile>");
18 puts("\t\t-h \tdisplay this help message");
22 int hop_channel(info_struct *info)
25 if(info->current_channel>=CHANNEL_MAX) info->current_channel=1;
26 memset(&iwreq,0,sizeof(iwreq));
27 strcpy(iwreq.ifr_name,info->device);
29 iwreq.u.freq.m=info->current_channel;
30 if(ioctl(info->channel_hop_fd,SIOCSIWFREQ,&iwreq)<0)
32 puts("unable to hop channel");
36 ++(info->current_channel);
40 int main(int argc, char **argv)
43 char pcap_error[PCAP_ERRBUF_SIZE];
44 char sys_call[SYSCALL_MAX];
46 int pcap_fd,channel_hop_fd;;
50 struct timeval pcap_fd_set_tv;
52 struct info_struct info;
55 memset(&info,0,sizeof(struct info_struct));
71 info.caps=((1<<atoi(argv[i+1]))&CAP_MODE_MASK)|info.caps;
75 if ((info.logfile_fd=open(argv[i+1],O_RDWR|O_CREAT))!=0)
76 printf("logfile -> %s\n",argv[i+1]);
78 puts("warning: can't write to logfile.");
82 strncpy(info.device,argv[i+1],MAX_DEV_CHARS);
89 /* setting up device */
90 if((info.caps&CAP_MODE_MASK)==MONITORING_MODE)
92 sprintf(sys_call,"iwpriv %s monitor %d",info.device,IWPRIV_M_MODE);
94 puts("set monitoring mode ...");
96 sprintf(sys_call,"ifconfig %s up",info.device);
98 puts("device up ...");
101 if((info.pcap_handle=pcap_open_live(info.device,BUFSIZ,1,-1,pcap_error))==NULL)
103 printf("%s: %s\n",argv[0],pcap_error);
106 pcap_fd=pcap_fileno(pcap_handle);
107 /* -> non blocking? */
109 info.channel_hop_fd=socket(AF_INET,SOCK_DGRAM,0);
110 /* socket fd for channel hopping */
112 /* watch pcap_fd for reading */
114 FD_SET(pcap_fd,&pcap_fd_set);
115 fd_set_tv.tv_sec=PCAP_SELECT_SEC;
116 pcap_fd_set_tv.tv_usec=PCAP_SELECT_USEC;
118 /* parse packages until user breaks */
119 while(!(info.caps&CAP_QUIT_MASK))
121 if(select(pcap_fd+1,&pcap_fd_set,NULL,NULL,&pcap_fd_set_tv))
122 pcap_dispatch(pcap_handle,-1,parse_package,(unsigned char *)&info);
127 puts("bugreports: hackbard@hackdaworld.dyndns.org");