我正在尝试在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,您需要执行以下操作:
- 安装go_amd64(在路径中添加GO Binaries)
- 安装TDM GCC X64(在您的路径中添加TDM-GCC二进制文件)
- 还将TDM-GCC x86_64-W64-MingW32 bin添加到您的路径
- 安装winpcap
- 下载winpcap开发人员的包并将其提取到C:
现在关键是缺少Linux静态库文件
(libwpcap.a和libpacket.a)来自lib/x64文件夹。我不知道为什么他们不是
包括在开发人员包中,但无论如何,这就是我们可以生成它们的方式:
- 在PC中查找wpcap.dll和packet.dll(通常在C: Windows System32 中
- 将它们复制到其他一些临时文件夹,否则您必须将管理员privs提供给以下命令
- 在这些文件
gendef wpcap.dll
和gendef packet.dll
上运行GENDEF(可使用Mingw安装管理器,Package Mingw32-Gendef) - 这将生成.def文件
- 现在我们将生成静态库文件:
- 运行
dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libwpcap.a --input-def wpcap.def
- 和
dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libpacket.a --input-def packet.def
- 现在,只需将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
现在正常工作。