fixed channelhopping mode
authorhackbard <hackbard>
Tue, 12 Nov 2002 14:08:03 +0000 (14:08 +0000)
committerhackbard <hackbard>
Tue, 12 Nov 2002 14:08:03 +0000 (14:08 +0000)
hdw-sniff.c
hdw-sniff.h

index db285a2..54e40db 100644 (file)
@@ -31,7 +31,7 @@ int main(int argc, char *argv[]) {
 
        char pcap_error[PCAP_ERRBUF_SIZE];
        pcap_t *pcap_handle;
-       int pcap_fd;
+       int pcap_fd,foo_fd;
        fd_set pcap_fd_set;
        struct timeval fd_set_tv;
        char sys_call[30];
@@ -89,15 +89,24 @@ int main(int argc, char *argv[]) {
 
        /* prepare for select */
        pcap_fd=pcap_fileno(pcap_handle);
-       FD_ZERO(&pcap_fd_set);
-       FD_SET(pcap_fd,&pcap_fd_set);
-       fd_set_tv.tv_sec=0;
-       fd_set_tv.tv_usec=500000;
+
+       /* create file descriptor */
+       if((foo_fd=socket(AF_INET,SOCK_DGRAM,0))==-1) {
+               printf("unable to create socket foo_fd\n");
+               return -1;
+       }
 
        /* do loopp */
-       while(1) {
-               if((select(pcap_fd+1,&pcap_fd_set,NULL,NULL,&fd_set_tv)) && (FD_ISSET(pcap_fd,&pcap_fd_set))) pcap_loop(pcap_handle,-1,pcap_process,(u_char *)&my_info_struct);
-               else if((hop_channel(&my_info_struct,pcap_fd))==-1) { 
+       while (1) {
+
+               /* set pcap_fd */
+               FD_ZERO(&pcap_fd_set);
+               FD_SET(pcap_fd,&pcap_fd_set);
+               fd_set_tv.tv_sec=0;
+               fd_set_tv.tv_usec=500000;
+
+               if((select(pcap_fd+1,&pcap_fd_set,NULL,NULL,&fd_set_tv)) && (FD_ISSET(pcap_fd,&pcap_fd_set))) pcap_dispatch(pcap_handle,-1,pcap_process,(u_char *)&my_info_struct);
+               else if((hop_channel(&my_info_struct,foo_fd))==-1) { 
                        printf("channelhopping failed, aborting\n");
                        return -1;
                }
@@ -113,8 +122,8 @@ void pcap_process(u_char *info,const struct pcap_pkthdr *pcap_header,
        /* local variables */
        struct linux_wlan_ng_prism_hdr *prism_hdr;
        struct ieee802_11_hdr *w_hdr;
-       struct ip *ip_hdr;
        struct ethhdr *e_hdr;
+       struct ip *ip_hdr;
        struct info_struct *my_info_struct;
        int i;
 
@@ -159,6 +168,7 @@ void pcap_process(u_char *info,const struct pcap_pkthdr *pcap_header,
 
        /* ieee802.3 */
        /* ethernet */
+       printf("ethernet:\n");
        e_hdr=(struct ethhdr *)package;
        /* what types ? */
        printf("type = ");
@@ -192,24 +202,19 @@ void pcap_process(u_char *info,const struct pcap_pkthdr *pcap_header,
        printf("\n");
 }
 
-int hop_channel(struct info_struct *info,int pcap_fd) {
+int hop_channel(struct info_struct *info,int foo_fd) {
        struct iwreq my_iwreq;
-       int foo_fd;
-       /* oder vielleicht doch pcap_fd ? */
-       if((foo_fd=socket(AF_INET,SOCK_DGRAM,0))==-1) {
-               printf("unable to create socket\n");
-               return -1;
-       }
 
-       if (info->channel==15) info->channel=1;
+       if (info->channel>=14) info->channel=1;
 
        memset(&my_iwreq,0,sizeof(my_iwreq));
        strcpy(my_iwreq.ifr_name,info->dev);
        printf("debug: device = %s\n",my_iwreq.ifr_name);
+       printf("debug: %d\n",foo_fd);
+       printf("debug: channel = %d\n",info->channel);
        my_iwreq.u.freq.e=0;
        my_iwreq.u.freq.m=info->channel;
-       // if((ioctl(foo_fd,SIOCSIWFREQ,&my_iwreq))==-1) {
-       if((ioctl(pcap_fd,SIOCSIWFREQ,&my_iwreq))==-1) {
+       if((ioctl(foo_fd,SIOCSIWFREQ,&my_iwreq))==-1) {
                printf("unable to hop channels\n");
                perror("ioctl");
                return -1;
@@ -218,4 +223,3 @@ int hop_channel(struct info_struct *info,int pcap_fd) {
        ++(info->channel);
        return 0;
 }
-       
index 7e34dfc..fbea5d5 100644 (file)
@@ -13,5 +13,5 @@ struct info_struct {
         };
 
 /* hop_chanel function */
-int hop_channel(struct info_struct *info,int pcap_fd);
+int hop_channel(struct info_struct *info,int foo_fd);