Libnet 是一个帮助构建和注入网络数据包的 API。它提供了一个用于低级网络数据包编写和处理的可移植框架(将 libnet 与 libpcap 结合使用,您可以编写一些非常酷的东西)。 Libnet 包括 IP 层和链路层的数据包创建以及大量补充和补充功能。
Libnet 非常方便用来编写网络工具和网络测试代码。 Debian/Ubuntu 和 OpenBSD 中使用 libnet 的一些项目包括:
注意:不幸的是,为libnet-1.0.x编写的旧代码与libnet-1.1.x及更高版本不兼容。
请参阅迁移指南以获取移植帮助。
Libnet 作为一个库和一组包含文件安装。程序中使用的主要包含文件是:
#include <libnet.h>
要获取头文件和库文件的正确搜索路径,请使用标准pkg-config
工具(旧的libnet-config
已弃用):
$ pkg-config --libs --static --cflags libnet
-I/usr/local/include -L/usr/local/lib -lnet
此处显示的前缀路径/usr/local/
只是默认路径。安装 libnet 时使用configure
脚本选择不同的前缀。
对于基于 GNU autotools 的项目,请在configure.ac
中使用以下内容:
# Check for required libraries
PKG_CHECK_MODULES([libnet], [libnet >= 1.2])
在你的Makefile.am
中:
proggy_CFLAGS = $(libnet_CFLAGS)
proggy_LDADD = $(libnet_LIBS)
在线文档位于 https://codedocs.xyz/libnet/libnet/。有关详细信息,请参阅手册页和示例测试代码。
首先从 GitHub 下载最新版本。 Libnet 采用 GNU 配置和构建系统。发布 tarball 和 zip 文件附带预构建的configure
脚本:
$ tar xf libnet-x.y.z.tar.gz
$ cd libnet-x.y.z/
$ ./configure && make
$ sudo make install
要列出可用选项,请输入./configure --help
从 GIT 构建时,使用./autogen.sh生成configure
脚本。为此,您需要全套 GNU 自动工具:autoconf (>=2.69)、automake (>=1.14)、libtool (>=2.4.2)。
如何安装依赖项因系统而异,但在许多 Debian 派生系统上,可以使用apt
:
$ sudo apt install autoconf automake libtool
$ ./autogen.sh
$ ./configure && make
$ sudo make install
Libnet 在柯南中心可用。要使用,请将libnet/1.2
添加到conanfile.txt
首先构建开发。容器:
$ cd .devcontainer
$ docker build -t libnet-builder .
然后用docker编译libnet:
$ cd ..
$ docker run -it --rm -v $(pwd):$(pwd) --workdir=$(pwd) libnet-builder
$ ./autogen.sh # If you've cloned from GitHub
$ ./configure
$ make
在开发环境中运行测试容器(上):
$ ./autogen.sh # If you've cloned from GitHub
$ ./configure --enable-tests
$ make check
make check-TESTS
PASS: udld 1 - libnet_udld__checksum_calculation
PASS: udld 2 - libnet_build_udld__pdu_header_only
PASS: udld 3 - libnet_build_udld__tlv_device_id
PASS: udld 4 - libnet_build_udld__tlv_port_id
PASS: udld 5 - libnet_build_udld__tlv_echo
PASS: udld 6 - libnet_build_udld__tlv_message_interval
PASS: udld 7 - libnet_build_udld__tlv_timeout_interval
PASS: udld 8 - libnet_build_udld__tlv_device_name
PASS: udld 9 - libnet_build_udld__tlv_sequence_number
PASS: udld 10 - libnet_build_udld__build_whole_packet_with_checksum
PASS: ethernet 1 - test_libnet_build_ethernet
============================================================================
Testsuite summary for libnet 1.3
============================================================================
# TOTAL: 11
# PASS: 11
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
注意:在 Linux 上,测试在单独的网络命名空间中运行(使用
unshare
),因此不需要 root (sudo) 访问权限,但在其他系统上,您可能需要成为 root,或者必须更正功能或权限。
要构建文档(可选),您需要 doxygen 和 pod2man:
$ sudo apt install doxygen
$ sudo apt install pod2man || sudo apt install perl
为了在 HTML 文档中显示整齐的图形,还可以安装 graphviz。还有一个 PDF 版本的文档,要构建它,您需要更多的包:
$ sudo apt install texlive-extra-utils texlive-latex-extra
texlive-fonts-recommended latex-xcolor
texlive-font-utils
对于 Microsoft CHM 文档,您需要 HTML Help Workshop,它是 Visual Studio 的一部分:http://go.microsoft.com/fwlink/p/?linkid=154968,在 UNIX 和 GNU/Linux 系统上,请参阅chmcmd
,它是FreePascal 套件中可用:
$ sudo apt install fp-utils-3.0.4
Libnet应用广泛,但长期无人维护,作者也无法联系到。该版本是从 packetfactory.net 的 1.1.3 候选版本分叉出来的,修复了错误、开发并重新发布。
使用 GitHub 问题和拉取请求功能来解决问题和补丁:
http://github.com/libnet/libnet
一些旧文档可在以下位置找到:
http://packetfactory.openwall.net/projects/libnet/index.html