Welcome to SapporoWorks! We create stimulating network programs.
By a demand from user, SapporoWorks evolves.
トップページ| ソフトウエア| シェアウエア登録| セキュリティ情報| 開発情報| ドキュメント|
ドキュメント > ネットワークスニッファVIGILで学ぶ TCP/IP+Ethernet ネットワーク管理講座 > 第1回


--- 出典(ネットワークマガジン)5月号より ---
ネットワークスニファVIGILで学ぶ TCP/IP + Ethernet ネットワーク管理講座

ネットワークスニファ「VIGIL」をご存知だろうか。本誌連載の「オンラインソフトで学ぶネットワーク入門」でも、たびたび取り上げられているソフトだ。
本連載は、「VIGIL」の開発者である古谷誠進氏自身が、「VIGIL」を使ったネットワーク管理の手法を紹介する。
一歩進んだネットワーク管理のノウハウ、TCP/IPやEthernetの詳細を説明してもらおう。


文○古谷誠進 (furuya@sapporoworks.ne.jp)


短期集中連載 第1回

今回の講義内容
1.ネットワークスニファとは何か?
2.利用プロトコルを点検しよう
3.実行中のサービスの確認


ネットワークスニッファとは?

 ネットワークスニッファとは、ネットワーク上に流れているパケットを取得して解析するためのプログラムのことです。「プロトコルアナライザ」とか「パケットモニタ」と呼ばれることもあります。

 通常、ネットワークを流れるデータを見る必要はありません。ネットワークスニッファは、ネットワークの障害の原因の特定、通信状態の確認、機器の性能試験、プログラムのデバッグなど、専門化が目的を持って使うのが普通です。まずはどのようにパケットをキャプチャしているかをEthernetの仕組みとあわせて説明しましょう。

 オリジナルのEthernet以来、Ethernetでは長らくCSMA/CDという方式が使われてきました。しかし、現在のEthernetネットワークはスイッチングハブを使うのが普通で、すでにCSMA/CDは現役ではありません。スイッチングハブを使うと、自分のパソコンに届くパケットは、自分宛てが他のパソコンが送出したブロードキャストパケットだけになります。しかし、スイッチングハブを使わないネットワークや、スイッチングハブの学習機能がMACアドレスのあふれなどで効いていないネットワークでは、すべてのネットワーク機器の送受信データが、他のパソコンに届けられます。

 いずれにしても、ネットワークカードは、自分のパソコンに関係のある(自分宛てかブロードキャスト)パケット以外を破棄します。しかし、ネットワークカードの受信モードを「プロミスキャスモード」に変更すると、ネットワークカードに届いたすべてのパケットを取得できるのです。つまり、ネットワークスニッファは、こプロミスキャスモードを使って、ネットワークカードに届いたすべてのパケットをモニタしているわけです。

 したがって、スイッチングハブを使っていないネットワークなら、ネットワークスニッファを使って、職場の同僚がやり取りしている電子メールのメッセージや、パスワードを傍受できてしまいます。また、スイッチングハブを使っていても、ネットワークの状態によっては他人のプライバシーに関する通信内容を盗聴できる場合があります。

 そのため、ネットワークスニッファの利用は、下記のような制限を守ることが大前提です。

1 ネットワークに接続されているすべての端末を管理する権限があること。
2 興味本位でネットワーク上を流れるデータをのぞいてはいけない。
3 すべてのユーザにネットワークスニッファを使っていることを知らせる。
4 権限のない人がネットワークスニッファを簡単に使えないようにしておく。



VIGILとは

 私が作ったネットワークスニッファ「VIGIL」は、ネットワークに流れているデータをできるだけ人間が理解しやすいように表示することを目的としたプログラムです。

 「人間が理解しやすい」とはどういうことでしょうか?WWWや電子メールでは、人間が認識できるような文字や画像を使っています。しかし、WWWや電子メールで使われるHTTPやSMTPというプロトコルは、必ずしもすべて人間が理解できる形式とは言えません。また、HTTPやSMTPの通信は、IPパケットに分割されてネットワークを流れています。さらにIPパケットはEthernetのフレームとして運ばれます。人間がネットワークを流れるパケットや信号を見ても理解できないのは当たり前なのです。

 しかし、データはあくまでプロトコル通りにやり取りされているはずです。ていねいに組み立てなおせば、当然、経路の途中でも元の画像や文字に戻せるはずです。

 など、VIGILのプログラムは、http://homepage2.nifty.com/spw/からダウンロードできます。

パケットの再構築

 パケットをどのようにして元のデータに再構築するのか、TCP/IP上の有力プロトコルであるSMTPを例に説明してみましょう。

 SMTPは、電子メールの送信からサーバ間の中継、宛先メールボックスへの配信に使われています。SMTPでやり取りされる電子メールのデータを取得するには、まずネットワークを流れるデータをパケット単位で取得することから始めます。

 あるメールサーバに関連するパケットだけを取り出すためには、IPヘッダにあるIPアドレスを見ます。SMTPのように、大きなデータを複数のパケットに分割するときはTCPを使います。TCPヘッダには、ポート番号という、サービスの種類(ここではSMTP)を指定する番号があります。すでにIPアドレスでメールサーバのパケットだけに絞り込んでいますが、同じサーバマシンで電子メール以外のサービスが実行されていないとは限りません。アプリケーションはIPアドレスとTCPポート番号(SMTPは25)を組み合わせることで、確実にメールサーバの電子メールの送信パケットだけを取り出せるわけです。

 TCPの通信では、連番(シーケンス番号)と確認応答番号(ACK番号)を使うことで、パケットを元の順番どおりに再構成したり、抜けがないことを保証しています。TCP/IPの通信の過程では、IPアドレスとTCPポート番号で取り出したパケットは、順番どおりに並んでいないかもしれないし、抜けがあるかもしれません。そこでTCPは、集めたパケットのTCPヘッダ部分にある連番と確認応答番号などを参照して、順番どおりに並べ替えるのです。

 ここまでは、TCPの役割です。ソケット(アプリケーション層のプロトコルとTCP/IPを仲介するOSの通信機能)は、並べたパケットのヘッダ部を取り除いて、残ったデータをつなぎ合わせることで、ネットワークを流れるデータから、通信内容を再構築します。なお、ここまでの作業は、実際に通信しているサーバ、クライアント間でも同様です。しかし、ネットワークスニッファは、通信内容を傍受している立場ですから、通信内容が化けていたり、パケットが抜けていることを検出しても、それを本来の送り主や宛先には知らせません。

 以上の処理で、メールクライアントとメールサーバがやり取りしているデータの内容を取得できます。しかし、ここまでの作業で読めるのは単なる英数字だけです。日本語や画像を人間の目に見えるように復元するためには、さらに別の処理が必要です。また、電子メールの本文では、MIMEでエンコードされているのが普通です。

利用しているプロトコルを点検しよう

 それでは、VIGILを使ったネットワークの管理テクニックを紹介します。まずは、「利用プロトコルの点検」です。

 ネットワークのプロトコルは階層構造になっています。階層構造になっていることのメリットは、通信する機器やソフトが、それぞれの階層で同じプロトコルに対応していれば全体として通信が成立する点です。

 Windows では、現在主流のTCP/IP以外に、NetBEUIやIPX/SPX互換プロトコルにも対応しています。「ネットワークコンピュータ」の「プロパティ」から「プロトコルの追加」を選ぶと、各種のプロトコルを選択してインストールすることができるようになっています。

 Windows は、複数のプロトコルがインストールされていても上手に使い分けてくれます。通信する相手方が対応しているプロトコルを臨機応変に選択して使用するようになっていますので、通常はユーザが使用するプロトコルを意識することはありません。

 しかし、障害発生時の故障探求の場合などでは、、この構造が分析をやりにくくしてしまうことがあります。たとえば「Aさんのパソコンの共有フォルダはBさんもCくんも操作できるのに、Bさんのパソコンの共有フォルダは、Aさんは操作できても、Cくんは操作できない」という症状があったとしましょう。

 このような症状は、Aさんのパソコンには、TCP/IPとNetBEUIがインストールされているがBさんのパソコンにはNetNEUIだけ、CくんのパソコンにはTCP/IPだけがインストールされているときに起きます。

 このような症状は原因をつかみにくく、管理者を混乱させてしまいます。この例の場合どうしたらいいのでしょうか?通常、Windowsのファイルやプリンタの共有に使われるNetBIOSはNetBEUI上で動作しています。しかし、Windowsでは、TCP/IPプロトコルをインストールすると、NBT(NetBIOS over TCP/IP)が自動的に利用可能になるため、NetBEUIを入れる必要はなくなります。一方、TCP/IPはインターネットを利用する上で必須うす。つまり、TCP/IPがあればファイルやプリンタの共有に支障はないわけです。

 TCP/IP以外でよく使われるのはIPX/SPXです。IPX/SPXは、ノベルのNetware用のプロトコルです。一部のソフトウェア(ネット対戦型ゲームなど)で、IPX/SPXで通信しているものもあります。ですが、今では、Netwareを使っていない限り、IPX/SPXは必要ありません。

 Windows Me/XPのような最新のOSでは、TCP/IPだけがインストールされていますが、オフィスでは意外と古いパソコンが現役だったりします。まだ異動などに伴って、あなたのネットワーク管理方針しは異なる設定のパソコンがネットワークに加わっているかもしれません。そのため、ネットワークでどのようなプロトコルが動作しているか把握しておくといいでしょう。


やってみよう!−利用プロトコルの点検


 さっそく、VIGILを使って、ネットワーク内にTCP/IP`以外のプロトコルがどの程度使われているか確認してみましょう。

 VIGILのメインメニューから「ツール」−「キャプチャ開始」で「アダプタ選択ダイアログ」が表示し、検査対象のネットワークに接続しているネットワークカードを選択して「OK」ボタンを押すと、パケットキャプチャが始まります。ネットワークに流れているパケットが1パケット1行で、ログウインドウに次々と表示されるはずです。

 各パケットを出力している端末のアドレスなどの情報は、キャプチャ中、一覧ウインドウに表示されます。一覧ウインドウの端末のアイコンを選ぶと、アドレスやサービスの種類、出力パケットの種類など、端末固有の情報がデータウインドウに表示されます。この時、データウインドウには、「Default」「Info(Frame)」「Info(Type)」「Info(Protocol)」「Info(byte/h)」のタブが選択できるようになっており、最初の「Default」タブの「STATISTICAL INFORMATION」が当該端末の出力したパケットの量を種類ごとに集計した数値です。また、「Info」の各タブは、その数値のグラフです。

 パケットの種類として、IP・IPX・NetBIOS・ARPなどと表示されるはずです。これは、「Info(Type)」 のタブで、データの割合がグラフ化されています。グラフは、各パケットの種類ごとに色分けされ、その割合に応じて円グラフにされており、下段にそのパケットの総バイト数が数値として表示されています。VIGIL では、このグラフを見るだけで、その端末がネットワーク層で、どんなプロトコルを使用しているかを一目瞭然で把握できます。TCP/IPのみで通信している端末では、IP・ARP・RARPのみが使用されている(左の画面)はずですが、NetNEUIがインストールされている端末では、NetBIOS が、また、IPX/SPX 互換プロトコルがインストールされている端末では、IPX も表示されます(右の画面)。ログウインドウに流れる行を見るだけでも、パケットの種類は一応分かりますが、端末ごとに分別され、さらにグラフ化されたものを見ることでも、もっと簡単に把握できるはずです。


Ethernetフレームの種類の見分け方




 VIGILはどのような方法でIP、IPX、NetBEUI、ARPの種類を判別しているのでしょうか?一般的に、プロトコルの種類はその下位層のヘッダ部分を確認することで判別できます。IP、IPX、NetBEUI、ARPの下位層ではEthernetが使われています。

 ただし、一口にEthernetといっても、実は歴史的背景などから複数のタイプがあります。とはいえ、現在のEthernetで使用されているフレームフォーマットは2つに大別できます。

 一つは当初のバージョンである「EthernetU」(DEC、インテル、ゼロックスが作成した標準でDIXイーサネットとも呼ばれる)のフレームフォーマットです。

 もう一つは、IEEE802.3 がその後に標準化した広い意味での「802.3 Row」です。「802.3 Row」 のフレームフォーマットは、上位(ネットワーク層)のプロトコル識別する部分が欠落しているため、その後IEEE802.2のLSAPの概念をとりいれ、LLCヘッダを追加した「802.3 with LLC」が作られました。また、LLC では、識別しきれないプロトコルに対応するため、さらにSNAPヘッダを追加した「802.3 with SNAP」もあります。

 VIGIL では、取得したパケットが、どの形式のフレームであるかを解析してプロトコルを判別しています。

 手順としては、まず「EthernetU」のフレームフォーマットに照らし合わせて確認します。「EthernetU」のフレームは、「宛先MACアドレス」「送信元MACアドレス」「上位プロトコルのタイプ」「データ」「CRC」という形になっています。この「上位プロトコルのタイプ」の部分を見ることで、ネットワーク層のプロトコルが判明するのです。

 「EthernetU」以外の各802.3 のフレームは、この「上位プロトコルのタイプ」の部分が上位データの「長さ」に置き換わっており、「宛先MACアドレス」「送信元MACアドレス」「データの長さ」「データ」「CRC」という形式になっています。一方、EthernetUの「上位プロトコルのタイプ」は、IP(0x0800)・ARP(0x0806)・RARP(0x8035)・NetBIOS(0x0840)・IPX(0x8137) というようになっています。

 同じ場所に入っている「上位プロトコルのタイプ」と「データの長さ」を、正しく見分けられるのは、タイプの値がどれもEthernetのデータの最大の長さである1500(05DCh)よりも大きいからです。

 こうして、「EthernetU」のフレームと判断できれば、「上位プロトコルのタイプ」を調べることで、そのEthernetフレームが運んでいるデータがなんなのかが分かるわけです。

 一方、各種802.3 のフレームと判断されたものは、そのデータ部分の先頭にLLC のヘッダを当てはめて確認します。LLCヘッダは「DSAP(宛先の上位プロトコル)」「SSAP(送信先の上位プロトコル)」「制御」の3バイトの形をしています。

 また、「DSAP」及び「SSAP」は、IP(06h)・IPX(E0h)・NetBIOS(F0h)などが定義されています。「802.3 with LLC」だと仮定して、DSAPとSSAPに06h、E0h、F0hなどがあれば、この仮定が正しいと判断されるのです。また同時にネットワーク層のタイプも取得できます。

 「DSAP」「SSAP」は、最上位ビットが予約されているので、7ビット(128種類)のプロトコルしか表せきませ。そこで、「802.3 with SNAP」を使っている場合は、その「しるし」として「DSAP」「SSAP」に「AAh」を使います。

 SNAPヘッダは、「DSAP」「SSAP」「制御」「組織ID」「タイプ」という形式ですが、この「タイプ」の部分は、「EthernetU」のフレームで使用されていた、「上位プロトコルのタイプ」とまったく同じものが入ります。「802.3 with SNAP」 のフレームは、「タイプ」の部分を見ることでネットワーク層のタイプを取得できるわけです。

 最後に、LLCヘッダの確認で「DSAP」「SSAP」 に有効な数値が見つけられなかった場合は、「802.3 Row」 フレームだということになります。この場合、上位プロトコルの種類は分かりません。「802.3 Row」は、NetWareだけで使われているので、たぶん「IPX」あろう、と推測するわけです。




実行中のサービスの確認

 社内のネットワークには、インターネット接続用のプロキシサーバから、Webサーバやメールサーバまで、たくさんのサーバが働いています。しかし、その運用状況を正確に把握している管理者がどれだけいるでしょうか。本当に動作がおかしくなるまで何も手をつけない管理者は案外多いものです。
 
 それに、管理者のあずかり知らないところで社員が勝手にWebサーバを立ち上げていることもあるでしょう。あるいは、「トロイの木馬」のような悪意のあるプログラムが動作し、不正にリモート制御されているかも知れません。

 ネットワーク管理者は、ネットワークのトラフィックをよく把握し、不正利用の兆候を見逃さないようにしたいものです。


やってみよう!−実行中のサービスの確認


 VIGILを使って、ネットワーク内でどのようなサービスが使われているか確認してみましょう。

 VIGIL の一覧ウインド(左上)に表示される「端末」のアイコンには、サーバと一般クライアントの2種類があります。サーバとして表示されるのは、NTP、DHCP、FTP、TELNETなど、Well-knownポートを使うサービスです。これらのサービスのポート番号に対して外部から接続を受けたものをサーバと判断します。さらに、HTTP、POP3、SMTPでは、その送受信の内容を解析します。また、その通信内容からHTTP、POP3、SMTPのサーバプログラムのバージョン情報などを検出した場合、表示ウインド(右上)の「Default」−「SERVICE」のところに表示します。

 ネットワーク内のサーバが、VIGILで対応していないサービスを実行している場合は、メインメニューから「ツール」−「オプション」−「データ」−「データの保存場所」の設定で、「サーバ側」のチェックボックスをオンにしてパケットをキャプチャすると、接続が確立したすべてのTCP通信を、「TCP」 のアイコンの下にツリー表示します。この機能を使えば、トロイの木馬など、不正なプログラムも検出できるはずです。

 なお、HTTPなどの接続内容は、解析されてURLごとにツリー表示されます。そのため、Webサーバで、どのようなコンテンツが利用されているかなどの把握は、比較的簡単にできます。




CSMA/CD(Carrier Sense Multiple Accecc with Collision Detection)

Ethernetのネットワーク上に接続された各端末が送信するとき、ネットワーク上に他の端末のデータが流れていないことを確認して、早いもの順に、回線を使う方式。
たまたま同じタイミングで他の端末もデータを送信すると、信号衝突(コリジョン)が発生し、そのデータは無効になってしまう。コリジョンを検出した端末はランダムな間隔をおいて再送信する。

MACアドレス(Media Acceess Control Address)

Ethernetなどで、個々のネットワーク機器を識別するためのアドレス。

プロミスキャスモード(promiscuousmode)

ネットワークカードは、通常、届いたパケットのMACアドレスを確認し、自分宛てかブロードキャストでない場合はそのパケットを破棄する。他の端末宛てのデータを、上位層(IPなど)に渡すことはない。
しかし、プロミスキャスモード(promiscuous:相手を選ばない)では、すべてのパケットを上位層に渡す。ほとんどのネットワークカードはプロミスキャスモードに対応しており、プログラムから設定することで通常モードから切り替えられる。

ARP(Address Resolution Rrotocol)

IPアドレスに対応するMACアドレスを調べるためのプロトコル。仕組みは簡単で、自分のMACアドレスとIPアドレス、MACを調べたいIPアドレスを「ARP問い合わせ」パケットに入れてブロードキャストする。ネットワーク機器は、ARP問合せのブロードキャストを受けると、自分のIPアドレスかどうかを確認し、自分への問い合わせであれば「ARP応答」パケットに自分のMACアドレスを入れて応答する。

RARP(Reverse Address Resolution Protocol)

ARPプロトコルの逆で、自分自身のMACアドレスに対応するIPアドレスを問い合わせるためのプロトコル。自分のMACアドレスをブロードキャストすると、ネットワーク上のRARPサーバがIPアドレスを応答する。

LSAP

Link Service Access Point

LLC(Logical Link Control)

ネットワークカードとネットワーク機器(データリンク層)は、信号の制御(MAC Media Access Control)と論理的な制御(LLC)のサブレイヤ(副層)に分ける考え方が一般的だ。LLCは、送信元と宛先のSAP(Service Access Point≒上位プロトコルの種類)を指定するなどして、データリンク層プロトコルによって届けられたデータを、どの上位プロトコル(IPyaIPXなど)に渡すべきかを決める。

SNAP

SubNetwork Access Protocol

CRC

Cyclic Redundancy Check(巡回冗長検査)

DSAP

Distnation Service Access Point(宛先サービスアクセスポイント)

SSAP

Source Service Access Point(送信元サービスアクセスポイント)






ドキュメント > ネットワークスニッファVIGILで学ぶ TCP/IP+Ethernet ネットワーク管理講座 > 第1回

copyright(c) 1995- SapporoWorks
当サイトはリンクフリーです。リンク時に連絡などは必要有りません。また、どのページにリンクして頂いても構いません。