From 5bce46bd7561ae1857c7e17614133f01f984ae78 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Thu, 5 Mar 2020 21:23:21 +1100 Subject: Removed winpcap and cleaned up network module selection. (nw) The pcap.h header itself has the problematic original BSD license, including the obnoxious advertising clause. Using tap/tun networking on Windows provides a much better experience, so the extra setup is worth it. This patch also allows you to enable pcap on platforms where it's disabled by default with USE_PCAP=1 if you really want to use it. --- 3rdparty/winpcap/docs/html/group__wpcap__tut4.html | 137 --------------------- 1 file changed, 137 deletions(-) delete mode 100644 3rdparty/winpcap/docs/html/group__wpcap__tut4.html (limited to '3rdparty/winpcap/docs/html/group__wpcap__tut4.html') diff --git a/3rdparty/winpcap/docs/html/group__wpcap__tut4.html b/3rdparty/winpcap/docs/html/group__wpcap__tut4.html deleted file mode 100644 index ef5ef03f3af..00000000000 --- a/3rdparty/winpcap/docs/html/group__wpcap__tut4.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - -WinPcap: Capturing the packets without the callback - - - - - - -
-

Capturing the packets without the callback

-
-

The example program in this lesson behaves exactly like the previous program (Opening an adapter and capturing the packets), but it uses pcap_next_ex() instead of pcap_loop().

-

The callback-based capture mechanism of pcap_loop() is elegant and it could be a good choice in some situations. However, handling a callback is sometimes not practical -- it often makes the program more complex especially in situations with multithreaded applications or C++ classes.

-

In these cases, pcap_next_ex() retrievs a packet with a direct call -- using pcap_next_ex() packets are received only when the programmer wants them.

-

The parameters of this function are the same as a capture callback -- it takes an adapter descriptor and a couple of pointers that will be initialized and returned to the user (one to a pcap_pkthdr structure and another to a buffer with the packet data).

-

In the following program, we recycle the callback code of the previous lesson's example and move it inside main() right after the call to pcap_next_ex().

-
#include "pcap.h"
-
-
-int main()
-{
-pcap_if_t *alldevs;
-pcap_if_t *d;
-int inum;
-int i=0;
-pcap_t *adhandle;
-int res;
-char errbuf[PCAP_ERRBUF_SIZE];
-struct tm ltime;
-char timestr[16];
-struct pcap_pkthdr *header;
-const u_char *pkt_data;
-time_t local_tv_sec;
-    
-    
-    /* Retrieve the device list on the local machine */
-    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
-    {
-        fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
-        exit(1);
-    }
-    
-    /* Print the list */
-    for(d=alldevs; d; d=d->next)
-    {
-        printf("%d. %s", ++i, d->name);
-        if (d->description)
-            printf(" (%s)\n", d->description);
-        else
-            printf(" (No description available)\n");
-    }
-    
-    if(i==0)
-    {
-        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
-        return -1;
-    }
-    
-    printf("Enter the interface number (1-%d):",i);
-    scanf_s("%d", &inum);
-    
-    if(inum < 1 || inum > i)
-    {
-        printf("\nInterface number out of range.\n");
-        /* Free the device list */
-        pcap_freealldevs(alldevs);
-        return -1;
-    }
-    
-    /* Jump to the selected adapter */
-    for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
-    
-    /* Open the device */
-    if ( (adhandle= pcap_open(d->name,          // name of the device
-                              65536,            // portion of the packet to capture. 
-                                                // 65536 guarantees that the whole packet will be captured on all the link layers
-                              PCAP_OPENFLAG_PROMISCUOUS,    // promiscuous mode
-                              1000,             // read timeout
-                              NULL,             // authentication on the remote machine
-                              errbuf            // error buffer
-                              ) ) == NULL)
-    {
-        fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
-        /* Free the device list */
-        pcap_freealldevs(alldevs);
-        return -1;
-    }
-    
-    printf("\nlistening on %s...\n", d->description);
-    
-    /* At this point, we don't need any more the device list. Free it */
-    pcap_freealldevs(alldevs);
-    
-    /* Retrieve the packets */
-    while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0){
-        
-        if(res == 0)
-            /* Timeout elapsed */
-            continue;
-        
-        /* convert the timestamp to readable format */
-        local_tv_sec = header->ts.tv_sec;
-        localtime_s(&ltime, &local_tv_sec);
-        strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);
-        
-        printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
-    }
-    
-    if(res == -1){
-        printf("Error reading the packets: %s\n", pcap_geterr(adhandle));
-        return -1;
-    }
-    
-    return 0;
-}
-

Why do we use pcap_next_ex() instead of the old pcap_next()? Because pcap_next() has some drawbacks. First of all, it is inefficient because it hides the callback method but still relies on pcap_dispatch(). Second, it is not able to detect EOF, so it's not very useful when gathering packets from a file.

-

Notice also that pcap_next_ex() returns different values for success, timeout elapsed, error and EOF conditions.

-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 -CACE Technologies. All rights reserved.

-- cgit v1.2.3-70-g09d2