From d161945cf9722f66bd5690f58fc0a95fc348e532 Mon Sep 17 00:00:00 2001 From: hackbard Date: Wed, 18 Sep 2002 04:09:22 +0000 Subject: [PATCH] fixed gcc warnings and some pointer issues thanks to hunz struct definition moved to hdw-sinff.h --- hdw-sniff.c | 42 +++++++++++++++++++++++++++--------------- hdw-sniff.h | 7 ++++++- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/hdw-sniff.c b/hdw-sniff.c index a201688..d3b2ca8 100644 --- a/hdw-sniff.c +++ b/hdw-sniff.c @@ -5,6 +5,12 @@ */ #include +#include +#include +#include +#include +#include +#include #include /* IEEE 802.3 stuff -- i will concentrate on .11 stuff before! */ @@ -24,8 +30,7 @@ int main(int argc, char *argv[]) { pcap_t *pcap_handle; char sys_call[30]; FILE *logfile; - int count; - int *p_count; + struct info_struct my_info_struct; /* parse the arguments */ if(argc<3) { @@ -46,10 +51,13 @@ int main(int argc, char *argv[]) { } /* setting up device and set monitor mode */ - if(atoi(argv[2])==1 && (strncmp(argv[1],"wlan",4)==0)) { - printf("setting to monitor mode 3\n"); - sprintf(sys_call,"iwpriv %s monitor 3",argv[1]); - system(sys_call); + if(atoi(argv[2])==1) { + printf("setting to monitor mode\n"); + if(strncmp(argv[1],"wlan",4)==0) + sprintf(sys_call,"iwpriv %s monitor 3",argv[1]); + if(strncmp(argv[1],"eth",3)==0) + sprintf(sys_call,"ifconfig %s promisc",argv[1]); + system(sys_call); } printf("setting up interface\n"); sprintf(sys_call,"ifconfig %s up",argv[1]); @@ -63,35 +71,39 @@ int main(int argc, char *argv[]) { } /* grab a package until user breaks */ - count=0; - p_count=&count; - pcap_loop(pcap_handle,-1,pcap_process,(u_char *)p_count); + my_info_struct.count=0; + my_info_struct.mmode=argv[2][0]; + strcpy(my_info_struct.dev,argv[1]); + /* do loopp */ + pcap_loop(pcap_handle,-1,pcap_process,(u_char *)&my_info_struct); + return 0; } /* pcap_process callback function */ -void pcap_process(u_char *count,const struct pcap_pkthdr *pcap_header, +void pcap_process(u_char *info,const struct pcap_pkthdr *pcap_header, const u_char *package) { /* local variables */ struct ethhdr *e_hdr; struct ip *ip_hdr; struct ieee802_11_hdr *w_hdr; + struct info_struct *my_info_struct; int i; - int *p_count; - p_count=(int *)count; - ++(*p_count); + my_info_struct=(struct info_struct *)info; + ++(my_info_struct->count); printf("\n"); - printf("---> package %d ---- %s",*p_count, + printf("---> package %d ---- %s",my_info_struct->count, ctime((const time_t*)&(pcap_header->ts.tv_sec))); printf("pcap header: "); printf("capture length=%d ",pcap_header->caplen); printf("length(off wire)=%d\n",pcap_header->len); /* is ieee802.11 ? -- we assume yes :) */ - if(atoi(argv[2])==1 && (strncmp(argv[1],"wlan",4)==0)) { + if((my_info_struct->mmode-0x30==1) && + (strncmp(my_info_struct->dev,"wlan",4)==0)) { printf("debug: ieee802.11\n"); } diff --git a/hdw-sniff.h b/hdw-sniff.h index d7a3e89..e7a6995 100644 --- a/hdw-sniff.h +++ b/hdw-sniff.h @@ -2,4 +2,9 @@ void pcap_process(u_char *count,const struct pcap_pkthdr *pcap_header, const u_char *package); - +/* info struct */ +struct info_struct { + int count; /* count packages */ + char dev[10]; /* device */ + char mmode; /* monitor type ... and later more */ + }; -- 2.20.1