Netperf
ネットワークベンチマークソフト。特定のホスト間でTCPやUDPのベンチマークを行う場合に便利。
大学時代は大変お世話になりました。
UDPでの測定は、-mオプションを使うこと!要注意。
UDPでの計測はiperfの方がオススメです。
コマンドライン
- サーバ
- netserverを実行する
$ netserver
- クライアント
$ netperf -H
- 使用例
- TCPでの測定
送信側(クライアント)は以下のコマンドを実行します。
$ netperf -H 192.168.1.32
-
- UDPでの測定
送信側(クライアント)は以下のコマンドを実行します。
$ netperf -H 192.168.1.32 -t UDP_STREAM -- -m 1024
※注意: デフォルトでは9216バイトのUDPパケットが送出されてしまうので、 "-m"オプションで各ネットワークのMTUを指定して下さい。;
デフォルトの使用ポート12865番ですが、変えたい場合のオプションは"-p"となります。
結果の見方
- TCPでの結果
TCP STREAM TEST to 172.29.34.138 Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 87380 16384 16384 10.00 94.13 (1) (2) (3) (4) (5)
(1)受信ソケットサイズ(byte)
(2)送信ソケットサイズ(byte)
(3)送信メッセージ(byte)
(4)計測時間
(5)実効帯域
- UDPでの結果
UDP UNIDIRECTIONAL SEND TEST to 172.29.34.138 Socket Message Elapsed Messages Size Size Time Okay Errors Throughput bytes bytes secs # # 10^6bits/sec 65535 1024 10.00 114702 0 93.97 ...(a) 65535 10.00 114702 93.97 ...(b)
(a)送信した帯域
(b)受信できた帯域(実効帯域)
とりあえずUDPでの帯域は(b)を見ればよい
tcpdumpの使い方
パケットをキャプチャする時の定番コマンドtcpdump
使い方によっては結構凝った使い方もできます。
デフォルトではヘッダまでしか出しませんが-sオプションを使うことでパケット全部をダンプできたりもします。
基本的なものを以下に記しておきます。
type
対象にするパケットの種類を指定する。タイプで指定できるのは
-host(ホスト)
- net(ネットワーク)
- port(ポート)の3種類
例:host hogehoge、port 80など
dir
通信の方向を特定する。方向として指定できるのは
- src(ソースアドレス)
- dst(ディスティネーションアドレス)
- src or dst
- src and src~
の4種類。dir修飾子がない場合は、「src or dst」が指定されたものと見なされる
proto
の15種類。proto修飾子がない場合は、(type修飾子と矛盾しない範囲で)すべてのプロトコルが指定されたものと見なされる
上記の修飾子で構成された条件を演算子「and」「or」「not」でつなぐことで、複雑な条件を指定することが可能である.
使用例
- 基本編
tcpのパケットを監視する場合
udpのパケットを監視する場合
IPv6のパケットを監視する場合
# tcpdump ip6
ICMPv6のパケットを監視する場合
# tcpdump icmp6
RTPのパケットを監視する場合
# tcpdump -T rtp
RTCPのパケットを監視する場合
# tcpdump -T rtcp
80番のポートを監視する場合
#tcpdump port 80
SSH以外のポートを監視する場合
送信アドレスが192.168.0.1のものを監視する場合
# tcpdump src host 192.168.0.1
- 応用編
IPアドレス192.168.0.100に関する80/TCPのパケットを監視する場合
宛先が192.168.0.100に関する80/TCPのパケットを監視する場合
LAN(192.168.1.0/24)内のtcpによるやりとりを監視する場合
LAN(192.168.1.0/24)の外から中に入っているパケットを監視する場合
tcpdump \(src net not 192.168.1.0/24\) and \(dst net 192.168.1.0/24\)
- オプション
-F file | 条件式を file から読み込む。条件をあらかじめファイルに記述しておけば、毎回条件を記述する手間を減らせる |
-n | アドレスを名前に変換しない。これは IP アドレスだけでなく、ポート番号なども数字のまま出力する。 |
-i interface | 複数のインターフェースを使用している際はこれで指定する事が出来る。 |
-r file | これは前もって -w オプションなどで作成したファイルからパケットを読み込む。Snort もこの -r オプションで読み込み可能なファイルを作成することができる。 |
-w file | ネットワークに流れるパケットをそのままファイルに保存する。このログを読むためには-r オプションを使用する |
-x | パケットの中身を 16 進数で表示する。 |
-X | パケットの中身を ASCII で表示する。16 進数も同時に表示する。暗号化されていない通信ならば、このオプションでほぼ全ての内容が見れる。 |
-T | rtp (Real-Time Applications protocol),rtcp (Real-Time Applications control protocol), snmp (Simple Network Management Protocol), vat (Visual Audio Tool)、 wb (distributed White Board)を指定することができる |
-s | ダンプするデータ長を指定する。デフォルトは64byte(ethヘッダ除く)パケットを全部みたい場合は1500などにすると良い(ethernetの場合)。MTUサイズより大きくすればパケット丸ごと取れる) |
フリーで使えるRTPライブラリ
UCLのライブラリ
UCL(University College London)のC言語ライブラリです。
Mboneのツール群で使われているライブラリです。
サンプルなども付いているので比較的使いやすいです。
RFC3550,RFC3551準拠(Obsoletes:RFC1889)
http://www-mice.cs.ucl.ac.uk/multimedia/software/common/
これを利用しているアプリケーション
SRTPのライブラリ
RFC3711で提案されているSecure Real-time Transport Protocol (SRTP)ライブラリです。
BSDライセンスで公開されています。
SR-RTP Software Library/Toolkit
なんとなくよさそうだけど使ったことはありません。
http://nms.lcs.mit.edu/software/videocm/
RTP Java Library
JAVAのライブラリなので使い勝手よさそう。
http://japanese.osstrans.net/software/jlibrtp.html