我在程序中使用gopacket。在linux上,它运行完美。 但是在Windows上,如果我以前没有安装WinPcap,整个程序就会崩溃。
我的计划是检查是否已安装WinPcap,是否不通知用户他需要使用WinPcap来使用所有功能的100%。
但是我不明白这一点。如果WinPcap不可用,我不能使用gopacket。我的意思是...不是一行代码(=>崩溃)
有人知道我该如何解决吗?我实际上不需要gopacket。我的计划是,如果安装了,那就好了!如果不是,则不在乎...做其他事情。
但是现在我有2个选择...完全删除gopacket或找到一种无需wpcap.dll即可启动我的程序的方法。至少告诉用户他需要它。
请帮助我:(
答案 0 :(得分:0)
您错了,因为您“没有[使用]一行代码”:不难看出
其Windows-specific code calls into winpcap.dll
。
更有趣的是
它的Unix-specific code calls into libpcap.so
,这意味着您仅由于安装了libpcap
软件包(或代码中所命名的任何软件包)就可以在本地系统上工作。
所有这些都意味着当前您的程序不是真正可移植的 无论如何(我的意思是,从某种意义上讲,您应该认为是便携式的)。 您可以运行类似
$ ldd ./yourbinary
看到它打印了某个版本的libpcap.so
的引用。
有几种解决方法。
最简单的方法就是尝试将winpcap.dll
与一起发送。 Windows默认情况下会在试图加载它们的应用程序的当前目录中查找DLL。由于gopacket
使用cgo
,这意味着winpcap.dll
会在应用程序启动时尝试链接到它,因此在尝试将该库变为应用程序之前,应用程序没有机会更改其工作目录。找到并链接。
一种更复杂的方法是制作(或获得)winpcap库的静态版本(请记住DLL是一个库,只是它的一种特殊形式),然后四处编译gopacket
以便于选择该静态库。
答案 1 :(得分:0)
在“ Wpcap API兼容模式”下安装Npcap。