How to add win10pcap to QT proj



  • Hi all,
    I am using Qt Creator 4.3.1 on Windows 10. I would like to use Win10pcap library on Qt but I don't know how to include and use it on Qt. Is there anyone here know about it? Thank in advance.





  • @VRonin
    I have download Win10pcap from http://www.win10pcap.org/download/ . And then installed it on my desktop, but I can find the way to include it on Qt.


  • Lifetime Qt Champion

    Hi,

    What did you try ? What did not work ?



  • Hi @SGaist,
    I did download http://www.win10pcap.org/download/ for win10pcap installer. And installed it on desktop. After that, I download https://www.winpcap.org/devel.htm for Winpcap developer pack as mentioned in Win10pcap website.
    After download, I include wpcap.dll and Packet.dll in .pro file as below:
    "
    INCLUDEPATH += C:/mypath/WpdPack/Include
    LIBS += -L C:/mypath/WpdPack/Lib -lwpcap -lPacket
    "

    And then try the code from winpcap website with the change :
    #include "pcap.h"

    /* prototype of the packet handler */
    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

    int main()
    {
    pcap_if_t *alldevs;
    pcap_if_t *d;
    int inum;
    int i=0;
    pcap_t *adhandle;
    char errbuf[PCAP_ERRBUF_SIZE];

    /* Retrieve the device list on the local machine */
    if (pcap_findalldevs( &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("%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_live(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
                              1,              //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);
    
    /* start the capture */
    pcap_loop(adhandle, 0, packet_handler, NULL);
    
    return 0;
    

    }

    /* Callback function invoked by libpcap for every incoming packet */
    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
    {
    struct tm ltime;
    char timestr[16];
    time_t local_tv_sec;

    /*
     * unused variables
     */
    (VOID)(param);
    (VOID)(pkt_data);
    
    /* 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);
    

    }

    But the code compile fine, but it doesn't run anything. I don't know what wrong with my win10pcap setup or the code.


  • Lifetime Qt Champion

    Go to the Run part of the Project panel, there edit the PATH environment variable and add the path to were the Win10Pcap .dll files can be found.



  • @SGaist
    I tried. It doesn't work.



  • @SGaist
    The application was able to start correctly (0x000007b). Click ok to close the program.



  • Hi, I'm guessing the error 0xc000007b means, you've set the PATH ok to the pcap dll, but it has the wrong bitness, either it's 64-bit and your Qt program is built in 32-bit mode or the other way around.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.