使用Cygwin C ++和Netbeans IDE进行Winpcap开发人员使用

寻找获得在Windows 7 64位上运行的Winpcap开发包(4.1.2)。 我正在使用Cygwin(4.1.10)编译器在Netbeans IDE中用C / C ++进行编程。 我想直接从UDP数据包中提取一些GPS数据,而不是使用另一个程序,在这里我要经过一个中间步骤,并从文本文件中提取它们。 如果我不能解决这个问题,我会尝试在Ubuntu下,看看我是否可以在那里工作libpcap(即使Windows是首选的,因为我使用的其他设备)。 这里是我在哪里(我的主要资源已经从介绍到WinPcapnetworking库 , 在你的程序中使用WinPcap和在tcpdump.org用pcap编程(注意:我不能发布第三个链接,因为它说我的声誉需要更高)):

  1. 我已经安装了winpcap开发包到C:\ Users \ Documents
  2. 我已经安装了winpcap DLL(虽然我不太确定为什么这是必须的,因为我所见过的所有文档似乎只使用.lib文件)
  3. 根据以上链接指示,我在项目中添加了以下设置:
    • 对于“Include Directories and Headers”,我把path放到开发者包的winpcap Include文件夹中
    • 对于“预处理器定义”,我添加了HAVE_REMOTEWPCAP
    • 对于“其他库目录”,我把path从开发包中的winpcap Lib文件夹

通过做所有上述和包括pcap.h头没有额外的代码,我可以编译我的程序。 然而,我一直在引用的安装说明还声明添加以下两个“附加依赖项”: winpcap.libPacket.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的东西,所以我其实不知道这是真的。

对不起,长时间的写作,但如果有人有一些见解或经验,这将不胜感激。

我也遇到过类似的问题。 今天,我的经验成功了,我找到了解决办法!

  1. (最重要的)。 由于你用cygwin(即GNU Linux)工具链编译你的代码,你需要添加到你的项目直线库: libwpcap.alibpacket.awinpcap的开发包: project properties -> linker tab -> libraries -> "add library" (这只是提供了编译行中的库的正确名称,你可以看到: -lwpcap -lpacket )。 不幸的是,这些库只有x32版本…

所以,如果你使用cygwin的x64版本(如我),那么:

  1. 您需要下载并安装cygwin的 x32版本。 在安装过程中一定要选择编译器和其他必要的软件包。 然后,在C / C ++标签上的NetBeans属性中,从x32 cygwin中添加工具链,并将其cygwin_32cygwin_32 。 接下来,在你的项目的属性中选择这个( cygwin_32 )工具包,并验证是否提供WinPcap的正确目录/lib/include的路径。 尝试构建它。 在这一点上,你的项目应该成功建立。 接下来,为了能够运行你的程序,你必须提供cygwin的 /bin目录下cygwin1.dll的正确版本(x32)。 (只需将其复制到可执行文件的目录)。

这样得到的可执行文件,我成功地在WinXP(x32)与sp2 ,当然在我的Win7 x64测试 。 (对于测试,我使用WpdPack\Examples-pcap\basic_dump\basic_dump.cWpdPack_4_1_2.zip归档,就像那样)。

希望这会对某人有所帮助。