Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

basic_dump.c

Go to the documentation of this file.
00001 #include "pcap.h" 00002 00003 /* prototype of the packet handler */ 00004 void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); 00005 00006 main() 00007 { 00008 pcap_if_t *alldevs; 00009 pcap_if_t *d; 00010 int inum; 00011 int i=0; 00012 pcap_t *adhandle; 00013 char errbuf[PCAP_ERRBUF_SIZE]; 00014 00015 /* Retrieve the device list on the local machine */ 00016 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) 00017 { 00018 fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); 00019 exit(1); 00020 } 00021 00022 /* Print the list */ 00023 for(d=alldevs; d; d=d->next) 00024 { 00025 printf("%d. %s", ++i, d->name); 00026 if (d->description) 00027 printf(" (%s)\n", d->description); 00028 else 00029 printf(" (No description available)\n"); 00030 } 00031 00032 if(i==0) 00033 { 00034 printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); 00035 return -1; 00036 } 00037 00038 printf("Enter the interface number (1-%d):",i); 00039 scanf("%d", &inum); 00040 00041 if(inum < 1 || inum > i) 00042 { 00043 printf("\nInterface number out of range.\n"); 00044 /* Free the device list */ 00045 pcap_freealldevs(alldevs); 00046 return -1; 00047 } 00048 00049 /* Jump to the selected adapter */ 00050 for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); 00051 00052 /* Open the device */ 00053 if ( (adhandle= pcap_open(d->name, // name of the device 00054 65536, // portion of the packet to capture 00055 // 65536 guarantees that the whole packet will be captured on all the link layers 00056 PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode 00057 1000, // read timeout 00058 NULL, // authentication on the remote machine 00059 errbuf // error buffer 00060 ) ) == NULL) 00061 { 00062 fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); 00063 /* Free the device list */ 00064 pcap_freealldevs(alldevs); 00065 return -1; 00066 } 00067 00068 printf("\nlistening on %s...\n", d->description); 00069 00070 /* At this point, we don't need any more the device list. Free it */ 00071 pcap_freealldevs(alldevs); 00072 00073 /* start the capture */ 00074 pcap_loop(adhandle, 0, packet_handler, NULL); 00075 00076 return 0; 00077 } 00078 00079 00080 /* Callback function invoked by libpcap for every incoming packet */ 00081 void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) 00082 { 00083 struct tm *ltime; 00084 char timestr[16]; 00085 00086 /* convert the timestamp to readable format */ 00087 ltime=localtime(&header->ts.tv_sec); 00088 strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); 00089 00090 printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); 00091 00092 }

documentation. Copyright (c) 2002-2003 Politecnico di Torino. All rights reserved.