2 * main.c - main hdw-sniff
4 * Copyright (C) 2004 hackbard@hackdaworld.dyndns.org
13 puts("usage: hdw-sniff <options>");
14 puts("\toptions:\t-m <mode> \t1 monitoring, 2 managed");
15 puts("\t\t-d <device> \twlan0,eth0");
16 puts("\t\t-l <logfile>");
17 puts("\t\t-k <key> \t(string)");
18 puts("\t\t-h \tdisplay this help message");
22 int hop_channel(t_info *info) {
26 if(info->current_channel>=CHANNEL_MAX) info->current_channel=1;
27 memset(&iwreq,0,sizeof(iwreq));
28 strcpy(iwreq.ifr_name,info->device);
30 iwreq.u.freq.m=info->current_channel;
31 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) {
44 memset(&info,0,sizeof(t_info));
56 info.caps=((1<<atoi(argv[i+1]))&CAP_MODE_MASK)|info.caps;
60 if ((info.logfile_fd=open(argv[i+1],O_RDWR|O_CREAT))!=0)
61 printf("logfile -> %s\n",argv[i+1]);
63 puts("warning: can't write to logfile.");
67 strncpy(info.device,argv[i+1],MAX_DEV_CHARS);
74 /* setting up device */
75 if((info.caps&CAP_MODE_MASK)==MONITORING_MODE)
77 sprintf(sys_call,"iwpriv %s monitor %d",info.device,IWPRIV_M_MODE);
79 puts("set monitoring mode ...");
81 sprintf(sys_call,"ifconfig %s up",info.device);
83 puts("device up ...");
86 if((info.pcap_handle=pcap_open_live(info.device,BUFSIZ,1,-1,pcap_error))==NULL)
88 printf("%s: %s\n",argv[0],pcap_error);
91 pcap_fd=pcap_fileno(pcap_handle);
92 /* -> non blocking? */
94 info.channel_hop_fd=socket(AF_INET,SOCK_DGRAM,0);
95 /* socket fd for channel hopping */
97 /* watch pcap_fd for reading */
99 FD_SET(pcap_fd,&pcap_fd_set);
100 fd_set_tv.tv_sec=PCAP_SELECT_SEC;
101 pcap_fd_set_tv.tv_usec=PCAP_SELECT_USEC;
103 /* parse packages until user breaks */
104 while(!(info.caps&CAP_QUIT_MASK))
106 if(select(pcap_fd+1,&pcap_fd_set,NULL,NULL,&pcap_fd_set_tv))
107 pcap_dispatch(pcap_handle,-1,parse_package,(unsigned char *)&info);
112 puts("bugreports: hackbard@hackdaworld.dyndns.org");