Skip to content

トラフィック・ジェネレーター「D-ITG」を使う

フリーのトラフィック・ジェネレータは幾つかありますが、Linux でも Windows でも、どちらのプラットフォームでも使えるものに D-ITG があります。D-ITG はコマンドラインのツールですが、Java で書かれた GUI のラッパーも公開されています。

Windows へのインストール

D-ITG のサイトで公開されているバイナルをダウンロードしてきます。Beta Version として 2.7.0 beta2、Stable Version として 2.6.1d が公開されていましたが、GUI の Wrapper は 2.6 系のものしか無いようなので、今回は Stable Version(D-ITG-2.6.1d-WINbinaryIPv4.zip)をダウンロードしました。ダウンロードしたアーカイブは適当なフォルダに展開しておきます。今回は "C:\Program Files\D-ITG-2.6.1d-WINbinaryIPv4" へ展開しました。更に、頻繁に使うのであれば PATH 環境変数へ、このフォルダを追加しておいた方が便利です。

Linux へのインストール

D-ITG のソースコードをダウンロードし、make します。しかし、CentOS 5.5 x86_64 環境で試したところ、エラーが出ました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ wget http://www.grid.unina.it/software/ITG/codice/D-ITG-2.6.1d.zip
$ unzip D-ITG-2.6.1d.zip
$ cd D-ITG-2.6.1d/src
$ make
        ・
        ・
        ・
make[1]: ディレクトリ `/home/eco/D-ITG-2.6.1d/src/libITG' に入ります
g++  -DLINUX_OS -Wall -Wno-deprecated -fPIC  -shared -o libITG.so ITGapi.cpp ../common/thread.o -lpthread 
/usr/bin/ld: ../common/thread.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../common/thread.o: could not read symbols: Bad value
collect2: ld はステータス 1 で終了しました
make[1]: *** [libITG.so] エラー 1
make[1]: ディレクトリ `/home/eco/D-ITG-2.6.1d/src/libITG' から出ます
make: *** [libITG] エラー 2

"D-ITG-2.6.1d/src/Makefile" を Beta Version の Makefile と差し替えると無事、コンパイル出来ました。Windows と同様、頻繁に D-ITG を使うのであれば D-ITG そのものを /opt などの適当なディレクトリにコピーした上で、(例えば)"/opt/D-ITG-2.6.1d/bin" を環境変数 PATH に追加しておきます。

余談ですが、CentOS 5.5 x86_64 環境であれば、Beta Version は特に問題無く、コンパイル出来ました。

実行してみる

D-ITG は「受信」「送信」「解析」など、役割によって、以下のようにプログラムが分かれています。

  1. 受信 ・・・ ITGRecv
  2. 送信 ・・・ ITGSend
  3. 解析 ・・・ ITGDec

端末間でトラフィックを生成したい場合、まず受信側で ITGRecv を起動しておきます。

1
2
>  ITGRecv
Press Ctrl-C to terminate

次は送信側から ITGSend でトラフィックを生成・送信します。指定しているオプションの意味は下記の通りです。

  • -a
    • 送信先アドレス
  • -sp
    • 送信元ポート
  • -rp
    • 宛先ポート
  • -C
    • 1 秒あたりに生成するパケット数
  • -c
    • パケットのサイズ(byte)
  • -x
    • ログファイル名
1
2
3
> ITGSend -a 192.168.132.134 -sp 9400 -rp 9500 -C 100 -c 500 -x Result.txt
Started sending packets of flow ID: 1
Finished sending packets of flow ID: 1

すると、受信側(ITGRecv)がトラフィックを受信しはじめ、しばらくしたら終了します。

1
2
3
4
5
> ITGRecv
Press Ctrl-C to terminate
*** New Socket IPv4 created for signaling ***
Listening on port : 9500
Finish on port : 9500

ITGRecv を実行したディレクトリに指定したログ(今回は "Result.txt")が生成されていますので、これを ITGDec で解析します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
>  ITGDec Result.txt
/----------------------------------------------------------
Flow number: 1
From 192.168.132.134:9400
To    192.168.132.134:9500
----------------------------------------------------------
Total time               =      9.990000 s
Total packets            =          1000
Minimum delay            =     -0.002000 s
Maximum delay            =     -0.001000 s
Average delay            =     -0.001190 s
Average jitter           =      0.000080 s
Delay standard deviation =      0.000392 s
Bytes received           =        500000
Average bitrate          =    400.400400 Kbit/s
Average packet rate      =    100.100100 pkt/s
Packets dropped          =             0 (0.00 %)
----------------------------------------------------------

__________________________________________________________
****************  TOTAL RESULTS   ******************
__________________________________________________________
Number of flows          =             1
Total time               =      9.990000 s
Total packets            =          1000
Minimum delay            =     -0.002000 s
Maximum delay            =      0.000000 s
Average delay            =     -0.001190 s
Average jitter           =      0.000080 s
Delay standard deviation =      0.000392 s
Bytes received           =        500000
Average bitrate          =    400.400400 Kbit/s
Average packet rate      =    100.100100 pkt/s
Packets dropped          =             0 (0.00 %)
Error lines              =             0
----------------------------------------------------------

複数フローのトラフィックを生成する

より高い負荷をかけたい場合には、複数のトラフィックフローを生成することが出来ます。まずはじめに、生成したいトラフィックフローのパラメータを「1 フロー・1 行」にしたテキストファイルを用意しておきます。今回は "Script" という名前で以下のファイルを用意しておきました。

1
2
3
4
5
-a 192.168.132.134 -sp 9501 -rp 9601 -C 3000 -c 10000 -T UDP
-a 192.168.132.134 -sp 9502 -rp 9602 -C 3000 -c 10000 -T UDP
-a 192.168.132.134 -sp 9503 -rp 9603 -C 3000 -c 10000 -T UDP
-a 192.168.132.134 -sp 9504 -rp 9604 -C 3000 -c 10000 -T UDP
-a 192.168.132.134 -sp 9505 -rp 9605 -C 3000 -c 10000 -T UDP

次はシングルフローの時と同様、受信側で ITGRecv を起動しておきます。

1
2
> ITGRecv
Press Ctrl-C to terminate

今度は送信側で先ほど用意したファイルをしてして、ITGSend を実行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
> ITGSend Script -x MultiFlow-Result.txt
Started sending packets of flow ID: 1
Started sending packets of flow ID: 2
Started sending packets of flow ID: 3
Started sending packets of flow ID: 4
Started sending packets of flow ID: 5
Finished sending packets of flow ID: 1
Finished sending packets of flow ID: 2
Finished sending packets of flow ID: 5
Finished sending packets of flow ID: 3
Finished sending packets of flow ID: 4

受信側では以下のように、5 つのフローを受信したことが表示されています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
> ITGRecv
Press Ctrl-C to terminate
*** New Socket IPv4 created for signaling ***
Listening on port : 9601
Listening on port : 9602
Listening on port : 9603
Listening on port : 9604
Listening on port : 9605
Finish on port : 9601
Finish on port : 9602
Finish on port : 9605
Finish on port : 9603
Finish on port : 9604

最後に、受信側で ITGDec を使い、ログを解析します。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
> ITGDec MultiFlow-Result.txt
|----------------------------------------------------------
Flow number: 1
From 192.168.132.134:9501
To    192.168.132.134:9601
----------------------------------------------------------
Total time               =     10.000000 s
Total packets            =         12007
Minimum delay            =     -0.002000 s
Maximum delay            =      0.031000 s
Average delay            =     -0.000119 s
Average jitter           =      0.000292 s
Delay standard deviation =      0.000604 s
Bytes received           =     120070000
Average bitrate          =  96056.000000 Kbit/s
Average packet rate      =   1200.700000 pkt/s
Packets dropped          =           131 (1.08 %)
----------------------------------------------------------
----------------------------------------------------------
Flow number: 2
From 192.168.132.134:9502
To    192.168.132.134:9602
----------------------------------------------------------
Total time               =      8.515000 s
Total packets            =          9850
Minimum delay            =     -0.002000 s
Maximum delay            =      0.071000 s
Average delay            =     -0.000776 s
Average jitter           =      0.000423 s
Delay standard deviation =      0.001020 s
Bytes received           =      98500000
Average bitrate          =  92542.571932 Kbit/s
Average packet rate      =   1156.782149 pkt/s
Packets dropped          =            69 (0.70 %)
----------------------------------------------------------
----------------------------------------------------------
Flow number: 4
From 192.168.132.134:9504
To    192.168.132.134:9604
----------------------------------------------------------
Total time               =      7.868000 s
Total packets            =          8600
Minimum delay            =      0.000000 s
Maximum delay            =      0.002000 s
Average delay            =      0.000064 s
Average jitter           =      0.000080 s
Delay standard deviation =      0.000268 s
Bytes received           =      86000000
Average bitrate          =  87442.806304 Kbit/s
Average packet rate      =   1093.035079 pkt/s
Packets dropped          =            13 (0.15 %)
----------------------------------------------------------
----------------------------------------------------------
Flow number: 5
From 192.168.132.134:9505
To    192.168.132.134:9605
----------------------------------------------------------
Total time               =      7.277000 s
Total packets            =          8050
Minimum delay            =      0.000000 s
Maximum delay            =      0.492000 s
Average delay            =      0.000212 s
Average jitter           =      0.000141 s
Delay standard deviation =      0.007759 s
Bytes received           =      80500000
Average bitrate          =  88498.007421 Kbit/s
Average packet rate      =   1106.225093 pkt/s
Packets dropped          =           660 (7.58 %)
----------------------------------------------------------
----------------------------------------------------------
Flow number: 3
From 192.168.132.134:9503
To    192.168.132.134:9603
----------------------------------------------------------
Total time               =      8.224000 s
Total packets            =          8050
Minimum delay            =     -0.002000 s
Maximum delay            =      0.386000 s
Average delay            =     -0.000625 s
Average jitter           =      0.000443 s
Delay standard deviation =      0.006716 s
Bytes received           =      80500000
Average bitrate          =  78307.392996 Kbit/s
Average packet rate      =    978.842412 pkt/s
Packets dropped          =           765 (8.68 %)
----------------------------------------------------------

__________________________________________________________
****************  TOTAL RESULTS   ******************
__________________________________________________________
Number of flows          =             5
Total time               =     10.000000 s
Total packets            =         46557
Minimum delay            =     -0.002000 s
Maximum delay            =      0.492000 s
Average delay            =     -0.000255 s
Average jitter           =      0.000295 s
Delay standard deviation =      0.004322 s
Bytes received           =     465570000
Average bitrate          = 372456.000000 Kbit/s
Average packet rate      =   4655.700000 pkt/s
Packets dropped          =          1638 (3.40 %)
Error lines              =             0
----------------------------------------------------------

GUI のフロントエンド(ラッパー)を使う

D-ITG には Java で書かれたフロントエンド「Graphical User Interface for D-ITG 2.6」が用意されています。ダウンロードしたアーカイブ内のファイルは、D-ITG(の、ITGRecv や ITGSend)と同じディレクトリに展開し、同ディレクトリで以下のように実行します。

1
javaw -jar itggui.jar

これで GUI のフロントエンドが立ち上がります。

file

GUI だけに、直感的に利用できて便利です。ただ、シングルフローのトラフィック生成は問題なく使えているのですが、マルチフロー(複数のトラフィックフロー)が上手く生成出来ませんでした。具体的には、マルチフローの設定自体は出来るものの、最初のフローしか実行されません(5 フロー設定しても、最初の 1 フロー目しかトラフィックが生成されていないようです。Windows Server 2008 R2 64bit 環境でテストしました)。