TCP/IP とデータ通信

パケットの内容表示

snoop を使用すると、ネットワークパケットを取得して内容を表示できます。取得したパケットについては、そのまま表示することも、ファイルに保存することも可能です。snoop が中間ファイルに書き込む場合、トレースのビジー状態でパケットロスはほとんど発生しません。その後、snoop 自体はファイルの解釈に使用されます。詳細は、snoop(1M) のマニュアルページを参照してください。

snoop コマンドは必ず root(#) になって実行します。プロミスキュアス (promiscuous) モードでデフォルトのインタフェースとやりとりするパケットを取得できます。最高レベルのプロトコルに関連するデータのみが一覧形式で表示されます。たとえば NFS パケットでは、NFS 情報のみが表示されます。RPC、UDP、IP、および Ethernet のフレーム情報は抑止されますが、verbose (詳細表示) オプションのいずれかを選択してあれば表示できます。

snoop が取得するファイル形式は、RFC 1761 で説明しています。アクセスするには、ウェブブラウザで URL に http://ds.internic.net/rfc/rfc1761.txt を指定します。

snoop server client rpc rstatd は、クライアント/サーバ間の RPC トラフィックをすべて収集し、rstatd に対するフィルタをかけます。

システムから全パケットを確認する方法

  1. netstat -i と入力し、システムに接続されたインタフェースを検索します。

    通常、snoop では最初の非ループバックデバイス (le0) が使用されます。

  2. root になって 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 129.146.82.36, npmpk17a-82 ?
  3. 結果を解釈します。

    上の例の場合、クライアント maupiti からサーバ atlantic-82 への転送には NFS ファイルハンドル 0343 が使用され、atlantic-82 は OK と応答しています。who is 129.146.82.36? と問い合わせる ARP 要求が maupiti から伝送されるまで、会話は継続します。

    この例は、snoop の形式を説明しています。次の手順では、snoop にフィルタをかけてファイルにパケットを取り込みます。

    取り込んだファイルを解釈する際には、RFC 1761 に記述された説明を使用します。アクセスするには、ウェブブラウザで URL に http://ds.internic.net/rfc/rfc1761.txt を指定します。

snoop の結果をファイルに取り込む方法

  1. root になって 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 を実行してください (次の節を参照)。

  2. 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 の確認には、ウェブを検索することをお奨めします。

サーバ/クライアント間のパケットを確認する方法

  1. クライアントかサーバに接続されたハブを外した snoop システムを確立します。

    第 3 のシステム (snoop システム) はすべてのトラフィックを監視するので、snoop のトレースには実際の状況が反映されます。

  2. root になって snoop をオプション付きで入力し、ファイルに保存します。

  3. 結果の検査と解釈を行います。

    snoop 取り込みファイルの詳細については、RFC 1761 に記述された説明を使用します。アクセスするには、ウェブブラウザで URL に http://ds.internic.net/rfc/rfc1761.txt を指定します。

頻繁かつ定期的に snoop を使用して、システムが正常に動作する感覚をつかんでください。最近の白書や RFC を参照したり、NFS や YP といった特定分野の専門家からアドバイスを受けるのも、パケットの分析に役立ちます。snoop とそのオプションの使用法についての詳細は、snoop(1M) のマニュアルページを参照してください。