在Windows 64bit上编译gopacket



我正在尝试在Windows 10上使用gopacket。
我正在使用它直接嗅探和直接从NIC进行注入数据包。
我可以轻松地编译并运行胶囊= 386,但不能在胶囊= AMD64中进行编译。

值得注意的:我不是要交叉编译。
我正在使用GO1.6.Windows-386来编译32位版本,当我尝试使用acararch = amd64编译时,我使用go1.6.windows-amd64。

我将TDM-GCC用作Linux喜欢编译工具。
错误不是指示性的。它只是说

c:/WpdPack/Lib/x64/wpcap.lib: error adding symbols: File in wrong format collect2.exe: error ld returned 1 exit status

是否有人设法构建这个?

好的,所以我已经弄清楚了。
为了在Windows上编译Gopacket 64bit,您需要执行以下操作:

  1. 安装go_amd64(在路径中添加GO Binaries)
  2. 安装TDM GCC X64(在您的路径中添加TDM-GCC二进制文件)
  3. 还将TDM-GCC x86_64-W64-MingW32 bin添加到您的路径
  4. 安装winpcap
  5. 下载winpcap开发人员的包并将其提取到C:

现在关键是缺少Linux静态库文件
(libwpcap.a和libpacket.a)来自lib/x64文件夹。我不知道为什么他们不是
包括在开发人员包中,但无论如何,这就是我们可以生成它们的方式:

  1. 在PC中查找wpcap.dll和packet.dll(通常在C: Windows System32
  2. 将它们复制到其他一些临时文件夹,否则您必须将管理员privs提供给以下命令
  3. 在这些文件gendef wpcap.dllgendef packet.dll上运行GENDEF(可使用Mingw安装管理器,Package Mingw32-Gendef)
  4. 这将生成.def文件
  5. 现在我们将生成静态库文件:
  6. 运行dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libwpcap.a --input-def wpcap.def
  7. dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libpacket.a --input-def packet.def
  8. 现在,只需将libwpcap.a和libpacket.a复制到c: wpdpack lib x64

就是这样。
现在,gopacket应该没有问题。

非常感谢您的解决方案,它节省了很多时间!

只是想补充说您可以使用NPCAP执行相同的操作,修改Gopacket源代码以指向NPCAP,并且它也可以正常工作。

如果您不知道NPCAP:

  • https://nmap.org/npcap/vs-winpcap.html
  • https://nmap.org/npcap/

我在" WPCAP API兼容模式"中的Windows上安装了NPCAP,gopacket现在正常工作。

相关内容

  • 没有找到相关文章

最新更新