希望使Winpcap开发人员包(4.1.2)在Windows 7 64位上运行。我正在使用Cygwin(4.1.10)编译器在Netbeans IDE中使用C/C++进行编程。我想直接从UDP数据包中提取一些GPS数据,而不是使用另一个程序,在此过程中我将其从中间文件中提取出来。如果我不能解决这个问题,那么我接下来将在Ubuntu中尝试一下,看看是否可以在其中运行libpcap(即使Windows是首选的,因为我正在使用其他设备)。这就是我的位置(我的主要资源来自Introduction to the WinPcap Networking LibrariesUsing WinPcap in your programs和tcpdump.org上的pcap编程(注意:我无法发布第三个链接,因为它说我的声誉必须更高)):

  • 我已经将winpcap开发人员包安装到C:\Users\\Documents
  • 我已经安装了winpcap dll(尽管我实际上不确定为什么要这样做,因为我看过的所有文档似乎都只使用.lib文件)
  • 根据上述链接的说明,我在项目中添加了以下设置:
  • 对于“包含目录和标题”,我将路径放置到开发人员包
  • 中的winpcap Include 文件夹中
  • 对于“预处理程序定义”,我添加了 HAVE_REMOTE WPCAP
  • 对于“其他库目录”,我将路径放置到开发人员包
  • 中的winpcap Lib 文件夹中

    通过完成上述所有操作,并在没有其他代码的情况下包括 pcap.h header ,便可以编译程序。但是,我一直在引用的安装说明也指出要添加以下两个“其他依赖项”: winpcap.lib Packet.lib Packet.lib

    一旦这样做,我将无法编译并获得以下信息:
    make[2]: Entering directory '/cygdrive/c/Users/<user>/Documents/NetBeansProjects/GPS_Parcer'
    make[2]: *** No rule to make target 'winpcap.lib', needed by 'dist/Debug/Cygwin_4.x-Windows/gps_parcer.exe'.  Stop.
    make[2]: Leaving directory '/cygdrive/c/Users/<user>/Documents/NetBeansProjects/GPS_Parcer'
    nbproject/Makefile-Debug.mk:61: recipe for target '.build-conf' failed
    make[1]: *** [.build-conf] Error 2
    make[1]: Leaving directory '/cygdrive/c/Users/<user>/Documents/NetBeansProjects/GPS_Parcer'
    nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
    make: *** [.build-impl] Error 2
    

    出于好奇,看看那些依赖是否真的很重要,我删除了它们,然后添加了一些我从tcpdump.org复制的基本代码:
    #include <stdio.h>
    #include <pcap.h>
    
    int main(int argc, char *argv[])
    {
        char *dev, errbuf[PCAP_ERRBUF_SIZE];
    
        dev = pcap_lookupdev(errbuf);  //error is here!
    
        if (dev == NULL) {
            fprintf(stderr, "Couldn't find default device: %s\n", errbuf);
            return(2);
        }
        printf("Device: %s\n", dev);
        return(0);
    }
    

    我收到undefined reference to 'pcap_lookupdev'错误。

    我还读到Winpcap可能只能与MS Visual Studio一起使用,所以我实际上不知道那是不是真的。

    很抱歉写了这么长时间,但是如果有人对此有一些见解或经验,将不胜感激。

    最佳答案

    同一套仪器也有类似的问题。今天,我的经历变得成功,我找到了解决方案!

  • (最重要)。由于您是使用cygwin(即GNU Linux)工具链编译代码的,因此需要在项目直接库中添加: libwpcap.a libpacket.a wintcap开发人员软件包中的:project properties -> linker tab -> libraries -> "add library"(这仅提供正确的名称)您可以在编译行中看到这些库的列表:-lwpcap -lpacket)。不幸的是,这些库只有x32版本...

  • 因此,如果您使用的是x64版本的cygwin(与我一样),则:
  • 您需要下载并安装x32版本的cygwin。确保在安装过程中选择编译器和其他必要的软件包。然后,在选项卡C/C++的NetBeans属性中,添加来自x32 cygwin的工具链,并将其命名为cygwin_32。接下来,在项目的属性中,选择此(cygwin_32)工具包,并验证您是否提供了WinPcap正确目录/lib/include的路径。
    尝试建立它。此时,您的项目应该已成功构建。接下来,为了能够运行您的程序,您必须提供cygwin的/bin目录中的正确(x32)版本的 cygwin1.dll 。 (只需将其复制到可执行文件的目录中)。

  • 这样获得的可执行文件在sp2的WinXP(x32)上成功进行了测试,当然在Win7 x64上也进行了测试。 (对于测试,我按原样使用了WpdPack\Examples-pcap\basic_dump\basic_dump.c存档中的WpdPack_4_1_2.zip)。

    希望这对某人有帮助。

    10-08 09:00