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/
デフォルトにすぎません。 libnet のインストール時に、 configure
スクリプトを使用して別のプレフィックスを選択します。
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 構成およびビルド システムを採用しています。リリースの tarball と 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 autotools (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 はコナン センターで利用できます。使用するには、 conanfile.txt
にlibnet/1.2
を追加します。
まず開発版をビルドします。コンテナ:
$ cd .devcontainer
$ docker build -t libnet-builder .
次に、docker を使用して libnet をコンパイルします。
$ cd ..
$ docker run -it --rm -v $(pwd):$(pwd) --workdir=$(pwd) libnet-builder
$ ./autogen.sh # If you've cloned from GitHub
$ ./configure
$ make
開発環境でテストを実行しています。コンテナ(上):
$ ./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 ドキュメントについては、Visual Studio の一部である HTML ヘルプ ワークショップが必要です: http://go.microsoft.com/fwlink/p/?linkid=154968。UNIX および GNU/Linux システムでは、 chmcmd
参照してください。 FreePascal スイートで利用可能:
$ sudo apt install fp-utils-3.0.4
Libnet は広く使用されていますが、長い間メンテナンスされておらず、作成者に連絡できませんでした。このバージョンは、packetfactory.net の 1.1.3 リリース候補からフォークされ、バグが修正され、開発され、再リリースされました。
質問やパッチについては、GitHub の問題とプル リクエスト機能を使用します。
http://github.com/libnet/libnet
一部の古いドキュメントは次の場所から入手できます。
http://packetfactory.openwall.net/projects/libnet/index.html