snoop は、Solaris 2.x ソフトウェア環境で提供されているコマンドです。無制限にパケットを確保するには、snoop コマンドをスーパーユーザーで実行する必要があります。制限付きのパケットを確保したり、確保したファイルからのパケットを分析する場合は、スーパーユーザーである必要はありません。
無制限のパケット確保では、フィルターが無効になり、使用しているシステム宛のものかどうかに関係なく、サブネットのあらゆるパケットを監視することができます。使用しているシステム宛てではないパケットを、間接的に監視することもできます。無制限モードは、スーパーユーザーでだけ使用することができます。
snoop コマンドを実行すると、サンのシステムはネットワーク監視装置となり、ネットワーク上の問題を検出することが可能になります。snoop コマンドは、特定の数のネットワークパケットを確保するため、クライアントからサーバーへの呼び出しを追跡して、パケットの内容を表示することができます。パケットの内容をファイルに保存し、後で調査することもできます。
snoop コマンドは以下を行います。
パケットを記録・表示します。
ネットワークの NIS などの RPC 応答時間の調査に使用可能な、正確なタイムスタンプを提供します。
パケットとプロトコルの情報を見やすく表示します。
snoop コマンドのパケット表示形式には、1 行で表示する要約形式と拡張形式の 2 つがあります。要約形式では、最上位のプロトコルに関するデータだけが表示されます。たとえば、NFS パケットであれば NFS 情報だけが表示され、その下の RPC (遠隔手続き呼び出し) や UDP (ユーザーデータプロトコル) 、IP (インターネットプロトコル) 、ネットワークフレーム情報は表示されません。こうした情報を表示する場合は、コマンドに詳細 (-v または -V) オプションを指定します。
snoop コマンドは、データリンクプロバイダインタフェース (DLPI) のパケットフィルタとバッファーモジュールの両方を使用し、ネットワークを介してやりとりされるパケットを効率良く捕捉します。
任意の 2 台のシステム間の、全トラフィックを表示または捕捉するには、その 2 台以外のシステムで snoop を実行してください。
snoop はパケット解析ツールなので、サブネットを構築する場合に特に有用となります。snoop コマンドを実行して得られる出力を使用し、負荷統計情報を蓄積するスクリプトを実行することができます。また、このコマンドには、パケットヘッダーを取り出す機能があり、この情報を利用してパケットをデバッグしたり、非互換の問題の原因を突き止めたりすることができます。
ここでは、snoop の使用例を紹介します。
統計情報には、読み取り要求を出しているクライアントが示されます。左側の列に 約 4 マイクロ秒の精度で秒数が表示されます。
読み取りまたは書き込み要求を発行したときに、サーバーが時間切れにならないようにしてください。サーバーが時間切れになると、クライアントは要求を再送信する必要があり、クライアントの IP コードによって、書き込みブロックがより小さな UDP ブロックに分解されます。デフォルトの書き込み時間は 0.07 秒です。時間切れの値は、mount コマンドで変更することができます。
# snoop -i pkts -p99,108 99 0.0027 boutique -> sunroof NFS C GETATTR FH=8E6C 100 0.0046 sunroof -> boutique NFS R GETATTR OK 101 0.0080 boutique -> sunroof NFS C RENAME FH=8E6C MTra00192 to .nfs08 102 0.0102 marmot -> viper NFS C LOOKUP FH=561E screen.r.13.i386 103 0.0072 viper -> marmot NFS R LOOKUP No such file or directory 104 0.0085 bugbomb -> sunroof RLOGIN C PORT=1023 h 105 0.0005 kandinsky -> sparky RSTAT C Get Statistics 106 0.0004 beeblebrox -> sunroof NFS C GETATTR FH=0307 107 0.0021 sparky -> kandinsky RSTAT R 108 0.0073 office -> jeremiah NFS C READ FH=2584 at 40960 for 8192
snoop コマンドの引数の意味は、以下のとおりです。
表 A-3 snoop コマンドの引数
-i pkts |
pkts ファイルに確保されているパケット情報を表示します。 |
-p99,108 |
確保したファイルから読み出すパケット範囲の指定です。パケット番号 99 から 108 のパケットの情報が表示されます。確保したファイルの先頭パケットのパケット番号は 1 です。 |
snoop -i pkts -v 101 コマンドは、パケット 101 に関する詳細情報を表示します。引数の意味は、以下のとおりです。
表 A-4 snoop -i pkts -v 101 コマンドの引数
-i pkts |
pkts ファイルに確保されているパケット情報を表示します。 |
-v |
詳細モードの指定です。パケット 101 のヘッダの詳細情報を表示します。このオプションは、特定のパケットに関する情報が必要なときに使用してください。 |
# snoop -i pkts rpc nfs and sunroof and boutique 1 0.0000 boutique -> sunroof NFS C GETATTR FH=8E6C 2 0.0046 sunroof -> boutique NFS R GETATTR OK 3 0.0080 boutique -> sunroof NFS C RENAME FH=8E6C MTra00192 to .nfs08
この例では、sunroof システムと boutique システム間の NFS パケットを表示しています。このコマンドの引数の意味は、以下のとおりです。
表 A-5 snoop -i pkts rpc nfs and sunroof and boutique コマンドの引数
-i pkts |
pkts ファイルに確保されているパケット情報を表示します。 |
rpc nfs |
RPC 呼び出しのパケットまたは NFS プロトコルの応答パケットを表示します。nfs の後に、/etc/rpc の RPC プロトコル名かプログラム番号オプションが続きます。 |
and |
2 つのブール値の論理和をとります。たとえば sunroof boutique は、sunroof and boutique と同じです。 |
上記の snoop コマンドの引数の意味は、以下のとおりです。
表 A-6 snoop -i pkts -o pkts.nfs rpc nfs sunroof boutique コマンドの引数
-i pkts |
pkts ファイルに確保されているパケット情報を表示します。 |
-o pkts.nfs | pkts.nfs ファイルに表示中のパケット情報を保存します。 |
rpc nfs |
RPC 呼び出しのパケットまたは NFS プロトコルの応答パケットを表示します。nfs の後に、/etc/rpc の RPC プロトコル名かプログラム番号オプションが続きます。 |
snoop コマンドの使用法およびオプションについての詳細は、snoop のマニュアルページを参照してください。