ネットワークアプリケーションが思った通りに動かない場合、中身を確かめる事が重要です。すべてが問題なく動いているように見える場合でも、ネットワーク診断を実行すればすべてがあるべき姿で動いている事を確かめる手助けになります。この目的で復数の診断ツールが存在します; 各ツールは異なるレベルを診断します。
最初に (net-tools パッケージに含まれる) netstat
コマンドを紹介します; これはマシンのその瞬間のネットワーク活動に関する要約を表示します。何も引数を渡さずに実行した場合、このコマンドは開けられた接続をリストします;このリストはとても長くなる場合があります。なぜなら、このリストには多くの Unix ドメインソケット (デーモンによって広く使われている) が含まれるからです。Unix ドメインソケットはネットワークに関与しません (例えば、dbus
通信、X11
トラフィック、仮想ファイルシステムとデスクトップ間の通信などです)。
netstat
を実行する際には一般的に標準の挙動を変更するオプションを使います。最も頻繁に使われるオプションを以下に挙げます:
-t
、TCP 接続のみを表示します;
-u
、UDP 接続のみを表示します; これらのオプションは同時に使えます、Unix ドメインソケットの表示を抑制するにはどちらか一方を使うだけで十分です;
-a
、リッスンしている (入って来る接続を待っている) ソケットも表示します;
-n
、結果を数値的に表示します: IP アドレス (DNS で名前解決しない)、ポート番号 (/etc/services
の定義する別名を使わない)、ユーザ id (ログイン名無し) を使います;
-p
、関係付けられたプロセスを表示します; netstat
を root 権限で実行した場合にのみ、このオプションは便利です。なぜなら、普通のユーザは自分のプロセス以外を見る事ができないからです;
-c
、継続的に接続リストを更新します。
netstat(8) マニュアルページに書かれている他のオプションを使えば、表示される結果をさらに細かく制御する事が可能です。具体的にいえば、上に挙げたオプションの内最初の 5 種類を組み合わせて使う事が多いため、結果としてシステムとネットワークの管理者は事実上 netstat -tupan
を習得します。負荷の高くないマシンでは、以下の様な典型的な結果を返します:
#
netstat -tupan
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2224/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 994/exim4
tcp 0 0 192.168.1.241:22 192.168.1.128:47372 ESTABLISHED 2944/sshd: roland [
tcp 0 0 192.168.1.241:22 192.168.1.128:32970 ESTABLISHED 2232/sshd: roland [
tcp6 0 0 :::22 :::* LISTEN 2224/sshd
tcp6 0 0 ::1:25 :::* LISTEN 994/exim4
udp 0 0 0.0.0.0:68 0.0.0.0:* 633/dhclient
udp 0 0 192.168.1.241:123 0.0.0.0:* 764/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 764/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 764/ntpd
udp6 0 0 fe80::a00:27ff:fe6c:123 :::* 764/ntpd
udp6 0 0 2002:52e0:87e4:0:a0:123 :::* 764/ntpd
udp6 0 0 ::1:123 :::* 764/ntpd
udp6 0 0 :::123 :::* 764/ntpd
予想通り、確立された接続、この場合 2 つの SSH 接続と、入って来る接続を待つアプリケーション (LISTEN
と記載)、特に 25 番をリッスンしている Exim4 電子メールサーバが表示されます。
nmap
(よく似た名前のパッケージに含まれます) は、ある意味で、リモートに対する netstat
に相当します。これは 1 台または数台のリモートサーバに対して「well-known」ポート群をスキャンし、入ってきた接続に応答したアプリケーションの見つかったポートをリストします。更に、nmap
は一部のアプリケーションを識別する事が可能です。場合によってはアプリケーションのバージョン番号さえも識別する事が可能です。nmap
に対する問題点として、nmap
はリモートから実行されるため、プロセスやユーザの情報を提供する事ができないという点が挙げられます; しかしながら、nmap
は復数のターゲットに一気に実行できます。
nmap
を実行する際の典型例は、-A
オプション (nmap
は見つかったサーバソフトウェアのバージョンを識別しようとします) だけを使い、その後ろにスキャンする 1 つか復数の IP アドレスまたは DNS 名を渡す事です。繰り返しになりますが、さらに多くのオプションが存在し、nmap
の挙動をさらに細かく制御する事が可能です。nmap(1) マニュアルページを参照してください。
#
nmap mirwiz
nmap 192.168.1.30
Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-13 11:00 CET
Nmap scan report for mirwiz (192.168.1.30)
Host is up (0.000015s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
10000/tcp open snet-sensor-mgmt
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
#
nmap -A localhost
Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-13 10:54 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000084s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.0p1 Debian 4 (protocol 2.0)
| ssh-hostkey: 1024 ea:47:e5:04:a0:b8:70:29:c2:94:3d:fe:a8:b8:b4:02 (DSA)
|_2048 81:5c:a4:56:ff:c0:bf:0d:cd:e6:cc:48:2f:15:78:ea (RSA)
25/tcp open smtp Exim smtpd 4.80
| smtp-commands: mirwiz.internal.placard.fr.eu.org Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, HELP,
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP
111/tcp open rpcbind
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100024 1 40114/tcp status
|_ 100024 1 55628/udp status
10000/tcp open http MiniServ 1.660 (Webmin httpd)
| ndmp-version:
|_ ERROR: Failed to get host information from server
|_http-methods: No Allow or Public header in OPTIONS response (status code 200)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=6.00%E=4%D=11/13%OT=22%CT=1%CU=40107%PV=N%DS=0%DC=L%G=Y%TM=52834C
OS:9E%P=x86_64-unknown-linux-gnu)SEQ(SP=102%GCD=1%ISR=105%TI=Z%CI=Z%II=I%TS
OS:=8)OPS(O1=M400CST11NW5%O2=M400CST11NW5%O3=M400CNNT11NW5%O4=M400CST11NW5%
OS:O5=M400CST11NW5%O6=M400CST11)WIN(W1=8000%W2=8000%W3=8000%W4=8000%W5=8000
OS:%W6=8000)ECN(R=Y%DF=Y%T=41%W=8018%O=M400CNNSNW5%CC=Y%Q=)T1(R=Y%DF=Y%T=41
OS:%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=41%W=0%S=A%A=Z%F=R%O=
OS:%RD=0%Q=)T5(R=Y%DF=Y%T=41%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=41%
OS:W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=41%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=
OS:)U1(R=Y%DF=N%T=41%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%
OS:DFI=N%T=41%CD=S)
Network Distance: 0 hops
Service Info: Host: mirwiz.internal.placard.fr.eu.org; OS: Linux; CPE: cpe:/o:linux:kernel
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 48.20 seconds
予想通り、SSH と Exim4 アプリケーションが表示されます。すべてのアプリケーションがすべての IP アドレスをリッスンしているわけではない点に注意してください; Exim4 は lo
ループバックインターフェースからのみアクセス可能ですから、localhost
の解析にのみ表示され、mirwiz
(これは同じマシンの eth0
インターフェースに対応付けられています) をスキャンした時には表示されません。
10.8.3. スニファ: tcpdump
と wireshark
しばしば実際にワイヤを行き来する情報をパケット毎に見る必要がある場合があります。この際に使われるツールは「フレームアナライザ」と呼ばれ、スニファ としても広く知られています。これらのツールはあるネットワークに到達したすべてのパケットを観察し、ユーザにわかりやすい方法でパケットを表示します。
この分野における由緒あるツールが tcpdump
で、これは広範囲のプラットフォームで利用可能な標準的なツールです。tcpdump
を使うと、多くの種類のネットワークトラフィックをキャプチャできますが、トラフィックの表現は比較的分かりにくいです。このため tcpdump
について詳しく説明しません。
より最近の (そしてより現代的な) ツールである wireshark
(wireshark パッケージの提供する) は、キャプチャされたパケットの解析を単純化する多くのデコーディングモジュールのお陰で、ゆっくりとネットワークトラフィック解析分野における新しい標準的なツールになりつつあります。パケットはプロトコルの層に基いてグラフィカルに表示されます。wireshark
を使うと、ユーザはあるパケットに関わるすべてのプロトコルを可視化する事が可能です。例えば、HTTP リクエストを含むパケットに対して、wireshark
は物理層、イーサネット層、IP パケット情報、TCP 接続パラメータ、最後に HTTP リクエスト自身に関連する情報を別々に表示します。
上の例では、SSH を通じて移動するパケットを (!tcp.port == 22
フィルタを使って) 除去しています。現在詳細を表示されているパケットは HTTP 層で作られたものです。