7

I am trying to use gopacket on my windows 10.
I'm using it to sniff and inject packets directly to/from the NIC.
I can easily compile and run my code with GOARCH=386 but can't in GOARCH=amd64.

Worth noticing: I am NOT trying to cross-compile.
I'm using go1.6.windows-386 to compile the 32bit version and when I try to compile with GOARCH=amd64 I use go1.6.windows-amd64.

I used TDM-GCC as linux like compile tools.
The error isn't indicative. it just says

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

Did anyone manage to build this, if it's even possible?

4

3 回答 3

28

好的,所以我想通了。
为了在 Windows 上编译 gopacket 64bit,您需要执行以下操作:

  1. 安装 go_amd64(将 go 二进制文件添加到您的 PATH)
  2. 安装 TDM GCC x64(将 TDM-GCC 二进制文件添加到您的 PATH)
  3. 还将 TDM-GCC\x86_64-w64-mingw32\bin 添加到您的 PATH
  4. 安装Winpcap
  5. 下载 Winpcap 开发者包并解压到 C:\

现在的重点是 lib/x64 文件夹中缺少 linux 静态库文件
(libwpcap.a 和 libpacket.a)。我不知道为什么它们没有
包含在开发人员包中,但无论如何我们可以这样生成它们:

  1. 在您的 PC 中找到 wpcap.dll 和 packet.dll(通常在 c:\windows\system32
  2. 将它们复制到其他临时文件夹,否则您必须向以下命令提供管理员权限
  3. 在这些文件上运行 gendefgendef wpcap.dllgendef packet.dll(可通过 MinGW 安装管理器,包 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 应该可以正常编译了。

于 2016-06-28T07:10:50.613 回答
0

我在 Windows 上以“Wpcap API 兼容模式”安装了 Npcap,现在gopacket可以正常工作了。

于 2019-11-19T04:23:36.563 回答
0

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

只是想补充一点,你可以对 Npcap 做同样的事情,修改 gopacket 源代码以指向 Npcap,它也可以工作。

如果你不知道 Npcap:

于 2018-11-22T00:05:20.770 回答