Libnet est une API pour aider à la construction et à l'injection de paquets réseau. Il fournit un cadre portable pour l'écriture et la gestion des paquets réseau de bas niveau (utilisez libnet conjointement avec libpcap et vous pourrez écrire des trucs vraiment sympas). Libnet inclut la création de paquets au niveau de la couche IP et de la couche liaison ainsi qu'une multitude de fonctionnalités supplémentaires et complémentaires.
Libnet est très pratique pour écrire des outils réseau et du code de test réseau. Certains projets, disponibles dans Debian/Ubuntu et OpenBSD, utilisant libnet sont :
REMARQUE : le code hérité écrit pour libnet-1.0.x est malheureusement incompatible avec libnet-1.1.x et versions ultérieures.
Consultez le Guide de migration pour obtenir de l'aide sur le portage.
Libnet est installé sous forme de bibliothèque et d'un ensemble de fichiers d'inclusion. Le principal fichier d’inclusion à utiliser dans votre programme est :
#include <libnet.h>
Pour obtenir les chemins de recherche corrects vers les fichiers d'en-tête et de bibliothèque, utilisez l'outil standard pkg-config
(l'ancien libnet-config
est obsolète) :
$ pkg-config --libs --static --cflags libnet
-I/usr/local/include -L/usr/local/lib -lnet
Le chemin du préfixe /usr/local/
affiché ici est uniquement celui par défaut. Utilisez le script configure
pour sélectionner un préfixe différent lors de l'installation de libnet.
Pour les projets basés sur les outils automatiques GNU, utilisez ce qui suit dans configure.ac
:
# Check for required libraries
PKG_CHECK_MODULES([libnet], [libnet >= 1.2])
et dans votre Makefile.am
:
proggy_CFLAGS = $(libnet_CFLAGS)
proggy_LDADD = $(libnet_LIBS)
Documents en ligne disponibles sur https://codedocs.xyz/libnet/libnet/. Consultez la page de manuel et l’exemple de code de test pour plus d’informations.
Téléchargez d’abord la dernière version depuis GitHub. Libnet utilise le système de configuration et de construction GNU. Les archives tar et les fichiers zip de la version sont livrés avec un script configure
prédéfini :
$ tar xf libnet-x.y.z.tar.gz
$ cd libnet-x.y.z/
$ ./configure && make
$ sudo make install
Pour répertorier les options disponibles, tapez ./configure --help
Lors de la construction à partir de GIT, utilisez ./autogen.sh pour générer le script configure
. Pour cela, vous avez besoin de la suite complète des outils automatiques GNU : autoconf (>=2.69), automake (>=1.14), libtool (>=2.4.2).
La manière d'installer les dépendances varie selon le système, mais sur de nombreux systèmes dérivés de Debian, apt
peut être utilisé :
$ sudo apt install autoconf automake libtool
$ ./autogen.sh
$ ./configure && make
$ sudo make install
Libnet est disponible sur Conan Center. Pour l'utiliser, ajoutez libnet/1.2
à votre conanfile.txt
Construisez d’abord le développeur. contrevenant :
$ cd .devcontainer
$ docker build -t libnet-builder .
Compilez ensuite libnet avec docker :
$ cd ..
$ docker run -it --rm -v $(pwd):$(pwd) --workdir=$(pwd) libnet-builder
$ ./autogen.sh # If you've cloned from GitHub
$ ./configure
$ make
Exécution de tests dans le développeur. conteneur (ci-dessus):
$ ./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
============================================================================
Remarque : sous Linux, les tests s'exécutent dans un espace de noms réseau distinct (en utilisant
unshare
), donc aucun accès root (sudo) n'est nécessaire, mais sur d'autres systèmes, vous devrez peut-être être root ou corriger des capacités ou des autorisations.
Pour construire la documentation (facultatif), vous avez besoin de doxygen et pod2man :
$ sudo apt install doxygen
$ sudo apt install pod2man || sudo apt install perl
Pour des graphiques soignés dans la documentation HTML, installez également graphviz. Il existe également une version PDF de la documentation, pour la construire, vous avez besoin de quelques packages supplémentaires :
$ sudo apt install texlive-extra-utils texlive-latex-extra
texlive-fonts-recommended latex-xcolor
texlive-font-utils
Pour les documents Microsoft CHM, vous avez besoin du HTML Help Workshop, qui fait partie de Visual Studio : http://go.microsoft.com/fwlink/p/?linkid=154968, sur les systèmes UNIX et GNU/Linux, voir chmcmd
, qui est disponible dans la suite FreePascal :
$ sudo apt install fp-utils-3.0.4
Libnet est largement utilisé, mais n'était plus maintenu depuis longtemps et son auteur était inaccessible. Cette version a été dérivée de la version candidate 1.1.3 de packetfactory.net, bug corrigé, développé et réédité.
Utilisez les problèmes GitHub et la fonctionnalité de demande d'extraction pour les questions et les correctifs :
http://github.com/libnet/libnet
Certains anciens documents sont disponibles sur :
http://packetfactory.openwall.net/projects/libnet/index.html