Windows平台下libnet的编译、安装以及使用

时间:2021-01-02 04:55:13

这两天开始搞网络课程设计,要用到libnet去构造数据包。又因为是做某个网络游戏的分析,所以得在windows下面做。
于是开始倒腾。
从sourceforge上下载了libnet 0.10.11版,用于Windows的是个zip包,然后解压出来放桌面上。
在几个文件夹里翻翻,看了看readme,发现丫居然要手动编译。还好已经有批处理写好了直接用就行。
按照readme里面的说法,我把batfiles/msvcmake.bat复制到../里面,然后双击运行。
报错:

cl 不是内部或外部命令,也不是可运行的程序或批处理文件。

这个错误再正常不过了,环境变量没设置好。。

打开计算机-属性-高级系统设置-环境变量,在用户变量的PATH里加上F:\Visual Studio 9.0\VC\bin。

再执行,错误一堆,全是找不到头文件的错误。
头文件应该是放在哪个环境变量里面呢?这个问题在windows里面我还真不知道,经过一番搜索,原来要新建一个include环境变量和一个lib环境变量。include环境变量里面放F:\Visual Studio 9.0\VC\include,lib里面放F:\Visual Studio 9.0\VC\lib(废话)

然后再编译,又找不到某个头文件了。是Windows.h找不到。Windows.h又在哪里?这个问题真心蛋疼。后来想出一个妙招,打开VS,新建一个工程,输入#include <windows.h>,然后把光标移动到<windows.h>里面,在上面的提示栏立刻出来了:
Windows平台下libnet的编译、安装以及使用
好,把这个值(C:\Program Files\Microsoft SDKs\Windows\v6.0A\include)加入到include环境变量中。同理要在lib环境变量中加入C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib。

编译通过,在lib目录中生成了libnet.lib,好,把它放到F:\Visual Studio 9.0\VC\lib中,然后把include目录的libnet.h放到F:\Visual Studio 9.0\VC\include中(也是废话)。

在VS中新建工程,尝试使用test中的代码进行测试。
结果编译报错,报了一堆link错误,估计又是找不到库了。折腾了半天不知道怎么改,后来在libnet源码的batfiles的目录中的exe.bat中找到了救命稻草:

cl /DTARGET_MSVC /MD /O2 /nologo /I../include %1.c ../lib/libnet.lib wsock32.lib

估计就是链接的时候需要额外指定库文件。
在程序中加入

1
2
#pragma comment(lib,"libnet.lib")
#pragma comment(lib,"wsock32.lib")

即可。
终于搞定了。