教育用TCP/IPパケットアナライザの試作
(平成6年11月25日 原稿受付)
電気工学科重松保弘 電気工学科二村和宏 電気工学科岩根雅彦
Development of A TCP/IP Packet Analyzer for Educational Use
by Yasuhiro SHIGEMATSU Kazuhiro FUTAMURA Masahiko IWANE
ABSTRACT
Asimple TCP/IP packet analyzer for educational use was developed. The analyzer works on personal computers under the environment of the single−task operating system:MS−DOS. This
system is constructed with two parts, that is, the network driver and the protocol analyzeC The network driver controls an Ethernet LAN board, which receives packets and stores them in a ring.
buffer. The protocol analyzer takes packets from the ring−buffer, and analyzes them in accor4.
ance with TCP/IP protocols. The ring−buffer is used as a shared resource between the network driver and the protocol analyzer. Accordingly, mutual exclusion procedure for the resource is neces5ary. In this paper, we show TCP/IP protocols, the construction of the Ethernet LAN
board, briefly, and show the network driver and the protocol analyzer in detail.
. 、 標準」(de facto standard)として大型計算機からパソ
1.まえがき
コンに至るまで広く利用されている[4]。
コンピュータネットワークの教育・研究において,重 こうした背景から,コンピュータネットワークの教育 要なテーマの一つは通信プロトコル(Communication にTCP/IPを欠かすことはできない。ところで,
Protocol)である。たとえば, UNIXネットワークでは TCP/IPについて学ぶには,そのプロトコルの解説書に 現在,通信プロトコルとしてアメリカ国防総省高等研究 よって規約を調べる方法と,実際にネットワーク上を流 計画局(Defense Advanced Research Project Agency: れるパケット(packet)を調べる方法がある。通常は,
通称DARPA)が開発したTCP/IP[1][2][3],ゼロッ 前者によるのが手っ取り早い。しかし,通信プロトコル クス社のXNS, ISOが定めたOSIなどが使われている。 を,通信手順を一つ一つ追跡しながら解析していくのは また,パソコンLANではNOVELL社のNetWareがサ 大変な作業である。しかも,通信プロトコルには通信エ ポートしているIPX/SPX,あるいはUNIXシステムと ラーの処理まで含まれているので,これらを考慮しなが 同じTCP/IPなど,さまざまな通信プロトコルが使わ らプロトコルを学習するのは大変な作業となる。そこで,
れている。 後者の方法と組み合わせて,ネットワーク上を流れるパ このように,ネットワーク環境では非常に多くの通信 ケットを調べながら手順を追跡していければ,より効率
プロトコルが使われているが,現在,異機種計算機環境 的にプロトコルの学習ができると考えられる。
がLAN (Local Area Network), WAN(Wide Area しかし,市販の高価なパケット解析専用器(プロトコ Network)を問わず統一的に構築できるネットワークプ ルアナラィザ)を用いるのは,教育現場では現実的では
ロトコルといえば,TCP/IPだけといっても過言ではな ない。また,価格の面だけでなく,汎用性から考えても い。TCP/IPは,ネットワーク環境における「事実上の ブラックボックスとしての市販のプロトコルアナライザ
54 重松保弘・二村和宏・岩根雅彦
の導入は問題である。そこで,筆者らは,MS−DOSが いわゆるデータグラム(Datagram)の通信形態を採用 動作している汎用のパーソナルコンピュータを利用して している。
教育用のTCP/IPパケットアナライザを開発すること IPでは, IPパケットを目的ホストまで届けるために,
にした。LANボードについては,すでに多くの安価な ルーティングとパケットの分割・再構成を行なう。
市販品が市場に出回っており,これを新たに制作するの ホストコンピュータ(以下,ホスト)がIPパケット は意味がない。そこで・コンテック社の協力を得て,同 を送るとき,その相手となるホストコンピュータ(以下,
社のLANボードを使用して教育用のパケットアナライ 相手ホスト)がホストと同一のネットワーク上にある場 ザを開発することにした・ 合と,異なるネットワーク上にある場合が考えられる。
本稿では・TCP/IPの概略・およびLANボードにつ 相手ホストがホストと同一のネットワーク上にある場合 いて解説したのち・筆者らの開発したプロトコルアナラ には,その相手ホストに対して直接,IPパケットを送 イザシステムについて述べる。 ればよい。両ホストが異なるネットワーク上にある場合
2.TCP/IP には・ネ・トワーク同士を接続しているゲートウェイコ
ンピュータ (Gateway Computer:以下,ゲートウェ
2・1概要 イ)に送ることになる。ゲートウェイは,相手ホストが TCP/IPは, TCP(Transmission Control Protoco1) どのネットワークにあるかをルーティングテーブル
とIP(Internet Protocol)を中心とする一群のプロトコ (routing table)によって調べ,必要なら他のゲート ルである。TCP/IPのプロトコル階層構造を図1に示す。 ウェイに転送する。この操作は相手ホストが接続されて また,TCP/IPプロトコル階層構造の最下層に位置する いるネットワークのゲートウェイに到達するまで繰り返 イーサネット(Ethernet)のフレーム(frame)構造を される。最後に,ゲートウェイは相手ホストにIPパ 図2に示す。 ケットを届ける。
パケット伝送において,上位プロトコル層のパケット このように,IPパケットは,いくつものネットワー は下位プロトコル層のデータとして取り扱われる。たと クを通って相手ホストまで伝送される。ここで問題とな えばTCPパケット(TCPヘッダとTCPデータから構 るのは,ネットワークが違うと,取り扱えるパケットの 成される)は,IPパケットのデータとして伝送される。 最大長が異なることがあるという点である。このため,
また,IPパケット(IPヘッダとIPデータから構成され 大きすぎるパケットは,ネットワークが扱える大きさに る)は,イーサネットフレームのデータとして取り扱わ 分割される。また,分割されたパケットは,相手ホスト れる。この様子を図3に示す。 によって再構成され,プロトコル上位層に渡される。
2.2 インターネットプロトコル IPヘッダは,図4に示すフォーマットになっている。
インターネットプロトコル(IP)の役割は, IPパ ケットを目的ホストまで届けることである。このプロト コルは,論理リンクを設定せずにデータ通信を行なう,
SMTP FTP TELNET DNS NSP
TCP UDP NVP
工P
工CMP
ARP RARP
ETHERNET ARPANET PDN その他図1:TCP/lPのプロトコル階層構造
TCPヘッダ1いTCPデータ }
図3:パケット構成の階層構造
終点アドレス 始点アドレス 多 データ チ17レー」、ク シーケンス 6byce 6byヒe 2by℃e 46〜1500byCe 4by[e
0 7 15 23 31
Verglon 工HL Type of Servlee Tocal Lengヒh Idenヒiflcaclon Flag FramgenC Of£seヒ Tlme しo Llve Pro仁OCO1 Header Checksum
Source Address DesUnacion Addres5
OpcionS Paddlng
図2:イーサネットのフレームフォーマット 図4:lPヘッダフォーマット
23 トランスミッションコントロールプロ 3.イ_サネットボ_ドの仕様
トコル
トランスミッションコントロールプロトコル(TCP) ここでは,本研究で使用したイーサネットボード(以 の役割は,コンピュータ上にあるプロセス間の通信を実 下,LANボードと呼ぶ)について説明する。
現することである。このプロトコルでは,コネクション 3.1LANボードの特徴
(connection),すなわち論理リンクを設定してデータ 本研究で使用したLANボードのブロック図を図7に 通信を行なう。そのため,通信の始めにはコネクション 示す。このLANボードでは,従来,ディップスイッチ を開設しなければならない。 やジャンパーピンで設定していた1/0ベースアドレス TCPにおけるコネクションの開設,解放の手順を簡 や使用割込みレベルを,ソフトウェアによって設定でき 単に説明しておく。図5(a)に示すように,コネクション る。また,ボードには256kByte+32kByteの一次バッ の開設は3つのパケットのやり取りにて行なわれる。 ファメモリを実装している。このバッファメモリは,本 まず,ホストAは,コネクションの開設を要求する 体CPUメモリ空間に配置されたウィンドウ(4kByte×
SYNパケット(シーケンス番号x)を相手ホストBに 4個=16kByte)を介して読み書きできる。一次バッ 送る。ホストBは,コネクションの開設要求と受諾応答 ファメモリを実装しているため,本体CPUに負荷をか
(ACK)の両方の意味を持つSYNパケット(シーケン けることなくデータの転送を行なうことができる。また,
ス番号y)を,ホストAに送り返す。最後に,ホストA このバッファメモリはリモートDMAボードによっても は,受諾応答を送る。この手順が終了した時点で,コネ 読み書きできる。イーサネットアドレスは,ボード上の クションが開設される。この手順は3ウェイハンドシェ ROMにすでに書込まれており,他のボードとイーサ イクと呼ばれる。図5(b)に示すコネクション解放の手順 ネットアドレスが重複することはない。
は,3ウェイハンドシェイクを変形したものである。こ
こでは,コネクションの解放を要求するFINパケット ・ 7 ・5 2…
をやり取りして,コネクションを解放している。
TCPにおけるフローコントロールは,受信側から送 信側の送信するデータの量を制御することで行なわれる。
つまり,送信側にその時点で受け入れ可能な最大セグメ ント長を知らせて,送信側にそれより大きいパケットを 送らないように指示することによって行なわれる。また,
データを正常に受け取ったことを知らせるために,受信 図6:TCPヘッダフォーマット 側は送信側に確認番号付きのACKパケットを送る。送
認
AC +1
Source Porヒ De6ヒ1natlon Porこ Sequence Number
Acknowledgmenし Nuπber Daヒa
nffs飢
O
q…rv砿 昌
AeK PSH
R S F r Y 工
s N N Window Checksum UrgenヒPoinにer
OPC 10ns
嗣 國
⊆] 1割り・ ・
岳
AC +1 1 團
回路
INT1。,cコ≡£.1レジスタ
・・一シ・ンの・・ @…一ンの解放 ←鵬_」
図5:コネクションの開設と解放 図7:LANボードのブロック図
56 重松保弘・二村和宏・岩根雅彦
LANボードで使用されているネットワーク・イン ブル(62ビット長の1,0の例)とSFD(Start of
ターフェース・コントローラ (NIC)は, National Frame Delimiter:フレームの開始点の目印であり連続Semiconductor社のDP8390Cである。このNICは, した2個の1によって構成される)およびFCS IEEE802・3規格に従ってパケットの送受信を行なうメ (Frame Check Sequence:エラーチェックのビット ディアアクセスコントロール(MAC)層の機能を実行 フィールド)を付加する。受信時にはプリアンブルと する。DP83910は,シリアル・ネットワーク・インター SFDを取り除き,受信用バッファRAMに格納する。
フェース(SNI)である。 NICは,これを介してコアキ 図8にNICのブロック図を示す。
シャル・トランシーバ・インターフェース(CTI)ある 。 _
いは,イーサネ。ト.トランシーバケーブルに灘され 4・フ゜トコルアナフイザシステム る。 4.1システムの概要
3.2 レジスタと機能 本研究で使用したシステムの接続形態はバス型であり,
LANボードには,リセットレジスタ,1/0アドレス ホストとしてNEC PC9801VX 2台, NEC PC9821Ap 設定レジスタという,2つのボード初期化用レジスタと, 1台,Sun SPARC Station 101台を使用した。また,
他にNICレジスタ, MAPレジスタ,割込みレジスタな LANボードにはCONTEC C−NET(98)−01を使用した。
ど32個のレジスタがある。 本システムは,ネットワークハードウェア,ネット リセットレジスタは,LANボードのハードウェァ・ ワークドライバ,およびTCP/IPパケットアナライザ
リセット要求および解除を行なうものである。1/0アド の3層で構成される。ネットワークハードウェアとは,
レス設定レジスタは,LANボードが占有するホストの ホスト, LANボード,ネットワークケーブルである。
1/0空間(32バイト)のベースアドレス,1/0アドレス ネットワークドライバは,コンピュータ,LANボード の使用・不使用,およびホストのCPUタイプ,の3つ を制御して,ネットワークアプリケーションにプログラ を設定するものである。 ム間通信機能を提供する。TCP/IPパケットアナライザ 3.3 NICの構造 は,パケットの受信およびパケットの解析を行う。
NICは,フレームの送受信を制御する。送信時には, 4.2 プロトコルアナライザの構成
送信用バッファRAMに入っているパケットにプリアン 本システムのソフトウェアとして,図9に示すように,
COL CRS
COLLISION qECOVERY
hFG TIMING
、SC, BUS,鶴㌫1]°N/IBREQ
ACK,R lRD,岡
HANDSHAKE PROTOCOL
@ PLA
DMA,
aUFFER bONTROL
@LOGIC
ADRESSqEGISTER ARRAY
COMMAND
@ STATUS qEG工STER ARRAY
DMA
@ADDRESS qEGISTERS
@ AND
bOUNTERS
8 [NTERNAL BUS 8 HANDSHAKε 16
ADDRESS
qECOGNITION
@ LCGIC
80R 16
RεCEIVE BYTEシOUNT/AL工GNMENT
@ LOGIC RXC
16 BYTE qECEIVε/
sRANSMIT
@FIFO RXD
RECIEVEcESER工ALIZεR@ LOGIC
TXC
TRANSMITrERIALIZER
@ LOGIC
FIFO bONTROL
@LOG工C
TXO
PREAMBLE/SYNCHiAM PATTERN GEN、
MuX
CRC
fENERATOR
@CHECKER
Mux
RXD
MULTIPLEXED
ADDRESS/DATA BUS図8:NlCのブロック図
法として,まずローカルメモリに値を書き込む,次に wind・wBase ローカルメモリから値を読み出す。書き込んだ値と読み i管理 出した値が同じであれば異常はない。しかし,異なる場 … 合はローカルメモリに異常があると判断する。関数set一 三 nd°豊: B・a・d・a・tは,ブ・一ドキャスト・デスティネーシ・ン
已ウインド 鰍≧一 こ爆㌘tケツトを受け入れる椴け入れな
… packeヒAnalyze pkAnawln 関数receivelnterruptは,ボードがパケットを受信しノ
\ 一…読み出し漸 た時に発生するハードウェア割込みによって起動される。
◆・.. アイスク
㌫。C,d−一一酬一一◆!一 この醐の役割は・ボード上の受信リングバ・ファに
▼・S...Ss 入っているパケットをホストメモリにある共有リング
読み酋、 バ。ファに格納することである.ボード上のリングバ.
...............……一 ファには,受信したパケットが格納されているが,各パ EヒherBoard 格納
ホスト上リングバッファ ケットの前には4バイトの受信ステータス(受信情報,
次のパケットが格納されている位置,パケット長)が付 図9:プロトコルアナライザのクラス構成 加されている。関数receiveInterruptは,まずその4バ イトの受信ステータスを読み出してパケットの長さを調 べる。次にパケットの長さの分だけボード上のリング 表1:クラスEtherBoardのメンバと機能
バッファからホストメモリのリングバッファにDMAを 用いてコピーする。そして,ボード上のリングバッファ の読み出しポインタをずらして,リングバッファを再び 使えるようにする。これをボード上のリングバッファに 格納されているパケットがなくなるまで繰り返す。
本システムでは,LANボード上の受信リングバッ ファとは別に,ホスト上に共有リングバッファを用意し たことはすでに述べた。これは以下のような理由からで ある。本システムは,パケットアナライザとしての性質 ネットワークドライバとプロトコルアナライザを新たに 上,大量のパケットを保持しなければならない。しかし,
作製した。クラスEtherBoardは,ネットワークドライ 大量のパケットをLANボードあるいは,ホスト上のメ バであり,クラスPacketAnalyzeとクラスpkAnaWin モリに置いておくことは不可能である。このため,確保 はプロトコルアナライザである。このほかに,ファイル したパケットは,ディスク上のファイルに保存すること 出力クラスとして,クラスfileCtrlを作成した。また, になる。
ユーザインターフェースとして2つのウィンドウクラス, ところで,パケットは,ネットワーク上を高速で流れ windowBaseとwindowMgrを作成した。 ているためLANボードがパケットを受信した時には,
クラスEtherBoardは, LANボード(以下,ボード) このパケットを素早くLANボードのバッファから取り を制御するためのクラスである。このクラスのメンバを 除き,次の受信に備えなければならない。この目的のた
表1に示す。 めに受信関数receiveInterruptを用意したことはすでに
コンストラクタは,ボード初期化関数initBoardを呼 述べた。したがって,受信関数は,割込み発生時にすぐ び出す,ホストの割込みマスクを解除する,割込み処理 さま起動されるよう設定しなければならない。しかし,関数を割込みベクタへ登録する,という3つの処理を行 受信関数を割込み処理の中で使用するには問題がある。
なう。デストラクタは,割込みベクタを元に戻し,ボー それは,MS−DOSの仕様により,割込み関数の中で ドをリセットする。 ファイル操作が許されていないという点である。
関数initboardは,コンストラクタから呼び出され, したがって,受信関数は,割込み処理の中で,受信パ ボードの初期化を行なう。関数memoryCheckは,ボー ケットをいったんホスト上のメモリに転送しておき,ホ ドのローカルメモリの異常を調べるものである。その方 スト上の別の関数(次に述べるfileCtrl)で,これを
メンバ 機能
etherADDR[6]
イーサネットアドレスを格納EtherBoard O コンストラクタ
〜EthreBoard O デストラクタ
initBoard O ボードを初期化mem・ryCheck O
ボードの初期化setWindow O
ボードのメモリをホストに写像moveData O
ボードホスト間のデータ転送receiveInterrupt O
割り込み処理setBoardcast O
ブロードキャストの受付を変更58 重松保弘・二村和宏・岩根雅彦
ファイルに格納する方法を取らざるを得ない。こうした であるので,TCPチェック関数chkTcpを呼び出す。
理由から,ホスト上にこれら関数間の共有資源として共 このようにして解析された結果は,メンバframeH,
有リングバッファを置いた。割込み関数とメイン関数が ipH, tcpHに格納される。関数showは,フレーム, IP,
共有資源をアクセスする可能性があるときは,その共有 TCPの各チェック関数によって解析された結果をディ 資源は相互排除されなければならない。したがって,共 スプレイに表示するものである。
有リングバッファと,その管理用ポインタ類は相互排除 クラスpkAnaWinは,クラスpacketAnalyzeの導出 されなければならない。本システムでは,割込み制御を クラスであり,関数showをウィンドウを使うように 用いて,これらの相互排除を実現した。 オーバーライドしたものである。コンストラクタは,受 クラスfileCtrlの役割は,共有リングバッファ上のパ 信したパケットが保存されているファイルからパケット ケットをディスクにファイルとして保存すること,およ を読み出し,関数chkPacketを呼び出して解析を行な び保存したファイルのパケットを整形して別のファイル い,その結果を関数showを使って表示する。
に保存することである。このクラスのメンバを表2に示 クラスwindowBaseは,1つのウィンドウを実現す す。このうち,最も重要な機能を持つ関数getPacketの るためのクラスである。通常このクラスはユーザから直 詳細を付録2に示す。 接使われることはなく,クラスwindowMgrのオブジェ クラスpacketAnalyzeは,パケットを解析するための クトによって管理される。つまり,このクラスのオブ
クラスである。このクラスのメンバを表3に示す。関数 ジェクト生成,解放,メンバ関数へのアクセスなどは,
chkPacketは,引数としてパケットが格納されている配 クラスwindowMgrのオブジェクトによって行なわれる。
列の先頭アドレス,パケット長,パケット番号を受け取 本システムでもこのクラスは,クラズwindOwMgrのオ る。そのデータをもとにフレームチェック関数 ブジェクトによって管理されている。しかし,ウィンド chkFrameを呼び出す。データ (フレーム)がIPパ ウの上下関係などが必要ないときなどには,このクラス ケット(フレームタイプが16進数800)である場合は, のオブジェクトを直接生成しても問題はない。
IPチェック関数chkIpを呼び出す。さらに, IPヘッダ クラスwindowMgrは,クラスwindowBaseのオブ のプロトコルが6の場合,IPのデータはTCPパケット ジェクト,つまりウィンドウをリスト構造を用いて管理 するものである。オープン,アップ,クローズなどの命 令によりクラスwindowBaseのオブジェクトを生成,
表2:クラスfileCtrlのメンバと機能 解放し,ウィンドウ管理リストを更新する。
メンバ 機能
winMgr windowMgrへのポインタ eBoard EtherBoardへのポインタ
fileCtrl O
コンストラクタ
〜fileCtrl O
デストラクタ
getPacket O 共有リングバッファをファイルにセーブ
saveFile O 整形してファイルにセーブメンバ 機能
length
パケットの長さを格納packetNo パケットの番号を格納 frameH フレームヘッダ情報を格納
ipH IPヘッダ情報を格納
tcpH TCPヘッダ情報を格納
chkFrame O
フレームヘッダを解析 chkIpO IPヘッダを解析chkTcp O
TCPヘッダを解析packetAnaly・e O コンストラクタ
〜packetAnalyze O デストラクタ chkPacket O
パケットを解析show O
解析結果を表示5.あとがき
本研究では,コンピュータネットワークの教育を主た る目的として,パソコン上で動作するTCP/IPパケッ トアナライザを試作した(C++言語で記述され,現在,
約1400行である)。このパケットアナライザを用いるこ とにより,実際にネットワーク上を流れているTCP/IP パケットをパソコン上に取り込み,解析し,ディスプレ 表3:クラスpacketAnalyzeのメンバと機能 イ上に表示することができるようになった。このシステ ムを利用すれば,従来,ブラックボックスであったネッ トワークの動的な動作状態を手軽にディスプレイで確認 することができる。TCP/IPプロトコルを学習する上で 本システムは有効な道具となることが期待される。筆者 らは,本システムを,本学電気工学科の3年次後期の授 業「計算機ネットワーク」において使用し,教育用ツー ルとしての有効性を確認した。
本システムは,パケットアナライザとしては基本的な ものであり,今後より豊富な機能を持つシステムに拡張 できると思われる。たとえば,TCP/IP以外のプロトコ
ルを解析できるよう拡張することである。また,ネット 付録1.パケットアナライザの使用法及び使用例 ワーク診断への利用を考えれば,パケットの送信エラー パケットアナライザを起動すると以下に示すメニューが表示さ 数験数およびトラフィ。ク量などのデータ収集と れ・入力待ちの状態になる・
解析離の追加が考えられる・ネ・トワークのトラ 1:㍑1鴎
フィックと伝送効率の関係を実験するために,疑似トラ 3:ファイルへの保存 フィックを発生させる機能を追加することも今後の課題 4:終了
である・ :1㌶㌶鑑㌶㌶:・ウィンドウが開き・次
参 考 文 献 1:全てのパケットを受信する
、 2:ブロードキャスト以外のパケットを受信する
[1]D・・Comer;村井純・楠本博週:TCP/IPによる不ット 3:指定したホストに関するパケットを受信する ワーク構築VoL 1・P・460・共旦出版(1991)・ 4:メインメニュ_に戻る
[2]D.,Comer, D., Stevens;村井純楠本博之訳:TCP/IP
によるネットワーク構築Vol.2, P 464,・共立出版 ここで,1又は,2を指定するとパケットの採取を開始する。
(1gg4)。 3を入力すると,さらにウィンドウが開き,ホスト名を尋ねて
[3]西田竹志:TCP/IP, P.282,ソフト・リサーチ・セン くる・パケットアナライザは,指定したホスト宛,またはホス ター(1989)。 トが送信したパケットのみを採取する。パケットの受信が始ま
[4]村井純,吉村伸;インターネット参加の手引き,P.408, ると,ウィンドウが開いて次のメッセージが表示される。
共立出版(1994)。 、 パケットを採取しています。
[5]
」≧違鑑鋸蒜三}澱瓢 終了するには・C・PYキーを押してください・
[6]二村和宏:教育用ローカルエリアネットワークに関する ここで,COPYキーを押すとパケット採取を終了し,メイ 研究,九州工業大学工学部電気工学科卒業論文,P.39 ンメニューに戻る。
(1gg4)。 2:パケットの解析 を指定すると,採取したパケットを
[7]C−NET(98)シリーズハードウェア仕様書, P 19, 解析し,その結果を表示する・図1に解析中の画面例を示す・
CONTEC(1991)。 図1は,受信したパケットのうち,14番目のパケットの内容を
[8]NIC DP8390Cネットワークインターフェースコント 表示している。ここで,ウィンドウの下になっているフレーム ローラ,P.53, National Semiconductor(1991)。 ヘッダ情報とIPヘッダ情報は,それぞれ f , i を入力すると
[9]PC−9801シリーズテクニカルデータブックHARD一 ポップアップされて前面に表示される。パケットが長くて,
WARE編, P.364,アスキー出版(1992)。 ウィンドウに入らない場合は,カーソルキーによってスクロー
[10]PC9801シリーズテクニカルデータブックBIOS編, P. ルさせて表示することができる。
434,アスキー出版(1992)。
90 80 4C 10 0B 7608 00 29 12 66 33 08 09 45 09 ..」..p....fウ,.E.
0029273400803CO6 1FOl 96458601 9645 」 4..く....E...ε 86 aE OO 17 10 22 74 0a 4F 55 0a oO O4 ∈B 50 18 ■t.OU....p,
10り02自87900064E白50 18 106a :::ξ:.d.P,..
〈フレームヘッタ情相〉 パケソトNO l4
…
〈lPヘソタ情帽〉
∪ パケットアナライプ く ヘツ カぬ
ア ね くレアに ロヨ く ピびアラ
1認織lc。こlt :ll認1?7謁5 聖llz:;[ iR
階漂ぽnt輌:;お9 〒よ台;ツダi!
;蹴IF| 93 :㌫燃酬 亮;㌶多ガi}
:罐瓢、,、,, :呼 員㌍一ルタワンば
D l bりtes data,
付録 図1 パケット解析中の画面例
3:ファイルへの保存 を指定すると,ウィンドウが開い て,次のメッセージが表示される。
パケットをファイルに保存します。
ファイル名を入力してください。
ここで,ファイル名を入力すると,採取したパケットは整形 されてファイルにセーブされる。
60 重松保弘・二村和宏・岩根雅彦
付録2.関数getPaketのソースリスト(一部)
//一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 for(in七 i=0;iくhos七Suu;i++){
// void fileCtr1::getPacket(void) if(!i∋七rcmp(inpu七Host,host[i].hostName)){
〃関数getPacket()の役割は,共有リングバッファ f。r(in七j=O;」<6;j⇔)
〃に格納されたパケットをディスクにセーブすること ge七Add[j]=host[i].e七herAddr[j];
〃である. }
〃一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 }
void fileCtrl::getPacket(void){ }
〃メインメニューに戻る
//一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 if(c==,4,){
〃変数宣言 winMgr−>closeWindov( lge七Packe七Win );
〃host[64]: hosts に:占:かれている情報を格納 re七urn;
〃char inputHost[80]:入力されたホスト名 }
〃int hostSuu :「 hosts に登録されたホスト数
〃int getAdd[6]:パケットのe七herアドレス 〃一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
〃int getPacketSuu :採取したパケットの数 〃ウィンドウを開き,パケット採取を開始する
〃FILE*filePtr:diskセーブのためのFP //一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
〃F工LE*hos七sFp:,,hosts,,へのFP winMgr>openWindow(17,10,70,15,5, mesWinll);
〃一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 cprintf( 1パケットを採取しています。\r\n );
struct{ cprintf(8 終了するにはCOPYキーを押してください。
uns igned char etherAddr[6]; n);
unsigned int ipAddr[4]; winMgr−>openWindow(45,20,64,22,2, ,packetNoWinll);
char hostName[16]; cprin七f(11パケット数: O 1);
}host[64]; writeptr=ringBuffer; 〃書き込みポインタ
readPtr=ringBuffer; //読み出しポインタ char c; filePtr ; f◎pen(1二packet.dat ㌧ w+t ll);
char match; 〃 LANボードスタート
char inputHos七[80]; ou七portb(CR, (PAGEO l ABORT l START));
int hostSuu; 〃loopは, COPYキーを押すことで0になる
int getAdd[6]; while(100p){
int j; !/一一一一一一一一一一一一一一一一一一一一一一一一一一一一一L−一一一一
int getpacketSuu=O; 〃共有 リングバッファ及び書き込みポインタ,
FILE*filePtr; 〃読み出しポインタは,割り込み関数と共有 FILE*hostsFp; 〃している.ここでは,競合が発生しないように
〃割り込みを禁止して相互排除を行っている
〃一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 /!一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
〃ファイル hostsl に登録されている情報 outportb(OxF3DE, OxOO);〃割り込み禁1.L
〃(etherアドレス三IPアドレス,ホスト名) if(readPtr!=writePtr){
〃を読み出す for(int i=O;iくpCount;i++){
〃一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
hostsFp=fopen(11hosts , r+tl ); 〃一一一一一一一一一一一一一一一一一省略一一一一一一一一一一一一一一一
for(hostSuu=0;;hostSuu++){ 〃受理すべきパケットなら, matchに1を代入if(lfeof(hostsFp)){ //一一一一一一一一一一一一一一一一一省略一一一一一一一一一一一一一一一一一
for(」=O;j〈6;j++)fscanf(hos七sFp,8 ZO2x , 〃共有リングバッファからパケットを &host[hostSuu].etherAddr〔j]); //ファイルに格納
for(j=O;j〈4;j++) for(int j=O;j〈pLength[i];j++,readPtr++){
fscanf(hostsFp, Zd , 〃readPtrがバッファの終りに到達したなら
&host[hos七Suu].ipAddr[j]); 〃readPtrをバッファの先頭に戻す
fscanf(hostsFp,9 Zsl , if(readP七r−ringBuffer>=16384){&hos七[hos七Suu].hostName); readPtr=ringBuffer;
}e↓se{ }
break; 〃パケットをファイルに格納
} if(match){
} if(j%16==O)fp虻intf(filePtr, べn 1);
fclose(hostsFp); fprintf(filePtr,1 ZO2X ,*readP七r);
}
〃一一一一一一一一一一・・一一一一一一一一一一一一一一一一一一一一一一一一 }
〃メニューを表示して採取するパケットを選択する fprin七f(filePtr, \n 1);
//一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 //getPacke七Suuを1増す
winMgr−>openWindow(5,5,55,12,3,11getPacketWinl ); if((ma七ch)&&(!pLength[i]))getPacketSuu++;
cprintf( 1:すべてのパケットを受信する\r\n ); cprintf( 1\r\nパケット数:Z5dl1,ge七PacketSuu);
cprintf(1 2:ブロードキャスト以外のパケットを受信す } る\r\nn); }
cprintf( 3:指定したホストのパケットを受信する\r\n ); outportb(OxF3DE, OxFF);//割り込み許可
cprintf(1 4:メインメニューに戻る\r\n ); }
cprintf(1 Input No. ); 100P = i;
c=getchO;
//ブロードキャストも受理する /た一一一一一・・一一一… ……一一一一…一一一⇔一一一一一一
if(c== 1,)eBoard−>setBroadcast(1); 〃LANボードをストップし,〃ブロードキャストは受理しない 〃ウィンドウをクローズして終了する
if(c==,2,)eBoard−>se七Broadcas七(O); //一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 if(c==,3,){ ou七por七b(CR, (PAGEO l ABORT l STOP));
〃ウィンドウを開き,ホスト名を尋ねる fclose(filePtr);
winMgr−>openWindow(10,16,35,18,5, hostWin ); winPlgr−>closeWindow( packetNoWin );
cprintf( ホスト名: ); winMgr−>closeWindow(1 mesWin );
scanf(18%s ㌧&inputHos七); if(c==,3,)winMgr−>closeWindow(1 hos七Winl1);
〃入力されたホスト名のe七herアドレスを winMgr−>closeWindow(81getPacketWin );
〃getAddに入れる }