Libnet is an API to help with the construction and injection of network packets. It provides a portable framework for low-level network packet writing and handling (use libnet in conjunction with libpcap and you can write some really cool stuff). Libnet includes packet creation at the IP layer and at the link layer as well as a host of supplementary and complementary functionality.
Libnet is very handy with which to write network tools and network test code. Some projects, available in Debian/Ubuntu and OpenBSD, using libnet are:
See the man page and sample test code for more detailed information. Online documentation is available at https://codedocs.xyz/libnet/libnet/
NOTE: Legacy code written for libnet-1.0.x is unfortunately incompatible with libnet-1.1.x and later.
See the Migration Guide for porting help.
First download the latest release from GitHub. Libnet employs the
GNU configure and build system. The release tarballs and
zip files ship with a pre-built configure
script:
tar xf libnet-x.y.z.tar.gz
cd libnet-x.y.z/
./configure && make
sudo make install
To list available options, type ./configure --help
When building from GIT, use ./autogen.sh to generate the
configure
script. For this you need the full suite of the GNU
autotools: autoconf (>=2.69), automake (>=1.14), libtool (>=2.4.2).
How to install the dependencies varies by system, but on many Debian derived
systems, apt
can be used:
sudo apt install autoconf automake libtool
Libnet now is available on Conan Center.
Please add libnet/1.2
to your conanfile.txt
# Build image
cd .devcontainer
docker build -t libnet-builder .
# Compile libnet with docker
cd ..
docker run -it --rm -v $(pwd):$(pwd) --workdir=$(pwd) libnet-builder
./autogen.sh
./configure
make
# Running tests in the building Docker ^
./autogen.sh
./configure --enable-tests
make
sudo ./tests/libnet_unit_tests
# Approximate output:
builder$ ./tests/libnet_unit_tests
[==========] Running 1 test(s).
[ RUN ] test_libnet_build_ethernet
[ OK ] test_libnet_build_ethernet
[==========] 1 test(s) run.
[ PASSED ] 1 test(s).
builder$
To build the documentation (optional) you need doxygen and pod2man:
sudo apt install doxygen
sudo apt install pod2man || sudo apt install perl
For neat graphics in the HTML documentation, also install graphviz. There is also a PDF version of the docs, to build that you need quite a few more packages:
sudo apt install texlive-extra-utils texlive-latex-extra \
texlive-fonts-recommended latex-xcolor \
texlive-font-utils
For Microsoft CHM docs you need the HTML Help Workshop, which is part
of Visual Studio: http://go.microsoft.com/fwlink/p/?linkid=154968, on
UNIX and GNU/Linux systems, see chmcmd
, which is available in the
FreePascal suite:
sudo apt install fp-utils-3.0.4
Libnet is installed as a library and a set of include files. The main include file to use in your program is:
#include <libnet.h>
To get the correct search paths to both the header and library files,
use the standard pkg-config
tool:
$ pkg-config --libs --static --cflags libnet
-I/usr/local/include -L/usr/local/lib -lnet
The prefix path /usr/local/
shown here is only the default. Use the
configure
script to select a different prefix when installing libnet.
For GNU autotools based projects, use the following in configure.ac
:
# Check for required libraries
PKG_CHECK_MODULES([libnet], [libnet >= 1.2])
and in your Makefile.am
:
proggy_CFLAGS = $(libnet_CFLAGS)
proggy_LDADD = $(libnet_LIBS)
Libnet is widely used, but had been unmaintained for a long time and its author unreachable. This version was forked from the 1.1.3 release candidate from packetfactory.net, bug fixed, developed, and re-released.
Use GitHub issues and pull request feature for questions and patches:
http://github.com/libnet/libnet
Some old docs are available at:
http://packetfactory.openwall.net/projects/libnet/index.html
- v1.1 (c) 1998 - 2004 Mike D. Schiffman [email protected]
http://www.packetfactory.net/libnet - v1.1.3 and later (c) 2009 - 2013 Sam Roberts [email protected]
http://github.com/libnet/libnet