netsniff-ng toolkit に含まれるトラフィック(パケット)ジェネレータ
socket mmap とか駆使して高速に動作するのと独自の簡易構文で任意のパケットパターンを組み立てられてるのが特徴
Kernelに同梱されてる pktgen も高速に動作するが、L3レベル(IPv4,IPv6)でペイロード内容はランダムにしか生成できないから性能評価には使えても、プロトコルスタックのテストには使えない。その点 trafgen なら任意のパケットパターンを組み立てられる
インストール方法
よくある手順でインストールできる
Ubuntu 12.04 LTS で実験。
apt にも登録されているけど、コマンドが少なかったりしたのでソースからコンパイルする方がよさそう
git clone git://github.com/borkmann/netsniff-ng.git
# 依存パッケージのインストール (INSTALLに書いてあるコマンドそのまま)
sudo apt-get install ccache flex bison libnl-3-dev \
libnl-genl-3-dev libgeoip-dev libnetfilter-conntrack-dev \
libncurses5-dev liburcu-dev libnacl-dev libpcap-dev \
zlib1g-dev libcli-dev libnet1-dev
configure
make
make install
使ってみる
ヘルプ通りに実行してみる
-e
オプションでパケットパターンのサンプルが出力されるのでそれをパイプしてloインターフェイスに出力している
% trafgen -e | sudo trafgen -i - -o lo --cpp -n 1
1 packets to schedule
73 bytes in total
Running! Hang up with ^C!
1 packets outgoing
73 bytes outgoing
0 sec, 9435 usec on CPU0 (1 packets)
trafgen
に限らず netsniff-ng toolkit でNICを使うコマンドはPF_PACKET
を使うのでroot
で実行する必要があることに注意
おまけ nacl のビルド
% ./configure
[*] Checking pkg-config ... [YES]
[*] Checking ccache ... [YES]
[*] Checking flex ... [YES]
[*] Checking bison ... [YES]
[*] Checking nacl ... [NO]
[*] Checking libnl ... [YES]
[*] Checking tpacket_v2 ... [YES]
[*] Checking tpacket_v3 ... [YES]
[*] Checking libnetfilter-conntrack ... [YES]
[*] Checking ncurses ... [YES]
[*] Checking libGeoIP ... [YES]
[*] Checking libz ... [YES]
[*] Checking liburcu ... [YES]
[*] Checking libpcap ... [YES]
[*] Checking hw timestamping ... [YES]
[*] Checking libcli ... [YES]
[*] Checking libnet ... [YES]
[*] Generating config.h ...
[!] The NaCl crypto library is currently not present on your system or
could not be found. Either install it from your distro or build it
manually using 'make nacl' and make sure that the NACL_INC_DIR and
NACL_LIB_DIR environment variables are set appropriately.
[!] The following tools will *not* be built: curvetun
[*] The following tools will be built: netsniff-ng trafgen astraceroute flowtop ifpps bpfc mausezahn
[!] There were errors in the configure script. Please check the file
config.log for details.
実験環境ではこんな感じでnacl
がないと怒られた。
このままでもcurvetun
がビルドできないだけでtrafgen
を使うには支障がないが使うならメッセージに書いてある対処方法通りに実行する。(親切!)
% make nacl
--2014-01-05 18:21:17-- http://hyperelliptic.org/nacl/nacl-20110221.tar.bz2
Resolving hyperelliptic.org (hyperelliptic.org)... 131.155.71.33
Connecting to hyperelliptic.org (hyperelliptic.org)|131.155.71.33|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 163415 (160K) [application/x-bzip2]
Saving to: `/tmp/nacl-20110221.tar.bz2'
100%[============================================================================================================================================>] 163,415 24.4K/s in 6.8s
2014-01-05 18:21:25 (23.4 KB/s) - `/tmp/nacl-20110221.tar.bz2' saved [163415/163415]
Building NaCl for arch x86 on host ubuntu1204 (grab a coffee, this takes a while) ...
NaCl lib path /home/devel/nacl/nacl-20110221/build/ubuntu1204/lib/x86
NaCl include path /home/devel/nacl/nacl-20110221/build/ubuntu1204/include/x86
Done!
/bin/sh: 1: source: not found
make: *** [nacl] Error 127
そうすると自動でソースをダウンロードしてきてビルドしてくれる。
ビルドが成功すると~/.bashrc
にNACL_INC_DIR
とNACL_LIB_DIR
を勝手に追加されるので再度configure
から実行すると認識される
上のログではmake nacl
の最後では自動で~/.bashrc
をsource
してくれるんだけど構文エラーで失敗している。その場合は手動で設定するか読み込み直すばOK。