Libnet é uma API para auxiliar na construção e injeção de pacotes de rede. Ele fornece uma estrutura portátil para escrita e manipulação de pacotes de rede de baixo nível (use libnet em conjunto com libpcap e você poderá escrever algumas coisas muito legais). Libnet inclui a criação de pacotes na camada IP e na camada de enlace, bem como uma série de funcionalidades suplementares e complementares.
Libnet é muito útil para escrever ferramentas de rede e código de teste de rede. Alguns projetos, disponíveis em Debian/Ubuntu e OpenBSD, usando libnet são:
NOTA: Infelizmente, o código legado escrito para libnet-1.0.x é incompatível com libnet-1.1.xe posterior.
Consulte o Guia de migração para obter ajuda sobre portabilidade.
Libnet é instalado como uma biblioteca e um conjunto de arquivos incluídos. O principal arquivo de inclusão a ser usado em seu programa é:
#include <libnet.h>
Para obter os caminhos de pesquisa corretos para os arquivos de cabeçalho e de biblioteca, use a ferramenta pkg-config
padrão (o antigo libnet-config
está obsoleto):
$ pkg-config --libs --static --cflags libnet
-I/usr/local/include -L/usr/local/lib -lnet
O caminho do prefixo /usr/local/
mostrado aqui é apenas o padrão. Use o script configure
para selecionar um prefixo diferente ao instalar o libnet.
Para projetos baseados em autotools GNU, use o seguinte em configure.ac
:
# Check for required libraries
PKG_CHECK_MODULES([libnet], [libnet >= 1.2])
e no seu Makefile.am
:
proggy_CFLAGS = $(libnet_CFLAGS)
proggy_LDADD = $(libnet_LIBS)
Documentos online disponíveis em https://codedocs.xyz/libnet/libnet/. Consulte a página de manual e o código de teste de amostra para obter mais informações.
Primeiro baixe a versão mais recente do GitHub. Libnet emprega o sistema de configuração e construção GNU. Os tarballs e arquivos zip de lançamento são fornecidos com um script configure
pré-construído:
$ tar xf libnet-x.y.z.tar.gz
$ cd libnet-x.y.z/
$ ./configure && make
$ sudo make install
Para listar as opções disponíveis, digite ./configure --help
Ao compilar a partir do GIT, use ./autogen.sh para gerar o script configure
. Para isso você precisa do conjunto completo de autotools GNU: autoconf (>=2.69), automake (>=1.14), libtool (>=2.4.2).
A forma de instalar as dependências varia de acordo com o sistema, mas em muitos sistemas derivados do Debian, apt
pode ser usado:
$ sudo apt install autoconf automake libtool
$ ./autogen.sh
$ ./configure && make
$ sudo make install
Libnet está disponível no Conan Center. Para usar, adicione libnet/1.2
ao seu conanfile.txt
Primeiro construa o desenvolvedor. contratante:
$ cd .devcontainer
$ docker build -t libnet-builder .
Em seguida, compile a libnet com o docker:
$ cd ..
$ docker run -it --rm -v $(pwd):$(pwd) --workdir=$(pwd) libnet-builder
$ ./autogen.sh # If you've cloned from GitHub
$ ./configure
$ make
Executando testes no dev. recipiente (acima):
$ ./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
============================================================================
Nota: no Linux, os testes são executados em um namespace de rede separado (usando
unshare
), portanto, nenhum acesso root (sudo) é necessário, mas em outros sistemas você pode precisar ser root ou corrigir recursos ou permissões.
Para construir a documentação (opcional) você precisa do doxygen e pod2man:
$ sudo apt install doxygen
$ sudo apt install pod2man || sudo apt install perl
Para obter gráficos elegantes na documentação HTML, instale também o graphviz. Há também uma versão em PDF dos documentos, para construir você precisa de mais alguns pacotes:
$ sudo apt install texlive-extra-utils texlive-latex-extra
texlive-fonts-recommended latex-xcolor
texlive-font-utils
Para documentos do Microsoft CHM, você precisa do HTML Help Workshop, que faz parte do Visual Studio: http://go.microsoft.com/fwlink/p/?linkid=154968, em sistemas UNIX e GNU/Linux, consulte chmcmd
, que é disponível no pacote FreePascal:
$ sudo apt install fp-utils-3.0.4
Libnet é amplamente utilizado, mas não é mantido há muito tempo e seu autor é inacessível. Esta versão foi bifurcada do release candidate 1.1.3 do packetfactory.net, bug corrigido, desenvolvido e relançado.
Use problemas do GitHub e recurso de solicitação pull para perguntas e patches:
http://github.com/libnet/libnet
Alguns documentos antigos estão disponíveis em:
http://packetfactory.openwall.net/projects/libnet/index.html