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 */
00016     if (pcap_findalldevs(&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 adapter */
00053     if ( (adhandle= pcap_open_live(d->name, // name of the device
00054                              65536,     // portion of the packet to capture. 
00055                              // 65536 grants that the whole packet will be captured on all the MACs.
00056                              1,         // promiscuous mode
00057                              1000,      // read timeout
00058                              errbuf     // error buffer
00059                              ) ) == NULL)
00060     {
00061         fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n");
00062         /* Free the device list */
00063         pcap_freealldevs(alldevs);
00064         return -1;
00065     }
00066     
00067     printf("\nlistening on %s...\n", d->description);
00068     
00069     /* At this point, we don't need any more the device list. Free it */
00070     pcap_freealldevs(alldevs);
00071     
00072     /* start the capture */
00073     pcap_loop(adhandle, 0, packet_handler, NULL);
00074     
00075     return 0;
00076 }
00077 
00078 
00079 /* Callback function invoked by libpcap for every incoming packet */
00080 void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
00081 {
00082     struct tm *ltime;
00083     char timestr[16];
00084     
00085     /* convert the timestamp to readable format */
00086     ltime=localtime(&header->ts.tv_sec);
00087     strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);
00088     
00089     printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
00090     
00091 }

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