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/
является значением по умолчанию. Используйте сценарий configure
, чтобы выбрать другой префикс при установке libnet.
Для проектов на основе 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. Релизные архивы и 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/1.2
в ваш conanfile.txt
Сначала создайте dev. ограничитель:
$ cd .devcontainer
$ docker build -t libnet-builder .
Затем скомпилируйте libnet с помощью docker:
$ cd ..
$ docker run -it --rm -v $(pwd):$(pwd) --workdir=$(pwd) libnet-builder
$ ./autogen.sh # If you've cloned from GitHub
$ ./configure
$ make
Запуск тестов в dev. контейнер (вверху):
$ ./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 широко используется, но долгое время не поддерживался, а его автор недоступен. Эта версия была ответвлением версии-кандидата 1.1.3 с сайта packagefactory.net, исправлена ошибка, разработана и переиздана.
Используйте проблемы GitHub и функцию запроса на включение для вопросов и исправлений:
http://github.com/libnet/libnet
Некоторые старые документы доступны по адресу:
http://packetfactory.openwall.net/projects/libnet/index.html