snoop を使用すると、ネットワークパケットを取得して内容を表示できます。取得したパケットについては、そのまま表示することも、ファイルに保存することも可能です。snoop が中間ファイルに書き込む場合、トレースのビジー状態でパケットロスはほとんど発生しません。その後、snoop 自体はファイルの解釈に使用されます。詳細は、snoop(1M) のマニュアルページを参照してください。
snoop コマンドは必ず root(#) になって実行してください。プロミスキュアス (promiscuous) モードでデフォルトのインタフェースとやりとりするパケットを取得できます。最上位のプロトコルに関連するデータのみが一覧形式で表示されます。たとえば NFS パケットでは、NFS 情報のみが表示されます。RPC、UDP、IP、および Ethernet のフレーム情報は抑止されますが、verbose (詳細表示) オプションのいずれかを選択してあれば表示できます。
snoop が取得するファイルの形式は、RFC 1761 で説明しています。これを参照するには、Web ブラウザで http://ds.internic.net/rfc/rfc1761.txt にアクセスしてください。
snoop server client rpc rstatd は、クライアント/サーバー間のすべての RPC トラフィックを収集し、rstatd に対するフィルタをかけます。
作業 |
説明 |
参照先 |
---|---|---|
システムからすべてのパケットをチェックする |
netstat コマンドと snoop コマンドを使用し、その結果を解析する | |
snoop の結果をファイルに取り込む |
snoop コマンドの -o オプションを使用する | |
サーバーとクライアントの間のパケットをチェックする |
snoop コマンドの結果をファイルに保存し、その結果を解析する |
スーパーユーザーになります。
コマンド行で次のコマンドを入力し、システムに接続されているインタフェースを見つけます。
# netstat -i |
通常、snoop では最初の非ループバックデバイス (le0) が使用されます。
snoop と入力します。
Ctrl-C キーを押してプロセスを停止します。
# snoop Using device /dev/le (promiscuous mode) maupiti -> atlantic-82 NFS C GETATTR FH=0343 atlantic-82 -> maupiti NFS R GETATTR OK maupiti -> atlantic-82 NFS C GETATTR FH=D360 atlantic-82 -> maupiti NFS R GETATTR OK maupiti -> atlantic-82 NFS C GETATTR FH=1A18 atlantic-82 -> maupiti NFS R GETATTR OK maupiti -> (broadcast) ARP C Who is 120.146.82.36, npmpk17a-82 ? |
結果を解釈します。
上記の例では、クライアント maupiti からサーバー atlantic-82 への転送には NFS ファイルハンドル 0343 が使用され、atlantic-82 は OK と応答しています。who is 120.146.82.36? と問い合わせる ARP 要求が maupiti から伝送されるまで、会話は継続します。
この例は、snoop の形式を説明しています。次の手順では、snoop にフィルタをかけてファイルにパケットを取り込みます。
取り込んだファイルを解釈するには、RFC 1761 に記述された説明を使用します。これを参照するには、Web ブラウザで http://ds.internic.net/rfc/rfc1761.txt にアクセスします。
スーパーユーザーになります。
コマンド行で次のコマンドを入力します。
# snoop -o filename |
例:
# snoop -o /tmp/cap Using device /dev/le (promiscuous mode) 30 snoop: 30 packets captured |
これによって、ファイル /tmp/cap に 30 個のパケットが取り込まれました。ディスク容量が十分にあれば、ファイルはどこにでも格納できます。取り込んだパケットの数はコマンド行に表示され、Ctrl-C を押せばいつでも終了できます。
snoop 自体によってホストマシン上にネットワーク負荷がかかるので、結果に誤差が生じる場合があります。正確な状態を確認するには、第 3 のシステム (クライアントまたはサーバーに接続されているハブのいずれかを外したシステム) から snoop を実行してください (次の節を参照)。
コマンド行で次のコマンドを入力し、ファイルを検査します。
# snoop -i filename |
例:
# snoop -i /tmp/cap 1 0.00000 frmpk17b-082 -> 224.0.0.2 IP D=224.0.0.2 S=129.146.82.1 LEN=32, ID=0 2 0.56104 scout -> (broadcast) ARP C Who is 129.146.82.63, grail ? 3 0.16742 atlantic-82 -> (broadcast) ARP C Who is 129.146.82.76, honeybea ? 4 0.77247 scout -> (broadcast) ARP C Who is 129.146.82.63, grail ? 5 0.80532 frmpk17b-082 -> (broadcast) ARP C Who is 129.146.82.92, holmes ? 6 0.13462 scout -> (broadcast) ARP C Who is 129.146.82.63, grail ? 7 0.94003 scout -> (broadcast) ARP C Who is 129.146.82.63, grail ? 8 0.93992 scout -> (broadcast) ARP C Who is 129.146.82.63, grail ? 9 0.60887 towel -> (broadcast) ARP C Who is 129.146.82.35, udmpk17b-82 ? 10 0.86691 nimpk17a-82 -> 129.146.82.255 RIP R (1 destinations) |
ARP、IP、RIP その他の詳細な分析と推奨されるパラメータについては、特定のプロトコルのマニュアルを参照してください。RFC の確認には、Web を検索することをお奨めします。
snoop を実行するシステムから、クライアントまたはサーバーに接続されたハブのいずれかを外します。
この第 3 のシステム (snoop システム) はすべてのトラフィックを監視するので、snoop のトレースには実際のネットワーク上の状態が反映されます。
スーパーユーザーになります。
コマンド行で snoop にオプションを指定して実行し、結果をファイルに保存します。
結果の検査と解釈を行います。
snoop 取り込みファイルの詳細については、RFC 1761 を参照してください。これを参照するには、Web ブラウザで http://ds.internic.net/rfc/rfc1761.txt にアクセスします。
頻繁かつ定期的に snoop を使用して、システムが正常に動作している場合の状態を把握してください。最近の白書や RFC を参照したり、NFS や YP といった特定分野の専門家からアドバイスを受けたりするのも、パケットの分析に役立ちます。snoop とそのオプションの使用法については、snoop(1M) のマニュアルページを参照してください。