(57)【要約】【課題】  取得対象のメッセージを含まないパケットを記憶部から破棄しつつ、メッセージを含むパケットを記憶部に残す。【解決手段】  キャプチャされたパケットからメッセージを取り出す情報処理装置において、パケット収集部は、パケットに含まれる要素を記憶部に記憶し、または、他のパケットに含まれる要素が記憶部に記憶されている場合、新たなパケットに含まれる要素を記憶部に記憶するとともに新たなパケットに含まれる要素のうちのデータを記憶部に記憶された他のパケットに対応する要素に含まれるデータに連結する。メッセージ抽出部は、キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、記憶部に記憶された複数の要素のいずれかにおいて、パケット収集部によるデータの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を記憶部から廃棄する。【選択図】    図１
2019092029.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して通信装置から他の通信装置に送信される複数のパケットのうち、キャプチャされたパケットからメッセージを取り出す情報処理装置において、
セッションに対応させてパケットに含まれる要素を記憶部に記憶し、または、前記セッションに対応する他のパケットに含まれる要素が前記記憶部に記憶されている場合、新たなパケットに含まれる要素を前記記憶部に記憶するとともに前記新たなパケットに含まれる要素のうちのデータを前記記憶部に記憶された前記他のパケットに対応する要素に含まれるデータに連結するパケット収集部と、
キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、セッションに対応させて前記記憶部に記憶された前記複数の要素のいずれかにおいて、前記パケット収集部によるデータの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を前記記憶部から廃棄するメッセージ抽出部と
を備えることを特徴とする情報処理装置。
【請求項２】
前記メッセージ抽出部は、データサイズがフラグメント長と一致したデータをメッセージと判定し、判定したメッセージを前記記憶部から取り出した後、前記一致したデータを含む要素を前記記憶部から破棄することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記セッションに対応させて前記記憶部に記憶した要素に対応するパケットが、先頭パケットの可能性があるかを判定する先頭判定部をさらに備え、
前記パケット収集部は、先頭パケットの可能性がないと前記先頭判定部が判定したパケットに含まれる要素を前記記憶部に記憶する処理を実行しないことを特徴とする請求項１または請求項２に記載の情報処理装置。
【請求項４】
フラグメント長を含む先頭パケットのデータペイロードは、メッセージの送受信に使用される複数のパラメータが格納されるヘッダ領域を含み、
前記先頭判定部は、各パケットを先頭パケットと仮定して、前記ヘッダ領域に含まれるパラメータを参照し、参照したパラメータの少なくともいずれかが異常値である要素に対応するパケットを先頭パケットの可能性がないと判定することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記パケット収集部は、前記記憶部に記憶した要素に含まれるデータを他の要素にコピーすることでデータを連結することを特徴とする請求項１ないし請求項４のいずれか１項に記載の情報処理装置。
【請求項６】
前記記憶部に記憶される前記複数の要素の各々は、前記フラグメント長に加えて、前記複数の要素の順序関係を示すパケットポインタと、要素に含まれるデータのサイズを示すカレントフラグメント長と、データの記憶位置を示すデータポインタとを含むことを特徴とする請求項１ないし請求項５のいずれか１項に記載の情報処理装置。
【請求項７】
ネットワークを介して通信装置から他の通信装置に送信される複数のパケットのうち、キャプチャされたパケットからメッセージを取り出す情報処理方法において、
セッションに対応させてパケットに含まれる要素を記憶部に記憶し、または、前記セッションに対応する他のパケットに含まれる要素が前記記憶部に記憶されている場合、新たなパケットに含まれる要素を前記記憶部に記憶するとともに前記新たなパケットに含まれる要素のうちのデータを前記記憶部に記憶された前記他のパケットに対応する要素に含まれるデータに連結し、
キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、セッションに対応させて前記記憶部に記憶された前記複数の要素のいずれかにおいて、データの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を前記記憶部から廃棄することを特徴とする情報処理方法。
【請求項８】
ネットワークを介して通信装置から他の通信装置に送信される複数のパケットのうち、キャプチャされたパケットからメッセージを取り出す情報処理装置に、
セッションに対応させてパケットに含まれる要素を記憶部に記憶し、または、前記セッションに対応する他のパケットに含まれる要素が前記記憶部に記憶されている場合、新たなパケットに含まれる要素を前記記憶部に記憶するとともに前記新たなパケットに含まれる要素のうちのデータを前記記憶部に記憶された前記他のパケットに対応する要素に含まれるデータに連結し、
キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、セッションに対応させて前記記憶部に記憶された前記複数の要素のいずれかにおいて、データの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を前記記憶部から廃棄する
処理を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
コンピュータ間で伝送されるメッセージを分析する分析装置は、コンピュータに接続されるスイッチを通過するパケットをミラーリング等により取得し、取得したパケットをパケットバッファ等の記憶部に格納する。コンピュータ間で伝送されるメッセージのサイズが、伝送の単位であるパケットの１つに収容可能なサイズより大きい場合、メッセージは、複数に分割されて複数のパケットの各々に格納され、パケット群として伝送される。分析装置は、パケット群に含まれる分割されたメッセージを連結することで元のメッセージを組み立て、組み立てたメッセージを分析する（例えば、特許文献１参照）。
【０００３】
例えば、パケットを送信する装置は、異なるメッセージ間のパケットの送信間隔を、同一のメッセージ内のパケットの送信間隔よりも長く設定する。この性質を利用して、パケットの分析装置は、受信間隔が所定の閾値以上であるパケットを、分割されたメッセージを含むパケット群の先頭パケットと判定し、メッセージの受信処理を実行する（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−０４２２９０号公報
【特許文献２】特開２０１１−１８２２１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近時、ネットワーク等の伝送路に伝送されるパケットの伝送レートが高くなる傾向にあり、異なるメッセージ間のパケットの送信間隔と同一のメッセージ内のパケットの送信間隔との差が小さくなってきている。このため、パケットの受信間隔に基づいて先頭パケットを判定する手法では、先頭パケット以外のパケットを誤って先頭パケットと判定する場合がある。先頭パケットの判定を誤った場合、膨大な量の誤ったメッセージが取得される可能性がある。
【０００６】
１つの側面では、本発明は、取得対象のメッセージを含まないパケットを記憶部から破棄しつつ、メッセージを含むパケットを記憶部に残すことを目的とする。
【課題を解決するための手段】
【０００７】
一つの実施態様では、ネットワークを介して通信装置から他の通信装置に送信される複数のパケットのうち、キャプチャされたパケットからメッセージを取り出す情報処理装置において、セッションに対応させてパケットに含まれる要素を記憶部に記憶し、または、セッションに対応する他のパケットに含まれる要素が記憶部に記憶されている場合、新たなパケットに含まれる要素を記憶部に記憶するとともに新たなパケットに含まれる要素のうちのデータを記憶部に記憶された他のパケットに対応する要素に含まれるデータに連結するパケット収集部と、キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、セッションに対応させて記憶部に記憶された複数の要素のいずれかにおいて、パケット収集部によるデータの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を記憶部から廃棄するメッセージ抽出部とを有する。
【発明の効果】
【０００８】
１つの側面では、本発明は、取得対象のメッセージを含まないパケットを記憶部から破棄しつつ、メッセージを含むパケットを記憶部に残すことができる。
【図面の簡単な説明】
【０００９】
【図１】情報処理装置、情報処理方法およびプログラムの一実施形態を示す図である。
【図２】図１に示す情報処理装置の動作の一例を示す図である。
【図３】情報処理装置、情報処理方法およびプログラムの別の実施形態を示す図である。
【図４】図３に示すキャプチャノードがキャプチャするパケットの構造の一例を示す図である。
【図５】図４に示すＲＭおよびＲＰＣヘッダの構造の一例を示す図である。
【図６】図３に示すネットワークスイッチを介して伝送される複数のパケットの一例と、図３に示すキャプチャノードが先頭パケットを欠損してキャプチャした場合の一例とを示す図である。
【図７】図３に示す解析ノードの動作の一例を示す図である。
【図８】図７の動作の続きを示す図である。
【図９】図３に示す解析ノードの動作フローの一例を示す図である。
【図１０】情報処理装置、情報処理方法およびプログラムの別の実施形態を示す図である。
【図１１】図１０に示す解析ノードの動作の一例を示す図である。
【図１２】図１１の動作の続きを示す図である。
【図１３】図１０に示す解析ノードの動作フローの一例を示す図である。
【図１４】図１３に示すステップＳ２００の動作フローの一例を示す図である。
【図１５】図１に示す情報処理装置と、図３および図１０に示す解析ノードとのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を用いて実施形態を説明する。
【００１１】
図１は、情報処理装置、情報処理方法およびプログラムの一実施形態を示す。図１に示す情報処理システム１００は、キャプチャ装置２および情報処理装置３を有する。キャプチャ装置２は、インターネットまたはイントラネット等のネットワークＮＷを介して通信装置１（１ａ、１ｂ、１ｃ）間で伝送されるパケットＡ（Ａ１、Ａ２、Ａ３、Ａ４、Ａ５）、Ｂ（Ｂ１、Ｂ２、Ｂ３）をキャプチャする機能を有する。例えば、キャプチャ装置２は、通信装置１ｃをネットワークＮＷに接続する伝送路ＴＰに伝送されるパケットをキャプチャする。
【００１２】
例えば、通信装置１ａ、１ｂ、１ｃは、インターネットの標準プロトコルであるＴＣＰ／ＩＰ（Transmission Control Protocol／Internet Protocol）を利用してパケットを送信する。通信装置１ａ、１ｃ間での通信は、セッションＳＳＮ−Ａとも称され、通信装置１ｂ、１ｃ間での通信は、セッションＳＳＮ−Ｂとも称される。
【００１３】
図１に示す例では、通信装置１ａが通信装置１ｃにパケットＡ１−Ａ５を送信し、通信装置１ｂが通信装置１ｃにパケットＢ１−Ｂ３を送信する。通信装置１ａは、通信装置１ｃに送信するメッセージのサイズが１つのパケットに収容可能なサイズの２倍を超え３倍以下であるため、メッセージを３つのパケットＡ１−Ａ３に分割して送信する。また、通信装置１ａは、通信装置１ｃに送信する次のメッセージのサイズが１つのパケットに収容可能なサイズを超え２倍以下であるため、メッセージを２つのパケットＡ４−Ａ５に分割して送信する。
【００１４】
同様に、通信装置１ｂは、通信装置１ｃに送信するメッセージのサイズが１つのパケットに収容可能なサイズの２倍を超え３倍以下であるため、メッセージを３つのパケットＢ１−Ｂ３に分割して送信する。太枠で示すパケットＡ１、Ａ４、Ａ１の各々は、各メッセージの送信に使用する複数のパケットのうち、先頭パケットを示す。
【００１５】
例えば、先頭パケットは、メッセージの分割前のサイズであるフラグメント長を格納するフラグメント領域を、データを格納するデータペイロード領域の先頭に含む。先頭パケット以外のパケットは、フラグメント領域を持たない。先頭パケット以外のパケットにおいて、フラグメント領域に対応する位置に格納される値はフラグメント長ではなく、メッセージに含まれるデータである。
【００１６】
図１に示す例では、キャプチャ装置２は、キャプチャ動作の開始タイミングまたはキャプチャ動作のエラー等によりパケットＡ１のキャプチャを逃す。そして、キャプチャ装置２は、パケットＡ１を除くパケットＡ２、Ｂ１、Ａ３、Ｂ２、Ａ４、Ａ５、Ｂ３を順次キャプチャし、キャプチャしたパケットを図示しない記憶装置に格納する。また、キャプチャ装置２は、キャプチャしたパケットＡ２、Ｂ１、Ａ３、Ｂ２、Ａ４、Ａ５、Ｂ３を情報処理装置３に出力する。
【００１７】
なお、キャプチャ装置２は、情報処理装置３からのパケット取得要求に基づいて、パケット取得要求に含まれる取得条件を満たすパケットを情報処理装置３に出力してもよい。例えば、キャプチャ装置２は、情報処理装置３から受信したパケット取得要求に含まれる取得条件が”通信装置１ｃで受信したパケット”である場合、取得条件を満たすパケットＡ２、Ｂ１、Ａ３、Ｂ２、Ａ４、Ａ５、Ｂ３を情報処理装置３に出力する。
【００１８】
情報処理装置３は、パケット収集部４、メッセージ抽出部５および記憶部６を有する。記憶部６は、後述するリストが格納されるリスト領域７と、プログラムが格納されるプログラム領域８とを有する。なお、記憶部６は、情報処理装置３の外部に配置されてもよい。例えば、パケット収集部４およびメッセージ抽出部５の機能は、プログラム領域８に格納されたプログラムを情報処理装置３が実行することで実現される。なお、パケット収集部４およびメッセージ抽出部５の機能は、情報処理装置３が有するＦＰＧＡ（Field-Programmable Gate Array）等のハードウェアにより実現されてもよい。
【００１９】
パケット収集部４は、パケットＡ２−Ａ５、Ｂ１−Ｂ３の各々を先頭パケットと仮定して以下の処理を実行する。パケット収集部４は、セッションＳＳＮ−Ａに対応するパケットＡ２−Ａ５の各々に含まれる要素を受信した順にリスト領域７に記憶する。また、パケット収集部４は、セッションＳＳＮ−Ｂに対応するパケットＢ１−Ｂ３の各々に含まれる要素を受信した順にリスト領域７に記憶する。換言すれば、パケットＡ２−Ａ５の各々に含まれる要素は、セッションＳＳＮ−Ａに対応させてリスト領域７に順次記憶され、パケットＢ１−Ｂ３の各々に含まれる要素は、セッションＳＳＮ−Ｂに対応させてリスト領域７に順次記憶される。以下では、パケットに含まれる要素には、要素を含むパケットと同じ符号が付される。
【００２０】
また、パケット収集部４は、セッションＳＳＮ−Ａに対応するパケットＡの要素がリスト領域７に既に記憶されている場合、新たなパケットＡに含まれるデータをリスト領域７に既に記憶している要素に含まれるデータに連結する。同様に、パケット収集部４は、セッションＳＳＮ−Ｂに対応するパケットＢの要素がリスト領域７に既に記憶されている場合、新たなパケットＢのデータをリスト領域７に既に記憶している要素に含まれるデータに連結する。パケット収集部４の動作の例は、図２で説明される。
【００２１】
メッセージ抽出部５は、パケットＡ２−Ａ５、Ｂ１−Ｂ３の各々を先頭パケットと仮定して以下の処理を実行する。メッセージ抽出部５は、セッションＳＳＮ−Ａに対応させてリスト領域７に記憶したパケットＡ２−Ａ５の要素の各々において、先頭パケットのフラグメント領域に対応する位置に格納された値をフラグメント長と想定する。メッセージ抽出部５は、データの連結後のサイズが、想定したフラグメント長と一致する要素がある場合、一致した要素に含まれるデータをメッセージと判定する。
【００２２】
そして、メッセージ抽出部５は、一致した要素以外の要素をリスト領域７から破棄する。メッセージ抽出部５の動作の例は、図２で説明される。なお、メッセージが１つのパケットに収容可能な場合、メッセージは先頭パケットのみを使用して送信される。この場合、パケットに含まれるデータのサイズはフラグメント長と一致するため、メッセージ抽出部５は、単一のパケットに対応してリスト領域７に記憶された要素に含まれるデータをメッセージと判定する。
【００２３】
図２は、図１に示す情報処理装置３の動作の一例を示す。図２は、図１に示すリスト領域７に格納されるリストＬＩＳＴ−Ａ、ＬＩＳＴ−Ｂの変化の様子を示す。図１に示すパケット収集部４は、セッションＳＳＮ−Ａに対応してキャプチャ装置２から受信するパケットＡを使用してリストＬＩＳＴ−Ａを生成する。また、パケット収集部４は、セッションＳＳＮ−Ｂに対応してキャプチャ装置２から受信するパケットＢを使用してリストＬＩＳＴ−Ｂを生成する。以下では、リスト領域７において、各パケットに含まれる要素が記憶される領域は、要素領域と称され、各要素領域は、対応するパケットと同じ符号が付される。
【００２４】
図１で説明したように、パケット収集部４およびメッセージ抽出部５は、キャプチャ装置２から受信するパケットＡ、Ｂの各々を先頭パケットとして扱う。リストＬＩＳＴ−Ａの要素領域Ａ（Ａ１−Ａ５）に含まれる要素は、フラグメント長ＦＬＡ（ＦＬＡ１−ＦＬＡ５）およびデータＡＤ（ＡＤ１−ＡＤ５）を含む。リストＬＩＳＴ−Ｂの要素領域Ｂ（Ｂ１−Ｂ３）に含まれる要素は、フラグメント長ＦＬＢ（ＦＬＢ１−ＦＬＢ３）およびデータＢＤ（ＢＤ１−ＢＤ３）を含む。但し、太枠で示すフラグメント長ＦＬＢ１、ＦＬＡ４は、先頭パケットに含まれる正しいフラグメント長である。太枠以外で示すフラグメント長ＦＬＡ２、ＦＬＡ３、ＦＬＡ５、ＦＬＢ２、ＦＬＢ３は、正しいフラグメント長でない偽のフラグメント長（でらためな値）である。これは、先頭パケット以外のパケットにおいて、先頭パケットにおいてフラグメント長が格納される位置に対応する位置に格納されたデータが、偽のフラグメント長として参照されるためである。
【００２５】
まず、パケット収集部４は、パケットＡ２に含まれる偽のフラグメント長ＦＬＡ２とパケットＡ２に含まれるデータＡＤ２とをリストＬＩＳＴ−Ａの要素領域Ａ２に記憶する（図２（ａ））。メッセージ抽出部５は、要素領域Ａ２において、フラグメント長ＦＬＡ２とデータＡＤ２のサイズとが一致しないため、パケットＡ２が先頭パケットでないと判定し、データＡＤ２がメッセージでないと判定する。
【００２６】
パケット収集部４は、パケットＢ１に含まれる正しいフラグメント長ＦＬＢ１とパケットＢ１に含まれるデータＢＤ１とをリストＬＩＳＴ−Ｂの要素領域Ｂ１に記憶する（図２（ｂ））。メッセージ抽出部５は、要素領域Ｂ１において、フラグメント長ＦＬＢ１とデータＢＤ１のサイズとが一致しないため、この時点では、パケットＢ１が先頭パケットでないと判定し、データＢＤ１がメッセージでないと判定する。
【００２７】
次に、パケット収集部４は、パケットＡ３に含まれる偽のフラグメント長ＦＬＡ３とパケットＡ３に含まれるデータＡＤ３とをリストＬＩＳＴ−Ａの要素領域Ａ３に記憶する（図２（ｃ））。また、パケット収集部４は、セッションＳＳＮ−Ａに対応する要素領域Ａ２に既に要素が含まれるため、パケットＡ３に含まれるデータＡＤ３を要素領域Ａ２に含まれるデータＡＤ２に連結する（図２（ｄ））。図２に示す例では、パケット収集部４は、要素領域Ａ３に含まれるデータＡＤ３を要素領域Ａ２にコピーすることでデータＡＤ２に連結するが、データの位置を示すポインタを利用して、データＡＤ３をデータＡＤ２に連結してもよい。他のデータの連結も同様に、データの位置を示すポインタを使用してもよい。
【００２８】
メッセージ抽出部５は、要素領域Ａ２において、フラグメント長ＦＬＡ２とデータＡＤ２、ＡＤ３のサイズの合計とが一致しないため、パケットＡ２が先頭パケットでないと判定し、データＡＤ２、ＡＤ３によるデータ列がメッセージでないと判定する。また、メッセージ抽出部５は、要素領域Ａ３において、フラグメント長ＦＬＡ３とデータＡＤ３のサイズとが一致しないため、パケットＡ３が先頭パケットでないと判定し、データＡＤ３がメッセージでないと判定する。
【００２９】
次に、パケット収集部４は、パケットＢ２に含まれる偽のフラグメント長ＦＬＢ２とパケットＢ２に含まれるデータＢＤ２とをリストＬＩＳＴ−Ｂの要素領域Ｂ２に記憶する（図２（ｅ））。また、パケット収集部４は、セッションＳＳＮ−Ｂに対応する要素領域Ｂ１に既に要素が含まれるため、パケットＢ２に含まれるデータＢＤ２を要素領域Ｂ１のデータＢＤ１に連結する（図２（ｆ））。メッセージ抽出部５は、パケットＢ１において、フラグメント長ＦＬＢ１とデータＢＤ１、ＢＤ２のサイズの合計とが一致しないため、この時点でもパケットＢ１が先頭パケットでないと判定し、データＢＤ１、ＢＤ２によるデータ列がメッセージでないと判定する。また、メッセージ抽出部５は、フラグメント長ＦＬＢ２とデータＢＤ２のサイズとが一致しないため、パケットＢ２が先頭パケットでないと判定し、データＢＤ２がメッセージでないと判定する。
【００３０】
次に、パケット収集部４は、パケットＡ４に含まれる正しいフラグメント長ＦＬＡ４とパケットＡ４に含まれるデータＡＤ４とをリストＬＩＳＴ−Ａの要素領域Ａ４に記憶する（図２（ｇ））。パケット収集部４は、セッションＳＳＮ−Ａに対応する要素領域Ａ２、Ａ３に既に要素が含まれるため、パケットＡ４のデータＡＤ４を、要素領域Ａ２のＡＤ２、ＡＤ３に連結するとともに、要素領域Ａ３のデータＡＤ３に連結する（図２（ｈ））。
【００３１】
メッセージ抽出部５は、要素領域Ａ２において、フラグメント長ＦＬＡ２とデータＡＤ２−ＡＤ４のサイズの合計とが一致しないため、パケットＡ２が先頭パケットでないと判定し、データＡＤ２−ＡＤ４によるデータ列がメッセージでないと判定する。メッセージ抽出部５は、要素領域Ａ３において、フラグメント長ＦＬＡ３とデータＡＤ３、ＡＤ４のサイズの合計とが一致しないため、パケットＡ３が先頭パケットでないと判定し、データＡＤ３、ＡＤ４によるデータ列がメッセージでないと判定する。また、メッセージ抽出部５は、要素領域Ａ４において、フラグメント長ＦＬＡ４とデータＡＤ４のサイズとが一致しないため、この時点では、パケットＡ４が先頭パケットでないと判定し、データＡＤ４がメッセージでないと判定する。
【００３２】
次に、パケット収集部４は、パケットＡ５に含まれる偽のフラグメント長ＦＬＡ５とパケットＡ５に含まれるデータＡＤ５とをリストＬＩＳＴ−Ａの要素領域Ａ５に記憶する（図２（ｉ））。パケット収集部４は、セッションＳＳＮ−Ａに対応する要素領域Ａ２、Ａ３、Ａ４に既に要素が含まれるため、パケットＡ５のデータＡＤ５を、要素領域Ａ２のデータＡＤ２−ＡＤ４に連結する。また、パケット収集部４は、要素領域Ａ３のデータＡＤ３、ＡＤ４に連結し、要素領域Ａ４のデータＡＤ４に連結する（図２（ｊ））。
【００３３】
メッセージ抽出部５は、要素領域Ａ２において、フラグメント長ＦＬＡ２とデータＡＤ２−ＡＤ５のサイズの合計とが一致しないため、パケットＡ２が先頭パケットでないと判定し、データＡＤ２−ＡＤ５によるデータ列がメッセージでないと判定する。メッセージ抽出部５は、要素領域Ａ３において、フラグメント長ＦＬＡ３とデータＡＤ３−ＡＤ５のサイズの合計とが一致しないため、パケットＡ３が先頭パケットでないと判定し、データＡＤ３−ＡＤ５によるデータ列がメッセージでないと判定する。
【００３４】
メッセージ抽出部５は、要素領域Ａ４においてフラグメント長ＦＬＡ４とデータＡＤ４、ＡＤ５のサイズの合計とが一致するため、パケットＡ４が先頭パケットであり、データＡＤ４、ＡＤ５によるデータ列がメッセージＭＳＧ−Ａであると判定する（図２（ｋ））。メッセージ抽出部５は、先頭パケットＡ４を見つけた場合、先頭パケットＡ４に対応する要素領域Ａ４以外の要素領域Ａ２、Ａ３、Ａ５に含まれる要素を破棄する（図２（ｌ）、（ｍ）、（ｎ））。
【００３５】
メッセージ抽出部５は、先頭パケットＡ４の検出に基づいて、メッセージＭＳＧ−ＡをリストＬＩＳＴ−Ａから取り出し、情報処理装置３が有する図示しない解析部に出力する。この後、メッセージ抽出部５は、メッセージＭＳＧ−Ａを含む要素領域Ａ４に含まれる要素をリストＬＩＳＴ−Ａから破棄する。解析部は、メッセージＭＳＧ−Ａを解析し、解析結果に応じて、通信装置１ａ、１ｃ間の通信経路で発生した通信障害等の原因を究明する。
【００３６】
次に、パケット収集部４は、パケットＢ３に含まれる偽のフラグメント長ＦＬＢ３とパケットＢ３に含まれるデータＢＤ３とをリストＬＩＳＴ−Ｂの要素領域Ｂ３に記憶する（図２（ｏ））。パケット収集部４は、セッションＳＳＮ−Ｂに対応する要素領域Ｂ１、Ｂ２に既に要素が含まれるため、パケットＢ３のデータＢＤ３を、要素領域Ｂ１のデータＢＤ１、ＢＤ２に連結し、要素領域Ｂ２のデータＢＤ２に連結する（図２（ｐ））。
【００３７】
メッセージ抽出部５は、要素領域Ｂ１において、フラグメント長ＦＬＢ１とデータＢＤ１−ＢＤ３のサイズの合計とが一致するため、データＢＤ１−ＢＤ３によるデータ列がメッセージＭＳＧ−Ｂであると判定する（図２（ｑ））。メッセージ抽出部５は、リストＬＩＳＴ−Ｂ中からメッセージＭＳＧ−Ｂを見つけた場合、メッセージＭＳＧ−Ｂに対応する要素領域Ｂ１以外の要素領域Ｂ２、Ｂ３に含まれる要素を破棄する（図２（ｒ）、（ｓ））。
【００３８】
先頭パケットＢ１の検出に基づいて、メッセージ抽出部５は、メッセージＭＳＧ−ＢをリストＬＩＳＴ−Ｂから取り出し、図示しない解析部に出力した後、メッセージＭＳＧ−Ｂを含む要素領域Ｂ１に含まれる要素をリストＬＩＳＴ−Ｂから破棄する。解析部は、メッセージＭＳＧ−Ｂを解析し、解析結果に応じて、通信装置１ｂ、１ｃ間の通信経路で発生した通信障害等の原因を究明する。
【００３９】
このように、先頭パケットが不明であり、各パケットに対応する要素領域を使用して先頭パケットを見つける処理を実行する場合に、先頭パケットに対応する要素領域のみを残し、他の要素領域に含まれる要素を破棄することができる。先頭パケットに対応する要素領域にはメッセージを含むデータが記憶されているため、リスト領域７に残した要素領域を使用してメッセージを抽出することができる。
【００４０】
また、パケット収集部４は、要素領域Ａ５に含まれるデータＡＤ５を要素領域Ａ４にコピーすることでデータＡＤ４、ＡＤ５を相互に連結する。これにより、メッセージ抽出部５は、フラグメント長ＦＬＡ４とデータＡＤ４、ＡＤ５のサイズの合計とが一致した時点で、メッセージＭＳＧ−Ａをリスト領域７から取り出すことができる。すなわち、フラグメント長ＦＬＡ４とデータＡＤ４、ＡＤ５のサイズの合計とが一致した後にメッセージＭＳＧ−Ａを組み立てる場合に比べて、メッセージＭＳＧ−Ａの解析処理を迅速に開始することができる。
【００４１】
情報処理装置３は、全てのパケットＡ２−Ａ５を先頭パケットと仮定してデータを連結する処理を実行することで、最初に受信したパケットＡ２が先頭パケットでない場合にも、メッセージＭＳＧ−Ａを取得することができる。さらに、メッセージ抽出部５は、先頭パケットＡ４の検出動作を、データを連結する動作と並列に実行するため、先頭パケットＡ４の検出時にメッセージＭＳＧ−Ａを取得できる。
【００４２】
これに対して、キャプチャ装置２から最初に受信したパケットＡ２を先頭パケットとしてメッセージの取得処理を実行する場合、パケットＡ２において、先頭パケットのフラグメント領域に対応する位置に格納された値をフラグメント長（偽）に設定する。例えば、偽のフラグメント長が、設定可能な最大値である場合、パケットＡ２に続くパケットＡ３、Ａ４、Ａ５、...の各々に含まれるデータが延々と連結される。この結果、パケットＡ４を先頭パケットするメッセージＭＳＧ−Ａだけでなく、パケットＡ５より後に受信するパケットに含まれる他のメッセージも取得することができず、メッセージを解析することができない。
【００４３】
以上、図１および図２に示す実施形態では、以下に示す効果を得ることができる。先頭パケットが不明であり、各パケットに対応する要素領域を使用して先頭パケットを見つける処理を実行する場合に、先頭パケットに対応する要素領域のみを残し、他の要素領域に含まれる要素を破棄することができる。すなわち、取得対象のメッセージを含まないパケットを記憶部６から破棄しつつ、メッセージを含むパケットを記憶部６に残すことができる。先頭パケットに対応する要素領域にはメッセージを含むデータが記憶されているため、リスト領域７に残した要素領域を使用してメッセージを抽出することができる。
【００４４】
新たな要素に含まれるデータを他の要素のデータにコピーすることでデータを連結するため、フラグメント長と連結後のデータのサイズとが一致した時点で、メッセージをリスト領域７から取り出すことができる。全てのパケットを先頭パケットと仮定してデータを連結する処理を実行することで、最初に受信したパケットが先頭パケットでない場合にも、メッセージを取得することができる。
【００４５】
さらに、キャプチャ装置２が複数のセッションのパケットを混在して受信する場合にも、セッション毎に、パケットをリスト領域７に記憶し、データの連結処理、先頭パケットの検出処理およびメッセージの抽出処理を実行できる。また、複数のセッションのパケットを混在して受信する場合にも、セッション毎に、先頭パケットでないパケットに対応する要素を破棄してメッセージを含む要素をリスト領域７に残すことができる。
【００４６】
図３は、情報処理装置、情報処理方法およびプログラムの別の実施形態を示す。図１と同一または同様の要素には、同じ符号を付し、詳細な説明は省略する。図３に示す情報処理システム１００Ａは、パケットの伝送路に設けられたタップ１６に接続されたキャプチャノード２０と、キャプチャノード２０に接続されたストレージ装置５０と、キャプチャノード２０に接続された解析ノード３０とを有する。キャプチャノード２０は、キャプチャ装置の一例であり、解析ノード３０は、情報処理装置の一例である。なお、解析ノード３０は、ストレージ装置５０に格納されたパケットを、キャプチャノード２０を介することなく取得してもよい。また、解析ノード３０は、キャプチャノード２０内に含まれてもよい。すなわち、キャプチャノード２０と解析ノード３０とが、１つのサーバにより実現されてもよい。
【００４７】
端末装置１０（１０ａ、１０ｂ、１０ｃ）とサーバノード１４（１４ａ、１４ｂ）とは、ネットワークＮＷ、タップ１６およびネットワークスイッチ１２を介して相互に接続される。ネットワークＮＷは、タップ１６を介してネットワークスイッチ１２のポート１２ａに接続され、サーバノード１４ａ、１４ｂの各々は、ネットワークスイッチ１２のポート１２ｂ、１２ｃのいずれかに接続される。端末装置１０およびサーバノード１４は、通信装置の一例である。例えば、各端末装置１０は、サーバノード１４を利用するユーザが使用するコンピュータである。ネットワークスイッチ１２は、端末装置１０とサーバノード１４との間で送受信されるパケットの経路を切り替える。
【００４８】
例えば、図３では、ＮＦＳ（Network File System）が、端末装置１０およびサーバノード１４により構築される。この場合、端末装置１０はＮＦＳクライアントとして機能し、サーバノード１４はＮＦＳサーバとして機能する。例えば、端末装置１０およびサーバノード１４は、ＴＣＰ／ＩＰを利用してＲＰＣ（Remote Procedure Call）によりメッセージを送受信する。以下の説明では、ＲＰＣにより送受信されるメッセージは、ＲＰＣコマンドまたはコマンドＲＰＣとも称される。ＲＰＣコマンドのサイズが、パケットの１つに収容可能なサイズより大きい場合、ＲＰＣコマンドは、複数に分割されて複数のパケットの各々に格納され、パケット群として伝送される。
【００４９】
キャプチャノード２０は、キャプチャ制御部２２、パケットバッファ２４およびパケット検索部２６を有する。キャプチャ制御部２２は、端末装置１０とサーバノード１４との間で送受信されるパケットを、タップ１６を介してキャプチャし、キャプチャしたパケットをパケットバッファ２４に順次格納する。キャプチャ制御部２２は、例えば、パケットバッファ２４に所定量のパケットが格納された場合、所定量のパケットをストレージ装置５０に格納する。
【００５０】
パケット検索部２６は、解析ノード３０からのパケットの取得要求ＲＥＱに基づいて、取得対象のパケットをストレージ装置５０から検索して取得し、取得したパケットを取得要求ＲＥＱに対応する応答ＲＥＳとして解析ノード３０に出力する。なお、タップ１６は、図３に示す位置以外に設置されてもよい。さらに、キャプチャノード２０は、タップ１６を介してパケットをキャプチャする代わりに、ネットワークスイッチ１２が有する図示しないミラーポートを介してパケットをキャプチャしてもよい。
【００５１】
さらに、キャプチャノード２０は、端末装置１０およびサーバノード１４以外の装置間で送受信されるデータ等の情報をキャプチャしてもよい。例えば、サーバノード１４の代わりに計算ノードが配置されてもよい。あるいは、端末装置１０の代わりにサーバノードが配置され、サーバノード１４の代わりにストレージノードまたはデータベースノード等が配置されてもよい。また、情報処理システム１００Ａは、ネットワークスイッチ１２およびサーバノード１４を含んでもよい。
【００５２】
解析ノード３０は、パケット収集部３２、メッセージ抽出部３４およびメモリ４０を有する。メモリ４０は、リスト領域４２およびプログラム領域４４を有する。メモリ４０は、例えば、複数のＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）を含むメモリモジュールを有する。なお、メモリ４０は、ＳＲＡＭ（Static Random Access Memory）を有してもよく、フラッシュメモリまたはＭＲＡＭ（Magnetoresistive Random Access Memory）等の不揮発性メモリを有してもよい。
【００５３】
パケット収集部３２は、解析ノード３０を操作する解析者等のオペレータからの指示に基づいて、パケットの取得条件を含む取得要求ＲＥＱをキャプチャノード２０に出力する。そして、パケット収集部３２は、キャプチャノード２０からの応答ＲＥＳに含まれる取得対象のパケットを受信する。また、パケット収集部３２は、図１に示すパケット収集部４と同様に、キャプチャノード２０から受信するパケットの各々を先頭パケットと仮定して、セッション毎にリスト領域４２にリストを作成する処理を実行する。なお、セッションは、端末装置１０とサーバノード１４のペア毎に送受信される通信を示す。パケット収集部３２の動作の例は、図７から図９で説明される。
【００５４】
メッセージ抽出部３４は、図１に示すメッセージ抽出部５と同様に、リスト領域４２に記憶したセッション毎のパケットの中から先頭パケットを見つけ、メッセージを取得する。また、メッセージ抽出部３４は、先頭パケット以外のパケットをリスト領域４２から破棄する。メッセージ抽出部３４の動作の例は、図７から図９で説明される。
【００５５】
メモリ４０のプログラム領域４４には、パケット収集部３２およびメッセージ抽出部３４の機能を実現するプログラムが格納される。なお、パケット収集部３２およびメッセージ抽出部３４の機能は、ハードウェアにより実現されてもよい。
【００５６】
図４は、図３に示すキャプチャノード２０がキャプチャするパケットの構造の一例を示す。各パケットは、イーサフレームヘッダ、ＩＰヘッダ、ＴＣＰヘッダおよびＴＣＰデータペイロードを有する。ＩＰヘッダ、ＴＣＰヘッダおよびＴＣＰデータペイロードは、イーサフレームデータペイロードである。イーサフレームヘッダは、宛先ＭＡＣ（Media Access Control address）アドレスおよび送信元ＭＡＣアドレスを含む。ＩＰヘッダは、イーサフレームデータペイロードのサイズを示すＩＰパケット長、パケットの送信元のＩＰアドレスおよびパケットの宛先のＩＰアドレスを含む。
【００５７】
ＴＣＰヘッダは、パケットの送信元のポート番号およびパケットの宛先のポート番号を含む。ＴＣＰデータペイロードは、ＲＰＣコマンド（すなわち、メッセージ）の先頭データを含む場合、ＲＭ（Record Marking Standard）およびＲＰＣヘッダを有する。ＲＭおよびＲＰＣヘッダの構造は、図５に示される。
【００５８】
図５は、図４に示すＲＭおよびＲＰＣヘッダの構造の一例を示す。ＲＭ（４バイト）は、パケットに分割して格納される前のＲＰＣコマンドのサイズ（データ長）を示すフラグメント長を含む。フラグメント長は、ＲＰＣヘッダのサイズを含む。ＲＰＣヘッダの仕様は、ＣＡＬＬ（呼び出し）時とＲＥＰＬＹ（応答）時とで異なる。
【００５９】
ＣＡＬＬのＲＰＣヘッダは、トランザクション識別子ｘｉｄ、メッセージタイプｍｔｙｐｅおよびＲＰＣバージョン番号ｒｐｃｖｅｒｓが格納される領域を有する（各々４バイト）。トランザクション識別子ｘｉｄは、任意の値に設定される。メッセージタイプｍｔｙｐｅ＝”０”は、ＣＡＬＬを示し、メッセージタイプｍｔｙｐｅ＝”１”は、ＲＥＰＬＹを示す。ＲＰＣバージョン番号ｒｐｃｖｅｒｓは、通常”２”に設定され、”２”以外は異常値である。
【００６０】
また、ＣＡＬＬのＲＰＣヘッダは、任意のプログラム番号ｐｒｏｇ、任意のバージョン番号ｖｅｒｓおよび任意のプロシジャ番号ｐｒｏｃが設定される領域を有する（各々４バイト）。さらに、呼び出し（ＣＡＬＬ）のＲＰＣヘッダは、クライアント側（ｃｒｅｄ）の認証情報ｆｌａｖｏｒおよび認証情報ｏｐａｑｕｅと、サーバ側（ｖｅｒｆ）の認証情報ｆｌａｖｏｒおよび認証情報ｏｐａｑｕｅとが設定される領域を有する。認証情報ｆｌａｖｏｒは４バイトであり、任意の値に設定される。認証情報ｏｐａｑｕｅは、４バイトのデータ長と最大４００バイトのデータとを含む。
【００６１】
応答時（ＲＥＰＬＹ）のＲＰＣヘッダは、トランザクション識別子ｘｉｄおよびメッセージタイプｍｔｙｐｅが設定される領域と、サーバ側（ｖｅｒｆ）の認証情報ｆｌａｖｏｒおよび認証情報ｏｐａｑｕｅが設定される領域とを有する。また、応答時（ＲＥＰＬＹ）のＲＰＣヘッダは、受け付け状態ｓｔａｔが設定される領域を有する（４バイト）。受け付け状態ｓｔａｔは、”０”から”５”の整数のいずれかに設定され、それ以外の値は異常値である。
【００６２】
図６は、図３に示すネットワークスイッチ１２を介して伝送される複数のパケットの一例と、図３に示すキャプチャノード２０が先頭パケットを欠損してパケットをキャプチャする場合の一例とを示す。なお、図６では、説明を分かりやすくするため、キャプチャノード２０は、１つのセッションに対応するパケットＰＣＫＴをキャプチャする。
【００６３】
例えば、端末装置１０ａからサーバノード１４ａにパケットＰＣＫＴ１、ＰＣＫＴ２、ＰＣＫＴ３、ＰＣＫＴ４、ＰＣＫＴ５、ＰＣＫＴ６が送信される。ＲＰＣコマンド（メッセージ）であるコマンドＲＰＣ１（Ｄ１＋Ｄ２＋Ｄ３）は、パケットＰＣＫＴ１−ＰＫＴ３を使用して送信され、コマンドＲＰＣ２（Ｄ４＋Ｄ５）は、パケットＰＣＫＴ４−ＰＣＫＴ５を使用して送信される。コマンドＲＰＣ１の先頭データを含む先頭パケットＰＣＫＴ１およびコマンドＲＰＣ２の先頭データを含む先頭パケットＰＣＫＴ４は、ＲＭおよびＲＰＣヘッダを含む。
【００６４】
サーバノード１４ａは、パケットＰＣＫＴ１からＲＭおよびＲＰＣヘッダを抽出し、パケットＰＣＫＴ１−ＰＣＫＴ３に含まれるデータＤ１、Ｄ２、Ｄ３を組み立ててコマンドＲＰＣ１を取得する。また、サーバノード１４ａは、パケットＰＣＫＴ４からＲＭおよびＲＰＣヘッダを抽出し、パケットＰＣＫＴ４−ＰＣＫＴ５に含まれるデータＤ４、Ｄ５を組み立ててコマンドＲＰＣ２を取得する。
【００６５】
一方、図６に示す例では、キャプチャノード２０は、先頭パケットＰＣＫＴ１をキャプチャせずに、パケットＰＣＫＴ２−ＰＣＫＴ６を順次キャプチャする。例えば、解析ノード３０と異なる他の解析ノードは、キャプチャノード２０が最初にキャプチャしたパケットＰＣＫＴ２を先頭パケットと仮定してコマンドＲＰＣの取得処理を開始する。
【００６６】
他の解析ノードは、パケットＰＣＫＴ２のデータＤ２の先頭から偽のＲＭを参照し、ＲＰＣコマンドのサイズであるフラグメント長を取得する。例えば、フラグメント長は、ＲＭの３１ビットを使用して設定されるため、指定可能な最大のサイズは２ギガバイトである。もし、他の解析ノードが２ギガバイトを示すフラグメント長を取得した場合、他の解析ノードは、２ギガバイトのデータをパケットＰＣＫＴ２に後続する複数のパケットから取得し、２ギガバイトのデータを連結して偽のコマンドＲＰＣ１＃を生成する。
【００６７】
その後、他の解析ノードは、偽のコマンドＲＰＣ１＃を解析するが、解析を失敗し、取得した２ギガバイトのデータを破棄する。すなわち、キャプチャノード２０が、ＲＰＣコマンドを含む先頭パケットＰＣＫＴ１を取得しない場合、他の解析ノードは、解析できない無駄なデータを大量に取得することになる。
【００６８】
さらに、他の解析ノードは、パケットＰＣＫＴ４、ＰＣＫＴ６をデータＤ５、Ｄ６を偽のコマンドＲＰＣ１＃の途中のデータとして取得するため、パケットＰＣＫＴ４、ＰＣＫＴ６に含まれる正しいＲＭおよび正しいＲＰＣヘッダを検出しない。したがって、他の解析ノードは、キャプチャノード２０がＲＰＣコマンドを含む先頭パケットＰＣＫＴ１を取得しない場合、最初のコマンドＲＰＣ１の取得に失敗するだけでなく、コマンドＲＰＣ１に後続する他のコマンドＲＰＣの取得も失敗する。図３に示す解析ノード３０は、上述した不具合を解消する。
【００６９】
図７および図８は、図３に示す解析ノード３０の動作の一例を示す。図７および図８は、図６に示すように、キャプチャノード２０が先頭パケットＰＣＫＴ１をキャプチャせずに、パケットＰＣＫＴ２−ＰＣＫＴ５を順次キャプチャした場合の解析ノード３０の動作を示す。図７および図８は、リスト領域４２に記憶される情報を示す。
【００７０】
まず、図７（Ａ）において、解析ノード３０のパケット収集部３２は、最初のパケットＰＣＫＴ２のＩＰヘッダに含まれる送信元のＩＰアドレスおよび宛先のＩＰアドレスの組み合わせに基づいてセッションＳＳＮ１を識別する。以降、パケット収集部３２は、受信するパケットＰＣＫＴ３−ＰＣＫＴ５毎にセッションＳＳＮ１を識別する。パケット収集部３２は、セッションテーブルＳＳＮＴＢＬに予め記憶されたソースＩＰアドレスＳｒｃＩＰとディスティネーションＩＰアドレスＤｉｓｔＩＰとを参照し、セッションＳＳＮ１に対応するセッションテーブルＳＳＮＴＢＬを見つける。ここで、ソースＩＰアドレスＳｒｃＩＰは、パケットの送信元を示し、ディスティネーションＩＰアドレスＤｉｓｔＩＰは、パケットの宛先を示す。
【００７１】
パケット収集部３２は、最初のパケットＰＣＫＴ２に含まれる要素を、リスト領域４２においてセッションＳＳＮ１に対応する領域に割り当てられる要素領域ＥＬＭ２に記憶する。なお、パケットＰＣＫＴ２のＩＰヘッダに含まれる送信元のＩＰアドレスおよび宛先のＩＰアドレスの組み合わせに対応するセッションテーブルＳＳＮＴＢＬが存在しない場合、新たなセッションテーブルＳＳＮＴＢＬが作成される。例えば、パケット収集部３２は、セッションＳＳＮ１に対応してリストＬＩＳＴを作成する新たな領域をリスト領域４２に割り当て、割り当てた領域にセッションＳＳＮ１に対応するセッションテーブルＳＳＮＴＢＬを作成する。そして、パケット収集部３２は、新たな領域に割り当てた要素領域ＥＬＭ２にパケットＰＣＫＴ２に含まれる要素を記憶する。
【００７２】
要素領域ＥＬＭ２に記憶されるパケットＰＣＫＴ２の要素は、フラグメント長ＦＬ２およびデータＤ２を含む（図７（ａ）、（ｂ））。但し、パケットＰＣＫＴ２は先頭パケットでないため、ＴＣＰデータペイロードの先頭４バイトは、正しいＲＭではなく、偽のフラグメント長ＦＬ２を示す。また、データＤ２は、図４に示すＴＣＰデータペイロード全体のデータであり、データＤ２のサイズは、パケットＰＣＫＴ２のＩＰヘッダに含まれるパケット長により正しい値で示される。
【００７３】
パケット収集部３２は、要素領域ＥＬＭ２を示すポインタＰＥ２を、セッションＳＳＮ１に対応するセッションテーブルＳＳＮＴＢＬに記憶する（図７（ｃ））。また、パケット収集部３２は、セッションテーブルＳＳＮＴＢＬを示すポインタＰＳＴＢＬと、データＤ２を記憶する領域の先頭を示すポインタＤＰ２とを、要素領域ＥＬＭ２に記憶する（図７（ｄ）、（ｅ））。
【００７４】
パケット収集部３２は、受信したパケットＰＣＫＴに含まれるＩＰアドレスとセッションテーブルＳＳＮＴＢＬに含まれるＩＰアドレスとを比較することで、パケットＰＣＫＴが属するセッションＳＳＮを判定する。また、パケット収集部３２は、パケットＰＣＫＴ２のＩＰヘッダに含まれるパケット長（すなわち、ＴＣＰデータペイロードのサイズ）をカレントフラグメント長ＣＦＬ２１として要素領域ＥＬＭ２に記憶する（図７（ｆ））。カレントフラグメント長ＣＦＬ２１は、図５に示すＲＭのサイズとＲＰＣヘッダのサイズとを含む。
【００７５】
フラグメント長ＦＬ２とカレントフラグメント長ＣＦＬ２１とが一致しないため、メッセージ抽出部３４は、メッセージを抽出する動作を実行しない。なお、フラグメント長ＦＬ２とカレントフラグメント長ＣＦＬ２１とが一致する場合、メッセージ抽出部３４は、データＤ２を使用してメッセージを抽出する処理を実行する。メッセージを抽出する処理の例は、図８（Ｂ）で説明される。
【００７６】
次に、図７（Ｂ）において、パケット収集部３２は、パケットＰＣＫＴ３に含まれる要素を、リストＬＩＳＴに追加した要素領域ＥＬＭ３に記憶する。要素領域ＥＬＭ３に記憶されるパケットＰＣＫＴ３の要素は、偽のフラグメント長ＦＬ３およびデータＤ３（ＴＣＰデータペイロード）を含む（図７（ｇ）、（ｈ））。
【００７７】
パケット収集部３２は、要素領域ＥＬＭ３を示すポインタＰＥ３を要素領域ＥＬＭ２に記憶し、要素領域ＥＬＭ２を示すポインタＰＥ２を要素領域ＥＬＭ３に記憶する（図７（ｉ）、（ｊ））。パケット収集部３２は、データＤ３を記憶する領域の先頭を示すポインタＤＰ３を、要素領域ＥＬＭ３に記憶し、パケットＰＣＫＴ３に含まれるデータＤ３のサイズを示すカレントフラグメント長ＣＦＬ３１を要素領域ＥＬＭ３に記憶する（図７（ｋ）、（ｌ））。
【００７８】
さらに、パケット収集部３２は、パケットＰＣＫＴ３に含まれるデータＤ３を要素領域ＥＬＭ２にコピーすることで、データＤ３を要素領域ＥＬＭ２に記憶したデータＤ２に連結する（図７（ｍ））。データＤ３を要素領域ＥＬＭ２にコピーする位置は、ポインタＤＰ２の値にカレントフラグメント長ＣＦＬ２２を加えることで算出される。パケット収集部３２は、カレントフラグメント長ＣＦＬ２１を、データＤ２、Ｄ３のサイズを示すカレントフラグメント長ＣＦＬ２２に更新する（図７（ｎ））。なお、データＤ３のコピーは、要素領域ＥＬＭ３に記憶されたデータＤ３を使用してもよく、パケットＰＣＫＴ３に含まれる要素領域ＥＬＭ３に記憶される前のデータＤ３を使用してもよい。
【００７９】
フラグメント長ＦＬ２とカレントフラグメント長ＣＦＬ２２とが一致せず、フラグメント長ＦＬ３とカレントフラグメント長ＣＦＬ３１とが一致しないため、メッセージ抽出部３４は、メッセージを抽出する動作を実行しない。図７に示すように、パケットＰＣＫＴ２、ＰＣＫＴ３に対応する要素をリスト領域４２に順次追加することにより、セッションＳＳＮ１に対するリストＬＩＳＴが生成されていく。
【００８０】
次に、図８（Ａ）において、パケット収集部３２は、図７（Ｂ）と同様に、パケットＰＣＫＴ４に含まれる要素（ＦＬ４、Ｄ４）と、ポインタＰＥ３、ＤＰ４とを要素領域ＥＬＭ４に記憶し、ポインタＰＥ４を要素領域ＥＬＭ３に記憶する（図８（ａ）−（ｅ））。また、パケット収集部３２は、データＤ４を要素領域ＥＬＭ２のデータＤ２、Ｄ３に連結し、データＤ４を要素領域ＥＬＭ３のデータＤ３に連結する（図８（ｆ））。そして、パケット収集部３２は、更新したカレントフラグメント長ＣＦＬ２３、ＣＦＬ３２をリスト領域４２に記憶する（図８（ｇ）、（ｈ））。フラグメント長ＦＬ２とカレントフラグメント長ＣＦＬ２３とが一致せず、フラグメント長ＦＬ３とカレントフラグメント長ＣＦＬ３２とが一致しないため、メッセージ抽出部３４は、メッセージを抽出する動作を実行しない。
【００８１】
次に、図８（Ｂ）において、パケット収集部３２は、図７（Ｂ）および図８（Ａ）と同様に、パケットＰＣＫＴ５に基づいて、要素領域ＥＬＭ５に情報を記憶する処理を実行する（図８（ｉ））。また、パケット収集部３２は、パケットＰＣＫＴ５に含まれるデータＤ５を要素領域ＥＬＭ２、ＥＬＭ３、ＥＬＭ４のデータの各々に連結する処理を実行する（図８（ｊ））。パケット収集部３２は、要素領域ＥＬＭ２、ＥＬＭ３、ＥＬＭ４の各々において、カレントフラグメント長ＣＦＬ２３、ＣＦＬ３２、ＣＦＬ４１を、それぞれカレントフラグメント長ＣＦＬ２４、ＣＦＬ３３、ＣＦＬ４２に更新する（図８（ｋ）、（ｌ）、（ｍ））。
【００８２】
メッセージ抽出部３４は、フラグメント長ＦＬ２とカレントフラグメント長ＣＦＬ２４の不一致を検出し、フラグメント長ＦＬ３とカレントフラグメント長ＣＦＬ３３の不一致を検出する。一方、パケットＰＣＫＴ４は真の先頭パケットであり、ＲＰＣコマンドは、パケットＰＣＫＴ４、ＰＣＫＴ５に含まれるデータＤ４、Ｄ５に含まれる。このため、メッセージ抽出部３４は、フラグメント長ＦＬ４とカレントフラグメント長ＣＦＬ４２の一致を検出する（図８（ｎ））。
【００８３】
メッセージ抽出部３４は、データＤ４（パケットＰＣＫＴ４のＴＣＰデータペイロード）からＲＭに相当する先頭の４バイトを破棄することで、ＲＰＣヘッダを含むメッセージであるＲＰＣコマンドを抽出する（図８（ｏ））。この後、メッセージ抽出部３４は、フラグメント長ＦＬとカレントフラグメント長ＣＦＬとが一致しない他の要素領域ＥＬＭ２、ＥＬＭ３、ＥＬＭ５に記憶された要素を破棄する（図８（ｐ）、（ｑ）、（ｒ））。さらに、メッセージ抽出部３４は、例えば、要素領域ＥＬＭ４から抽出したＲＰＣコマンドの解析処理等が終了した場合、要素領域ＥＬＭ４を破棄する。
【００８４】
このように、パケットの各々に対応する要素領域ＥＬＭをリストＬＩＳＴに順次追加する場合、要素領域ＥＬＭ間をポインタにより接続することで、要素領域ＥＬＭの接続関係をパケットの受信順に対応させることができる。また、データを記憶する領域をポインタＤＰ２、ＤＰ３等により示すことで、要素領域ＥＬＭにおいて、パケットに含まれる要素を記憶する領域とデータを記憶する領域とをリスト領域４２の違う場所にそれぞれ割り当てることができる。
【００８５】
これにより、データが最大のフラグメント長まで連結されることを考慮して各要素領域ＥＬＭのサイズを設定する場合、要素領域ＥＬＭにおいてデータを記憶する領域以外のパラメータ領域を、アドレス空間において互いに近い位置に配置させることが可能になる。この結果、例えば、複数の要素領域ＥＬＭのカレントフラグメント長ＣＦＬを更新する場合等のリスト領域４２のアクセス効率を、パラメータ領域を互いに近くに配置しない場合に比べて向上することができる。
【００８６】
図９は、図３に示す解析ノード３０の動作フローの一例を示す。すなわち、図９は、情報処理装置による情報処理方法および情報処理装置が実行するプログラムの一例を示す。
【００８７】
解析ノード３０は、キャプチャノード２０から解析対象のパケットを受信したことに基づいて、セッションＳＳＮ毎に図９に示す動作フローを開始する。このため、解析ノード３０のパケット収集部３２は、受信したパケットのＩＰヘッダを参照し、各パケットが属するセッションＳＳＮを判定する。なお、解析ノード３０は、例えば、キャプチャノード２０から受信したパケットをメモリ４０の所定のバッファ領域に格納し、所定のバッファ領域に格納したパケットを使用して図９に示す動作フローを実行する。
【００８８】
まず、ステップＳ１００において、パケット収集部３２は、図７または図８に示すリストＬＩＳＴに要素を追加していないパケットであってＲＰＣコマンドを取得する取得対象のパケットがある場合、処理をステップＳ１０２に移行する。パケット収集部３２は、ＲＰＣコマンドを取得する取得対象のパケットがない場合、処理をステップＳ１１６に移行する。
【００８９】
ステップＳ１０２において、パケット収集部３２は、リストＬＩＳＴに要素を追加していないパケットの中から受信時刻が最も古いパケットを選択し、選択したパケットに含まれるフラグメント長およびデータ等の要素を取得する。次に、ステップＳ１０４において、パケット収集部３２は、取得したフラグメント長およびデータ等の要素を、パケットが属するセッションＳＳＮに対応するリストＬＩＳＴの要素領域ＥＬＭに記憶する。すなわち、パケット収集部３２は、パケットに含まれる要素をリストＬＩＳＴに追加する。
【００９０】
次に、ステップＳ１０６において、パケット収集部３２は、要素が記憶された他の要素領域ＥＬＭがリストＬＩＳＴ中に存在するか否かを判定する。要素が記憶された他の要素領域ＥＬＭがリストＬＩＳＴ中に存在する場合、処理はステップＳ１０８に移行され、要素が記憶された他の要素領域ＥＬＭがリストＬＩＳＴ中に存在しない場合、処理はステップＳ１１８に移行される。
【００９１】
ステップＳ１０８において、パケット収集部３２は、ステップＳ１０４で新規に取得した要素に含まれるデータを他の要素領域ＥＬＭに含まれるデータに連結する。ステップＳ１１０において、メッセージ抽出部３４は、リストＬＩＳＴ内の各要素領域ＥＬＭにおいて、フラグメント長ＦＬとカレントフラグメント長ＣＦＬとを比較する。次に、ステップＳ１１２において、メッセージ抽出部３４は、フラグメント長ＦＬとカレントフラグメント長ＣＦＬとが一致する要素領域ＥＬＭがある場合、ＲＰＣコマンドを検出したと判断し、処理をステップＳ１１４に移行する。一方、メッセージ抽出部３４は、フラグメント長ＦＬとカレントフラグメント長ＣＦＬとが一致する要素領域ＥＬＭがない場合、ＲＰＣコマンドを検出していないと判断し、処理をステップＳ１００に戻す。
【００９２】
ステップＳ１１４において、メッセージ抽出部３４は、フラグメント長ＦＬとカレントフラグメント長ＣＦＬとが一致した要素領域ＥＬＭに含まれるデータからＲＭを取り除くことでＲＰＣヘッダを含むＲＰＣコマンドを抽出する。また、メッセージ抽出部３４は、フラグメント長ＦＬとカレントフラグメント長ＣＦＬとが一致しない他の要素領域ＥＬＭに記憶された要素を破棄する。そして、メッセージ抽出部３４は、次のＲＰＣコマンドを抽出するために、処理をステップＳ１００に戻す。
【００９３】
ステップＳ１１６において、メッセージ抽出部３４は、ＲＰＣコマンドを取得する取得対象のパケットがないため、リストＬＩＳＴ中に残っている要素領域ＥＬＭに含まれる要素を破棄することで、リストＬＩＳＴをクリアし、処理を終了する。例えば、メッセージ抽出部３４は、ＲＰＣコマンドが抽出された要素領域ＥＬＭに含まれる要素であって、破棄されずに残っている要素を破棄する。
【００９４】
以上、図３から図９に示す実施形態においても、図１および図２に示す実施形態と同様に、先頭パケットが不明な場合、セッションＳＳＮ毎に、先頭パケットに対応する要素領域のみを残し、他の要素領域に含まれる要素を破棄することができる。先頭パケットに対応する要素領域にはメッセージを含むデータが記憶されているため、リスト領域４２に残した要素領域を使用して、セッションＳＳＮ毎にメッセージを抽出することができる。フラグメント長と連結後のデータのサイズとが一致した時点で、メッセージをリスト領域７から取り出すことができる。全てのパケットを先頭パケットと仮定してデータを連結する処理を実行することで、最初に受信したパケットが先頭パケットでない場合にも、メッセージを取得することができる。
【００９５】
さらに、図３から図９に示す実施形態では、要素領域ＥＬＭをポインタで接続することで、要素領域ＥＬＭの接続関係をパケットの受信順に対応させることができる。要素領域ＥＬＭのパラメータ領域を互いに近い位置に配置することで、複数の要素領域ＥＬＭのカレントフラグメント長ＣＦＬを更新する場合等のリスト領域４２のアクセス効率を、パラメータ領域を互いに近くに配置しない場合に比べて向上することができる。
【００９６】
図１０は、情報処理装置、情報処理方法およびプログラムの別の実施形態を示す。図３に示す実施形態で説明した要素と同一または同様の要素については、同じ符号を付し、詳細な説明は省略する。図１０に示す情報処理システム１００Ｂは、図３の情報処理システム１００Ａと同様に、タップ１６に接続されたキャプチャノード２０と、キャプチャノード２０に接続されたストレージ装置５０と、キャプチャノード２０に接続された解析ノード３０とを有する。
【００９７】
解析ノード３０は、図３に示すパケット収集部３２の代わりにパケット収集部３２Ｂを有する。また、解析ノード３０は、先頭判定部３６Ｂを有する。解析ノード３０のその他の構成は、図３と同様である。
【００９８】
先頭判定部３６Ｂは、パケットに含まれる要素に基づいて、パケットが先頭パケットの可能性があるか否かを判定する。パケット収集部３２Ｂは、パケットが先頭パケットの可能性があることを先頭判定部３６Ｂが判定した場合、パケットの要素をリスト領域に記憶する処理を実行する。一方、パケット収集部３２Ｂは、パケットが先頭パケットの可能性がないことを先頭判定部３６Ｂが判定した場合、パケットの要素をリスト領域に記憶する処理を実行しない。図１０に示す解析ノード３０の動作の例は、図１１から図１４に示される。
【００９９】
図１１および図１２は、図１０に示す解析ノード３０の動作の一例を示す。図７および図８と同一または同様の動作については、詳細な説明は省略する。図１１および図１２は、図７および図８と同様に、キャプチャノード２０が先頭パケットＰＣＫＴ１をキャプチャせずに、パケットＰＣＫＴ２−ＰＣＫＴ５を順次キャプチャした場合の解析ノード３０の動作を示す。
【０１００】
図１１（Ａ）において、先頭判定部３６Ｂは、パケットＰＣＫＴ２が先頭パケットの可能性があるか否かを判定する処理を実行し、パケットＰＣＫＴ２が先頭パケットの可能性がないと判定する。パケットＰＣＫＴ２が先頭パケットの可能性がないと先頭判定部３６Ｂにより判定された場合、パケット収集部３２Ｂは、パケットＰＣＫＴ２に含まれる要素を要素領域ＥＬＭ２に記憶する処理を実行しない（図１１（ａ））。図１１（Ａ）において、リストＬＩＳＴに示す破線の矩形枠は、パケットＰＣＫＴ２に含まれる要素を要素領域ＥＬＭ２に記憶しないことを示す。
【０１０１】
次に、図１１（Ｂ）において、先頭判定部３６Ｂは、パケットＰＣＫＴ３が先頭パケットの可能性がないと判定する。このため、図１１（Ａ）と同様に、パケット収集部３２Ｂは、パケットＰＣＫＴ３に含まれる要素を要素領域ＥＬＭ３に記憶する処理を実行しない（図１１（ｂ））。
【０１０２】
次に、図１２（Ａ）において、先頭判定部３６Ｂは、パケットＰＣＫＴ４が先頭パケットの可能性があると判定する。パケットＰＣＫＴ４が先頭パケットの可能性があると先頭判定部３６Ｂにより判定された場合、パケット収集部３２Ｂは、パケットＰＣＫＴ４に含まれる要素を要素領域ＥＬＭ４に記憶する処理を実行する（図１２（ａ））。パケット収集部３２Ｂは、要素領域ＥＬＭ４にセッションテーブルＳＳＮＴＢＬを示すポインタＰＳＴＢＬを記憶し、セッションテーブルＳＳＮＴＢＬに要素領域ＥＬＭ４を示すポインタＰＥ４を記憶する（図１２（ｂ）、（ｃ））。また、パケット収集部３２Ｂは、データＤ４を記憶する領域の先頭を示すポインタＤＰ４を要素領域ＥＬＭ２に記憶する（図１２（ｄ））。
【０１０３】
図１２（Ｂ）において、先頭判定部３６Ｂは、パケットＰＣＫＴ５が先頭パケットの可能性がないと判定する。しかし、パケットＰＣＫＴ５と異なる他のパケットＰＣＫＴ４に対応する要素領域ＥＬＭ４が既にリストＬＩＳＴに記憶されている。この場合、パケット収集部３２Ｂは、図８（Ｂ）と同様に、パケットＰＣＫＴ５に含まれる要素を要素領域ＥＬＭ５に記憶する処理を実行する（図１２（ｅ））。また、パケット収集部３２Ｂは、パケットＰＣＫＴ５に含まれるデータＤ５を要素領域ＥＬＭ４のデータＤ４に連結する処理とを実行する（図１２（ｆ））。
【０１０４】
この後、図８（Ｂ）と同様に、メッセージ抽出部３４は、フラグメント長ＦＬ４とカレントフラグメント長ＣＦＬ４２の一致を検出し、ＲＰＣヘッダを含むメッセージであるＲＰＣコマンドを抽出する（図１２（ｇ）、（ｈ））。さらに、メッセージ抽出部３４Ｂは、フラグメント長ＦＬとカレントフラグメント長ＣＦＬとが一致しない要素領域ＥＬＭ５を破棄する（図１２（ｉ））。さらに、メッセージ抽出部３４は、例えば、要素領域ＥＬＭ４から抽出したＲＰＣコマンドの解析処理等が終了した場合、要素領域ＥＬＭ４を破棄する。
【０１０５】
図１１および図１２に示すように、解析ノード３０は、先頭パケットの可能性がないパケットに含まれる要素をリストＬＩＳＴに記憶する処理を実行しない。これにより、リスト領域４２に無駄な要素が保持されることを抑止することができ、受信した全てのパケットＰＣＫＴの要素をリスト領域４２に記憶する場合に比べて、リスト領域４２のサイズを削減することができる。これにより、メモリ４０の記憶領域を有効に使用することができる。
【０１０６】
図１３は、図１０に示す解析ノード３０の動作フローの一例を示す。すなわち、図１３は、情報処理装置による情報処理方法および情報処理装置が実行するプログラムの一例を示す。図９と同一または同様の処理については、同じ符号を付し、詳細な説明は省略する。図１３は、図９に対して、ステップＳ２００、Ｓ１０３、Ｓ１２０、Ｓ１２２が追加される。ステップＳ２００、Ｓ１０３は、図９のステップＳ１０２とステップＳ１０４との間に挿入される。
【０１０７】
ステップＳ１０２において、パケットからフラグメント長およびデータ等の要素を取得した後、ステップＳ２００において、先頭判定部３６Ｂは、要素を取得したパケットが先頭パケットの可能性があるか否かの判定を実行する。ステップＳ２００の動作の例は、図１４に示される。
【０１０８】
次に、ステップＳ１０３において、先頭パケットの可能性がある場合、処理はステップＳ１０４に移行され、先頭パケットの可能性がない場合、処理はステップＳ１２０に移行される。ステップＳ１０４以降では、図９と同様に、パケットに含まれる要素を要素領域ＥＬＭに追加し、データを連結する処理等が実行される。但し、ステップＳ１０４以降の処理は、先頭パケットの可能性があるパケットについてのみ実行される。
【０１０９】
ステップＳ１２０において、要素が記憶された他の要素領域ＥＬＭがリストＬＩＳＴ中に存在する場合、処理はステップＳ１２２に移行され、他の要素領域ＥＬＭがリストＬＩＳＴ中に存在しない場合、処理はステップＳ１００に戻される。ステップＳ１２２において、パケット収集部３２Ｂは、パケットから取得したフラグメント長およびデータの要素をリストＬＩＳＴに追加し、処理をステップＳ１０８に移行し、データを連結する処理を実行する。
【０１１０】
図１４は、図１３に示すステップＳ２００の動作フローの一例を示す。まず、ステップＳ２０２において、先頭判定部３６Ｂは、パケットに含まれるＴＣＰデータペイロードを参照し、パケットが先頭パケットである場合にＴＣＰデータペイロードに含まれるＲＰＣヘッダの領域に格納されている情報を取得する。
【０１１１】
次に、ステップＳ２０４において、先頭判定部３６Ｂは、ＲＰＣヘッダのメッセージタイプｍｔｙｐｅと見なされる領域を参照する。次に、ステップＳ２０６において、先頭判定部３６Ｂは、メッセージタイプｍｔｙｐｅが”０”の場合、ＣＡＬＬ（呼び出し）時のＲＰＣヘッダと判定し、処理をステップＳ２０８に移行する。先頭判定部３６Ｂは、メッセージタイプｍｔｙｐｅが”１”の場合、ＲＥＰＬＹ（応答）時のＲＰＣヘッダと判定し、処理をステップＳ２２２に移行する。先頭判定部３６Ｂは、メッセージタイプｍｔｙｐｅが”０”、”１”のいずれでもない場合、ＲＰＣヘッダではないと判定し、処理をステップＳ２３４に移行する。
【０１１２】
ステップＳ２０８において、先頭判定部３６Ｂは、ＲＰＣバージョン番号ｒｐｃｖｅｒｓと見なされる領域を参照する。次に、ステップＳ２１０において、先頭判定部３６Ｂは、ＲＰＣバージョン番号ｒｐｃｖｅｒｓが”２”の場合、処理をステップＳ２１２に移行し、ＲＰＣバージョン番号ｒｐｃｖｅｒｓが”２”以外の場合、処理をステップＳ２３４に移行する。
【０１１３】
ステップＳ２１２において、先頭判定部３６Ｂは、クライアント側（ｃｒｅｄ）の認証情報ｏｐａｑｕｅと見なされる領域を参照する。次に、ステップＳ２１４において、先頭判定部３６Ｂは、認証情報ｏｐａｑｕｅが４００バイト以下の場合、処理をステップＳ２１６に移行し、認証情報ｏｐａｑｕｅが４００バイトを超える場合、処理をステップＳ２３４に移行する。
【０１１４】
ステップＳ２１６において、先頭判定部３６Ｂは、サーバ側（ｖｅｒｆ）の認証情報ｏｐａｑｕｅと見なされる領域を参照する。次に、ステップＳ２１８において、先頭判定部３６Ｂは、認証情報ｏｐａｑｕｅが４００バイト以下の場合、処理をステップＳ２３０に移行し、認証情報ｏｐａｑｕｅが４００バイトを超える場合、処理をステップＳ２３４に移行する。ステップＳ２３０において、先頭判定部３６Ｂは、受信したパケットが先頭パケットの可能性があると判定し、処理を終了する。
【０１１５】
一方、ステップＳ２２２において、先頭判定部３６Ｂは、サーバ側（ｖｅｒｆ）の認証情報ｏｐａｑｕｅと見なされる領域を参照する。次に、ステップＳ２２４において、先頭判定部３６Ｂは、認証情報ｏｐａｑｕｅが４００バイト以下の場合、処理をステップＳ２２６に移行し、認証情報ｏｐａｑｕｅが４００バイトを超える場合、処理をステップＳ２３４に移行する。
【０１１６】
ステップＳ２２６において、先頭判定部３６Ｂは、受け付け状態ｓｔａｔと見なされる領域を参照する。次に、ステップＳ２２８において、先頭判定部３６Ｂは、受け付け状態ｓｔａｔが”０”から”５”のいずれかの場合、処理をステップＳ２３２に移行し、受け付け状態ｓｔａｔが”０”から”５”のいずれでもない場合、処理をステップＳ２３４に移行する。ステップＳ２３２において、先頭判定部３６Ｂは、受信したパケットが先頭パケットの可能性があると判定し、処理を終了する。一方、ステップＳ２３４において、先頭判定部３６Ｂは、受信したパケットが先頭パケットの可能性がないと判定し、処理を終了する。
【０１１７】
このように、所定の値が設定されるＲＰＣヘッダの情報を利用することで、パケットが先頭パケットの可能性があるか否かを判定することができる。ＲＰＣヘッダの複数のパラメータを利用することで、単一のパラメータを利用して判定する場合に比べて、先頭パケットの可能性の判定結果の精度を向上することができる。なお、先頭パケットの可能性があると判定されたにも拘わらず、実際には先頭パケットでない場合もあり得る。この場合、抽出されたＲＰＣコマンドは正しくないため、正しい解析が実行できないことにより、先頭パケットでなかったと判断される。
【０１１８】
以上、図１０から図１４に示す実施形態においても、図１から図９に示す実施形態と同様に、先頭パケットが不明な場合、セッションＳＳＮ毎に、先頭パケットに対応する要素領域のみを残し、他の要素領域に含まれる要素を破棄することができる。先頭パケットに対応する要素領域にはメッセージを含むデータが記憶されているため、リスト領域４２に残した要素領域を使用して、セッションＳＳＮ毎にメッセージを抽出することができる。フラグメント長と連結後のデータのサイズとが一致した時点で、メッセージをリスト領域７から取り出すことができる。全てのパケットを先頭パケットと仮定してデータを連結する処理を実行することで、最初に受信したパケットが先頭パケットでない場合にも、メッセージを取得することができる。
【０１１９】
さらに、図１０から図１４に示す実施形態では、パケット収集部３２Ｂは、先頭パケットの可能性がないパケットに含まれる要素をリストＬＩＳＴに記憶する処理を実行しない。これにより、リスト領域４２に無駄な要素が保持されることを抑止することができ、受信した全てのパケットＰＣＫＴの要素をリスト領域４２に記憶してデータを連結する場合に比べて、リスト領域４２のサイズを削減することができる。これにより、メモリ４０の記憶領域を有効に使用することができる。
【０１２０】
また、所定の範囲の値が格納されるＲＰＣヘッダの情報を利用することで、パケットが先頭パケットの可能性があるか否かを判定することができる。ＲＰＣヘッダの複数のパラメータを利用することで、単一のパラメータを利用して判定する場合に比べて、先頭パケットの可能性の判定結果の精度を向上することができる。
【０１２１】
図１５は、図１に示す情報処理装置３と、図３および図１０に示す解析ノード３０とのハードウェア構成の一例を示す。情報処理装置３と解析ノード３０との構成は、同様であるため、以下では、解析ノード３０の構成が説明される。
【０１２２】
解析ノード３０は、マザーボード２００、光学ドライブ装置３００、ハードディスク装置３２０、入力装置３４０および出力装置３６０等を有する。マザーボード２００には、プロセッサ２１０、主記憶装置２２０、光学ドライブコントローラ２３０、ハードディスクコントローラ２４０、入力インタフェース２５０、出力インタフェース２６０およびネットワークインタフェース２７０等の各種部品が搭載される。例えば、プロセッサ２１０は、ＣＰＵ（Central Processing Unit）またはＧＰＵ（Graphics Processing Unit）等である。
【０１２３】
プロセッサ２１０、主記憶装置２２０、光学ドライブコントローラ２３０、ハードディスクコントローラ２４０、入力インタフェース２５０、出力インタフェース２６０およびネットワークインタフェース２７０は、システムバスＳＢＵＳに接続される。主記憶装置２２０は、図１に示す記憶部６および図３等に示すメモリ４０に対応する。なお、プロセッサ２１０、光学ドライブコントローラ２３０、ハードディスクコントローラ２４０、入力インタフェース２５０、出力インタフェース２６０およびネットワークインタフェース２７０は、共通の半導体チップに含まれてもよい。プロセッサ２１０は、主記憶装置２２０に格納されたプログラム（図３および図１０のプログラム領域４４に格納されたプログラム）を実行することで、解析ノード３０の機能を実現する。
【０１２４】
光学ドライブコントローラ２３０は、光学ドライブ装置３００に接続され、光学ドライブ装置３００に装着される記録媒体３８０にアクセス可能である。記録媒体３８０は、ＣＤ（Compact Disc：登録商標）またはＤＶＤ（Digital Versatile Disc：登録商標）等であり、例えば、プロセッサ２１０が実行するプログラムが格納される。プロセッサ２１０が実行するプログラム等は、光学ドライブ装置３００を介して記録媒体３８０からハードディスク装置３２０にダウンロードされ、主記憶装置２２０に転送される。なお、プロセッサ２１０は、ハードディスク装置３２０を介することなく、記録媒体３８０から主記憶装置２２０にプログラムをダウンロードしてもよい。
【０１２５】
ハードディスクコントローラ２４０は、ハードディスク装置３２０に接続される。例えば、解析ノード３０の電源が起動されたときに、プロセッサ２１０は、ハードディスク装置３２０に格納されているプログラムを主記憶装置２２０に転送し、主記憶装置２２０に転送されたプログラムを実行することで動作する。
【０１２６】
入力インタフェース２５０は、キーボードやマウス等の入力装置３４０に接続される。出力インタフェース２６０は、ディスプレイやプリンタ等の出力装置３６０に接続される。ネットワークインタフェース２７０は、図３および図１０に示すキャプチャノード２０等に接続される。
【０１２７】
以上の図１から図１５に示す実施形態に関し、さらに以下の付記を開示する。
（付記１）
ネットワークを介して通信装置から他の通信装置に送信される複数のパケットのうち、キャプチャされたパケットからメッセージを取り出す情報処理装置において、
セッションに対応させてパケットに含まれる要素を記憶部に記憶し、または、前記セッションに対応する他のパケットに含まれる要素が前記記憶部に記憶されている場合、新たなパケットに含まれる要素を前記記憶部に記憶するとともに前記新たなパケットに含まれる要素のうちのデータを前記記憶部に記憶された前記他のパケットに対応する要素に含まれるデータに連結するパケット収集部と、
キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、セッションに対応させて前記記憶部に記憶された前記複数の要素のいずれかにおいて、前記パケット収集部によるデータの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を前記記憶部から廃棄するメッセージ抽出部と
を備えることを特徴とする情報処理装置。
（付記２）
前記メッセージ抽出部は、データサイズがフラグメント長と一致したデータをメッセージと判定し、判定したメッセージを前記記憶部から取り出した後、前記一致したデータを含む要素を前記記憶部から破棄することを特徴とする付記１に記載の情報処理装置。
（付記３）
前記セッションに対応させて前記記憶部に記憶した要素に対応するパケットが、先頭パケットの可能性があるかを判定する先頭判定部をさらに備え、
前記パケット収集部は、先頭パケットの可能性がないと前記先頭判定部が判定したパケットに含まれる要素を前記記憶部に記憶する処理を実行しないことを特徴とする付記１または付記２に記載の情報処理装置。
（付記４）
フラグメント長を含む先頭パケットのデータペイロードは、メッセージの送受信に使用される複数のパラメータが格納されるヘッダ領域を含み、
前記先頭判定部は、各パケットを先頭パケットと仮定して、前記ヘッダ領域に含まれるパラメータを参照し、参照したパラメータの少なくともいずれかが異常値である要素に対応するパケットを先頭パケットの可能性がないと判定することを特徴とする付記３に記載の情報処理装置。
（付記５）
前記パケット収集部は、前記記憶部に記憶した要素に含まれるデータを他の要素にコピーすることでデータを連結することを特徴とする付記１ないし付記４のいずれか１項に記載の情報処理装置。
（付記６）
前記記憶部に記憶される前記複数の要素の各々は、前記フラグメント長に加えて、前記複数の要素の順序関係を示すパケットポインタと、要素に含まれるデータのサイズを示すカレントフラグメント長と、データの記憶位置を示すデータポインタとを含むことを特徴とする付記１ないし付記５のいずれか１項に記載の情報処理装置。
（付記７）
ネットワークを介して通信装置から他の通信装置に送信される複数のパケットのうち、キャプチャされたパケットからメッセージを取り出す情報処理方法において、
セッションに対応させてパケットに含まれる要素を記憶部に記憶し、または、前記セッションに対応する他のパケットに含まれる要素が前記記憶部に記憶されている場合、新たなパケットに含まれる要素を前記記憶部に記憶するとともに前記新たなパケットに含まれる要素のうちのデータを前記記憶部に記憶された前記他のパケットに対応する要素に含まれるデータに連結し、
キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、セッションに対応させて前記記憶部に記憶された前記複数の要素のいずれかにおいて、データの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を前記記憶部から廃棄することを特徴とする情報処理方法。
（付記８）
ネットワークを介して通信装置から他の通信装置に送信される複数のパケットのうち、キャプチャされたパケットからメッセージを取り出す情報処理装置に、
セッションに対応させてパケットに含まれる要素を記憶部に記憶し、または、前記セッションに対応する他のパケットに含まれる要素が前記記憶部に記憶されている場合、新たなパケットに含まれる要素を前記記憶部に記憶するとともに前記新たなパケットに含まれる要素のうちのデータを前記記憶部に記憶された前記他のパケットに対応する要素に含まれるデータに連結し、
キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、セッションに対応させて前記記憶部に記憶された前記複数の要素のいずれかにおいて、データの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を前記記憶部から廃棄する
処理を実行させることを特徴とするプログラム。
（付記９）
ネットワークを介して通信装置から他の通信装置に送信される複数のパケットのうち、キャプチャされたパケットからメッセージを取り出す情報処理装置に、
セッションに対応させてパケットに含まれる要素を記憶部に記憶し、または、前記セッションに対応する他のパケットに含まれる要素が前記記憶部に記憶されている場合、新たなパケットに含まれる要素を前記記憶部に記憶するとともに前記新たなパケットに含まれる要素のうちのデータを前記記憶部に記憶された前記他のパケットに対応する要素に含まれるデータに連結し、
キャプチャされたパケットの各々を、フラグメント長を含む先頭パケットと仮定して、セッションに対応させて前記記憶部に記憶された前記複数の要素のいずれかにおいて、データの連結後のデータサイズがフラグメント長と一致する場合、一致した要素以外の要素を前記記憶部から廃棄する
処理を実行させるプログラムを記録したことを特徴とする記録媒体。
【０１２８】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１２９】
１（１ａ、１ｂ、１ｃ）…通信装置；２…キャプチャ装置；３…情報処理装置；４…パケット収集部；５…メッセージ抽出部；６…記憶部；７…リスト領域；８…プログラム領域；１０（１０ａ、１０ｂ、１０ｃ）…端末装置；１２…ネットワークスイッチ；１２ａ、１２ｂ、１２ｃ…ポート；１４（１４ａ、１４ｂ）…サーバノード；１６…タップ；２０…キャプチャノード；２２…キャプチャ制御部；２４…パケットバッファ；２６…パケット検索部；３０…解析ノード；３２、３２Ｂ…パケット収集部；３４…メッセージ抽出部；３６Ｂ…先頭判定部；４０…メモリ；４２…リスト領域；４４…プログラム領域；５０…ストレージ装置；１００、１００Ａ、１００Ｂ…情報処理システム；Ａ（Ａ１、Ａ２、Ａ３、Ａ４、Ａ５）…パケット；Ｂ（Ｂ１、Ｂ２、Ｂ３）…パケット；ＮＷ…ネットワーク；ＲＥＱ…取得要求；ＲＥＳ…応答；ＳＳＮ（ＳＳＮ−Ａ、ＳＳＮ−Ｂ）…セッション；ＴＰ…伝送路
【図１】
2019092029.tif 000003
【図２】
2019092029.tif 000004
【図３】
2019092029.tif 000005
【図４】
2019092029.tif 000006
【図５】
2019092029.tif 000007
【図６】
2019092029.tif 000008
【図７】
2019092029.tif 000009
【図８】
2019092029.tif 000010
【図９】
2019092029.tif 000011
【図１０】
2019092029.tif 000012
【図１１】
2019092029.tif 000013
【図１２】
2019092029.tif 000014
【図１３】
2019092029.tif 000015
【図１４】
2019092029.tif 000016
【図１５】
2019092029.tif 000017