Libnet ist eine API, die bei der Erstellung und Injektion von Netzwerkpaketen hilft. Es bietet ein portables Framework für das Schreiben und Bearbeiten von Netzwerkpaketen auf niedriger Ebene (verwenden Sie libnet in Verbindung mit libpcap und Sie können einige wirklich coole Sachen schreiben). Libnet umfasst die Paketerstellung auf der IP-Ebene und auf der Verbindungsebene sowie eine Vielzahl zusätzlicher und komplementärer Funktionen.
Libnet ist sehr praktisch, um Netzwerktools und Netzwerktestcode zu schreiben. Einige Projekte, die in Debian/Ubuntu und OpenBSD verfügbar sind und libnet verwenden, sind:
HINWEIS: Für libnet-1.0.x geschriebener Legacy-Code ist leider nicht mit libnet-1.1.x und höher kompatibel .
Hilfe zur Portierung finden Sie im Migrationsleitfaden.
Libnet wird als Bibliothek und eine Reihe von Include-Dateien installiert. Die wichtigste Include-Datei, die Sie in Ihrem Programm verwenden können, ist:
#include <libnet.h>
Um die richtigen Suchpfade sowohl zu den Header- als auch zu den Bibliotheksdateien zu erhalten, verwenden Sie das Standardtool pkg-config
(die alte libnet-config
ist veraltet):
$ pkg-config --libs --static --cflags libnet
-I/usr/local/include -L/usr/local/lib -lnet
Der hier angezeigte Präfixpfad /usr/local/
ist nur der Standard. Verwenden Sie das configure
, um bei der Installation von libnet ein anderes Präfix auszuwählen.
Verwenden Sie für GNU-Autotools-basierte Projekte Folgendes in configure.ac
:
# Check for required libraries
PKG_CHECK_MODULES([libnet], [libnet >= 1.2])
und in deinem Makefile.am
:
proggy_CFLAGS = $(libnet_CFLAGS)
proggy_LDADD = $(libnet_LIBS)
Online-Dokumente verfügbar unter https://codedocs.xyz/libnet/libnet/. Weitere Informationen finden Sie auf der Manpage und im Beispieltestcode.
Laden Sie zunächst die neueste Version von GitHub herunter. Libnet verwendet das GNU-Konfigurations- und Build-System. Die Release-Tarballs und ZIP-Dateien werden mit einem vorgefertigten configure
geliefert:
$ tar xf libnet-x.y.z.tar.gz
$ cd libnet-x.y.z/
$ ./configure && make
$ sudo make install
Um die verfügbaren Optionen aufzulisten, geben Sie ./configure --help ein
Wenn Sie aus GIT erstellen, verwenden Sie ./autogen.sh, um das configure
zu generieren. Dazu benötigen Sie die vollständige Suite der GNU-Autotools: autoconf (>=2.69), automake (>=1.14), libtool (>=2.4.2).
Die Installation der Abhängigkeiten variiert je nach System, aber auf vielen von Debian abgeleiteten Systemen kann apt
verwendet werden:
$ sudo apt install autoconf automake libtool
$ ./autogen.sh
$ ./configure && make
$ sudo make install
Libnet ist im Conan Center verfügbar. Fügen Sie zur Verwendung libnet/1.2
zu Ihrer conanfile.txt
hinzu
Erstellen Sie zuerst den Entwickler. Behälter:
$ cd .devcontainer
$ docker build -t libnet-builder .
Dann kompilieren Sie libnet mit Docker:
$ cd ..
$ docker run -it --rm -v $(pwd):$(pwd) --workdir=$(pwd) libnet-builder
$ ./autogen.sh # If you've cloned from GitHub
$ ./configure
$ make
Ausführen von Tests im Entwickler. Behälter (oben):
$ ./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
============================================================================
Hinweis: Unter Linux werden die Tests in einem separaten Netzwerk-Namespace ausgeführt (mithilfe von
unshare
), sodass kein Root-Zugriff (sudo) erforderlich ist. Auf anderen Systemen müssen Sie jedoch möglicherweise Root sein oder Funktionen oder Berechtigungen korrigieren.
Zum Erstellen der Dokumentation (optional) benötigen Sie doxygen und pod2man:
$ sudo apt install doxygen
$ sudo apt install pod2man || sudo apt install perl
Für übersichtliche Grafiken in der HTML-Dokumentation installieren Sie auch graphviz. Es gibt auch eine PDF-Version der Dokumente, zum Erstellen benötigt man noch einige weitere Pakete:
$ sudo apt install texlive-extra-utils texlive-latex-extra
texlive-fonts-recommended latex-xcolor
texlive-font-utils
Für Microsoft CHM-Dokumente benötigen Sie den HTML Help Workshop, der Teil von Visual Studio ist: http://go.microsoft.com/fwlink/p/?linkid=154968, auf UNIX- und GNU/Linux-Systemen siehe chmcmd
verfügbar in der FreePascal-Suite:
$ sudo apt install fp-utils-3.0.4
Libnet ist weit verbreitet, wurde jedoch lange Zeit nicht gepflegt und sein Autor war nicht erreichbar. Diese Version wurde vom Release Candidate 1.1.3 von packetfactory.net abgeleitet, Fehler behoben, weiterentwickelt und erneut veröffentlicht.
Verwenden Sie GitHub-Probleme und die Pull-Request-Funktion für Fragen und Patches:
http://github.com/libnet/libnet
Einige alte Dokumente sind verfügbar unter:
http://packetfactory.openwall.net/projects/libnet/index.html