(57)【要約】【課題】メッセージ単位でのパケットの検出精度を向上させる技術を提供する。【解決手段】コンピュータが、通信装置間を伝送されるパケットのキャプチャデータに基づいて、同一コネクション内で伝送されるパケット群を抽出し、抽出したパケット群に含まれる各パケットのキャプチャタイミングの時間差に基づいて、同一コネクション内で伝送された、第１の先頭パケット候補と第２の先頭パケット候補とを特定し、第１の先頭パケット候補を含み、第１の先頭パケット候補のキャプチャ後第２の先頭パケット候補のキャプチャ前にキャプチャしたパケット群のパケット長からメッセージ長を算出し、算出した該メッセージ長に基づいて、第１の先頭パケット候補からパケット群で形成されるメッセージのメッセージ長が格納されている位置を推定し、推定した位置に格納されたメッセージ長に応じて、抽出したパケット群で形成されるメッセージを検出することにより、上記課題の解決を図る。【選択図】図６
2016096416.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
通信装置間を伝送されるパケットのキャプチャデータに基づいて、送信元アドレス又は送信先アドレスが同じであって、同一コネクション内で伝送されるパケット群を抽出し、
抽出した前記パケット群に含まれる各パケットのキャプチャタイミングの時間差に基づいて、同一コネクション内で伝送された、第１の先頭パケット候補と第２の先頭パケット候補とを特定し、
前記第１の先頭パケット候補を含み、前記第１の先頭パケット候補のキャプチャ後前記第２の先頭パケット候補のキャプチャ前にキャプチャしたパケット群のパケット長からメッセージ長を算出し、算出した該メッセージ長に基づいて、前記第１の先頭パケット候補から、該パケット群で形成されるメッセージのメッセージ長が格納されている位置を推定し、
推定した前記位置に格納された該メッセージ長に応じて、前記抽出したパケット群で形成される前記メッセージを検出する、
処理を実行することを特徴とするパケット解析プログラム。
【請求項２】
前記位置を推定する場合、メッセージ毎に、前記第１の先頭パケット候補から前記メッセージ長と同じ値が格納されている位置を検索して、該位置毎に、該位置が検出された回数を計測し、計測回数が最も多い位置を、該パケット群で形成されるメッセージのメッセージ長が格納されている位置を推定する
ことを特徴とする請求項１に記載のパケット解析プログラム。
【請求項３】
前記メッセージを検出する場合、推定された前記位置に基づいて、受信したパケットからメッセージ長を取得し、順次受信したパケットを保持し、保持した該パケットのパケット長の累計が該メッセージ長に達した場合、該保持したパケット群が１メッセージであると判定する
ことを特徴とする請求項１または２に記載のパケット解析プログラム。
【請求項４】
前記コンピュータに、さらに、
前記位置が推定された場合、通信プロトコルとメッセージの格納位置とが関係付けられた情報から、推定された前記位置に対応する通信プロトコルを取得し、前記メッセージのコネクションに対応する通信プロトコルが、取得した該通信プロトコルであると特定する
処理を実行させ、
前記メッセージの検出において、パケットを受信し、受信した該パケットのコネクション情報の通信プロトコルが特定されている場合、推定された前記位置に基づいて、受信したパケットからメッセージ長を取得し、順次受信したパケットを保持し、保持した該パケットのパケット長の累計が該メッセージ長に達した場合、該保持したパケット群が１メッセージであると判定する
ことを特徴とする請求項１または２に記載のパケット解析プログラム。
【請求項５】
コンピュータが、
通信装置間を伝送されるパケットのキャプチャデータに基づいて、送信元アドレス又は送信先アドレスが同じであって、同一コネクション内で伝送されるパケット群を抽出し、
抽出した前記パケット群に含まれる各パケットのキャプチャタイミングの時間差に基づいて、同一コネクション内で伝送された、第１の先頭パケット候補と第２の先頭パケット候補とを特定し、
前記第１の先頭パケット候補を含み、前記第１の先頭パケット候補のキャプチャ後前記第２の先頭パケット候補のキャプチャ前にキャプチャしたパケット群のパケット長からメッセージ長を算出し、算出した該メッセージ長に基づいて、前記第１の先頭パケット候補から、該パケット群で形成されるメッセージのメッセージ長が格納されている位置を推定し、
推定した前記位置に格納された該メッセージ長に応じて、前記抽出したパケット群で形成される前記メッセージを検出する、
処理を実行することを特徴とするパケット解析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、ネットワーク上で伝達されるパケットについての解析処理技術に関する。
【背景技術】
【０００２】
情報システムを構築する情報処理装置同士を接続する通信ネットワークを流れる通信パケットを取り込み、通信パケットからシステムの状態を分析する分析装置がある。分析装置は、受信したパケットからメッセージを再構成し、再構成したメッセージの内容（例えば、リクエスト、レスポンス、命令等）を解析することができる。さらに、分析装置は、スイッチ装置のミラーリング機能を用いて、サーバ間の通信パケットを受信し、受信した通信パケットを解析することで、システム状態を監視することができる。
【０００３】
このように、ネットワークに流れるパケットをキャプチャして、蓄積したパケットが解析などに利用されている。このようなキャプチャしたパケットに対する処理として、例えば、以下の技術がある。
【０００４】
第１の技術として、次の技術がある（例えば、特許文献１）。解析処理装置は、所定の処理部に、コンピュータ間で送受されるパケットを受信し、受信した前記パケットの受信間隔を計測する。解析処理装置は、計測した受信間隔に応じて、１組の、メッセージの先頭に対応するセグメントを含むパケットと２番目以降に対応するセグメントを含むパケットとを検出する。解析処理装置は、検出したパケットを、組単位で各複数の処理部のいずれかに振り分け、パケットを振り分けられた処理部に、メッセージ単位で振り分けられたパケットに基づいて、メッセージの解析処理を実行させる。
【０００５】
第２の技術として、次の技術がある（例えば、特許文献２）。受信した電話サービスで通信されるリアルタイム情報をＲＴＰパケットによってＩＰ網へ送信するユーザボックス１と、ＩＰ網に接続され且つＲＴＰパケットをモニタすることができるパケット情報識別装置２とを有する。ユーザボックスは、通信先の他のユーザボックスから受信しているＩＰストリームの通信セッションについてパケットを連続的にキャプチャし、該ＩＰストリーム単位で、ＲＴＰパケットのヘッダ情報におけるアプリケーション識別情報を取得する。ユーザボックスは、これに基づいて、ユーザボックス内のＲＴＰパケット組立部のジッタバッファサイズ及びバッファ制御アルゴリズムを変更させる手段を有する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−１０００１２号公報
【特許文献２】特開２００４−３５６９８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
第１の技術では、同一メッセージを形成するパケット間と、異なるメッセージ間とで、パケット送信間隔が異なるという性質を利用してメッセージ単位でパケットを振り分けている。これについて、図１を用いて説明する。
【０００８】
図１は、通信パケットの送信間隔について説明するための図である。パケットの送信間隔には、同一のメッセージ内のパケット送信間隔と、異なるメッセージ間のパケット送信間隔の２種類が存在する。異なるメッセージ間のパケット送信間隔よりも、同一のメッセージ内のパケット送信間隔の方が短い。その理由は、次のことに起因する。すなわち、サーバのメッセージ送信処理に関連し、サーバアプリケーションプログラムは、オペレーティングシステム（ＯＳ）のカーネルに対して、メッセージ単位に送信要求を行う。そのため、カーネル内でパケットに分割された同一のメッセージ内のパケット送信間隔は短くなる。一方、サーバアプリケーションプログラムで分割された２つの異なるメッセージの送信要求は、別々にシーケンシャルにカーネルに対して行われるので、異なるメッセージ間のパケット送信間隔が長くなる。
【０００９】
ところで、情報システムやアプリケーションプログラム等の性能の向上やパケット送信手順の変更等によりメッセージ送信処理の高速化が期待される。そのような観点から、メッセージ送信処理の環境によっては、同一メッセージ内のパケット送信と、異なるメッセージ間でのパケット送信とで、それらの送信間隔のタイムラグが小さくなる可能性がある。その結果、同一コネクション内のパケット送信間隔に応じて、各メッセージを精度よく特定することができなくなってしまうおそれがある。これについて、図２を用いて説明する。
【００１０】
図２は、パケット送信間隔の重なる場合の送信間隔に対するパケット数の分布を示す。パケットの送信間隔から各メッセージを形成するパケットを特定し、パケット長の合計からメッセージ長を求める場合、次が行われる。すなわち、同一メッセージ内のパケット送信間隔の分布と、異なるメッセージ間のパケット送信間隔の分布とから、いずれの分布に属するパケットであるかを判定するためのパケット送信間隔についての閾値が決定される。２つの分布の関係は、その分布の分散の大きさによって、分布の一部が重なる場合と重ならない場合の２通りが存在する。分布の一部が重なる場合は、２つのグループの分布が交差するパケット送信間隔を閾値Ｔとする。
【００１１】
ところが、異なるメッセージ間のパケット送信間隔が閾値Ｔより小さい場合、または同一メッセージ内のパケット送信間隔が閾値Ｔより大きい場合、いずれの分布に属するパケットであるかを正確に判定することができない。
【００１２】
一方、メッセージの先頭パケットの所定の位置にメッセージ長を示す情報が含まれているが、所定の位置がわからない場合には、メッセージ単位でのパケット群を正確に判定することができない。
【００１３】
本発明は、一側面として、メッセージ単位でのパケットの検出精度を向上させる技術を提供する。
【課題を解決するための手段】
【００１４】
本発明の一側面に係るパケット解析プログラムは、コンピュータに、次の処理を実行させる。すなわち、コンピュータは、通信装置間を伝送されるパケットのキャプチャデータに基づいて、送信元アドレス又は送信先アドレスが同じであって、同一コネクション内で伝送されるパケット群を抽出する。コンピュータは、抽出したパケット群に含まれる各パケットのキャプチャタイミングの時間差に基づいて、同一コネクション内で伝送された、第１の先頭パケット候補と第２の先頭パケット候補とを特定する。コンピュータは、キャプチャしたパケット群のパケット長からメッセージ長を算出する。コンピュータは、算出した該メッセージ長に基づいて、第１の先頭パケット候補から、パケット群で形成されるメッセージのメッセージ長が格納されている位置を推定する。ここで、キャプチャしたパケット群は、第１の先頭パケット候補を含み、第１の先頭パケット候補のキャプチャ後第２の先頭パケット候補のキャプチャ前にキャプチャされたパケット群である。コンピュータは、推定した前記位置に格納された該メッセージ長に応じて、抽出したパケット群で形成されるメッセージを検出する。
【発明の効果】
【００１５】
本明細書に記載の技術によれば、メッセージ単位でのパケットの検出精度を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】通信パケットの送信間隔について説明するための図である。
【図２】パケット送信間隔の重なる場合の送信間隔に対するパケット数の分布を示す。
【図３】パケット内のメッセージ長の格納位置を説明するための図である。
【図４】プロトコル種別毎の、メッセージ内のメッセージ長の格納位置を説明するための図である。
【図５】メッセージ長と同じ値が複数格納されているメッセージについて説明するための図である。
【図６】本実施形態における分析装置のブロック図を示す。
【図７】本実施形態における情報システムと分析装置とを示す。
【図８】本実施形態における分析装置の処理シーケンスを示す。
【図９】本実施形態における分析装置のハードウェア構成図を示す。
【図１０】本実施形態におけるコネクション情報テーブルの一例を示す。
【図１１】本実施形態におけるパケット管理テーブルの一例を示す。
【図１２】本実施形態におけるメッセージ位置定義テーブルの一例を示す。
【図１３】本実施形態における振り分けテーブルの一例を示す。
【図１４】本実施形態における格納位置検出頻度テーブルの一例を示す。
【図１５】パケットのデータ構造を示す。
【図１６】ＩＰヘッダの構造を示す。
【図１７】ＴＰＣヘッダの構造を示す。
【図１８】ＴＰＣコネクションのシーケンスの一例を示す。
【図１９】本実施形態におけるメッセージ単位でのパケットの振り分けシーケンスの詳細（その１）を示す。
【図２０】本実施形態におけるメッセージ単位でのパケットの振り分けシーケンスの詳細（その２）を示す。
【図２１】本実施形態における直前メッセージのプロトコル登録・振り分け処理（Ｓ３１）のフローを示す。
【図２２】本実施形態におけるプロトコルが登録されているパケットの振り分け処理処理（Ｓ３０）のフローを示す。
【発明を実施するための形態】
【００１７】
分析装置は、通信パケットを受信してシステム状態の解析をする時に、受信したパケットからコネクション情報（接続先ＩＰアドレス、接続先ポート番号、接続元ＩＰアドレス、接続元ポート番号）を収集する。それから、分析装置１は、コネクション単位で、パケットの送信間隔を監視することで、１メッセージを形成するパケット群をまとめ、パケット群をメッセージとして検出し、メッセージ解析処理を実行する。このとき、上述したように、パケットの送信間隔のみでは、パケットの区分けの精度に問題がある。
【００１８】
そこで、本実施形態では、パケットの送信間隔に加えて、さらにメッセージ長を用いてパケットの区分けの精度を向上させる。メッセージ長は、それぞれのメッセージが自身のメッセージを保持している。これについて、図３を用いて説明する。
【００１９】
図３は、パケット内のメッセージ長の格納位置を説明するための図である。メッセージ長は、メッセージを形成する１以上のパケットのいずれかに格納されており、先頭パケットに格納されていることが多い。なお、以下では、同一のメッセージの先頭のパケットから最後尾のパケットまでを、同一メッセージを形成するパケットの範囲と称する場合もある。
【００２０】
１つのメッセージが１つまたは複数のパケットでされている。そこで、分析装置により、キャプチャしたパケット内にあるメッセージ長を読み出し、読み出したメッセージ長になるまでキャプチャしたパケットの結合を行い、１つのメッセージを生成することが考えられる。
【００２１】
ところが、メッセージ長の格納位置は、図４および図５で説明するように、容易に特定することができない。
【００２２】
メッセージ長の格納位置は、図４で説明するように、通信プロトコルに応じて異なっている。そのため、その受信したパケットで使用している通信プロトコルが判別できない場合にはメッセージ長の格納位置を特定することができない。
【００２３】
図４は、プロトコル種別毎の、メッセージ内のメッセージ長の格納位置を説明するための図である。図４（Ａ）は、メッセージ長の格納位置が、パケットを結合させて形成したメッセージの先頭から１７ｂｙｔｅ目、格納領域のサイズが８ｂｙｔｅであるプロトコル１のメッセージの例を示す。図４（Ｂ）は、メッセージ長の格納位置が、パケットを結合させて形成したメッセージの先頭から５ｂｙｔｅ目、格納領域のサイズが４ｂｙｔｅであるプロトコル２のメッセージの例を示す。
【００２４】
図４（Ａ）、図４（Ｂ）に示すように、メッセージ長の格納位置は、通信プロトコルに応じて異なっている。そのため、その受信したパケットで使用している通信プロトコルが判別できない場合にはメッセージ長の格納位置を特定することができない。
【００２５】
そこで、パケットの送信間隔を用いて抽出された１組のメッセージを形成するパケット群のメッセージ長を計測し、メッセージ全体からそのメッセージ長を検索することで、そのメッセージ長の格納位置を取得ことができる。そして、それ以降キャプチャしたパケットについては、取得されたメッセージ長の格納位置に基づいてメッセージ長を取得し、そのメッセージ長を用いて１メッセージを抽出することにより、各メッセージを検出することができると考えられる。
【００２６】
一方、図５に示すように、メッセージには、メッセージ長と同じ値が複数格納されている場合もあり、プロトコルが不明であれば、どの位置に格納されている値がメッセージ長を示すのかが判定することができない。
【００２７】
そこで、本実施形態における分析装置は、パケットの送信間隔から１メッセージを形成すると推定されるパケット群を取得し、そのパケット群のメッセージ長を計測し、さらに以下を行う。すなわち、分析装置は、各メッセージについて、そのメッセージ長と同じ値が格納されている位置毎に検出回数を計測し、その検出回数の頻度が高い位置がメッセージ長の格納位置（推定格納位置）であると推定する。分析装置は、順次受信したパケットが推定格納位置から取得したメッセージ長になるまで、受信したパケットをバッファに蓄える。バッファに蓄えたパケット群のパケット長の累計が推定格納位置から取得したメッセージ長に達した場合、分析装置は、バッファに蓄えたパケット群を１メッセージとして、メッセージ解析処理に振り分ける。
【００２８】
図６は、本実施形態における分析装置のブロック図を示す。分析装置１は、パケット抽出部２、先頭パケット候補特定部３、位置推定部４、メッセージ検出部５を含む。
【００２９】
パケット抽出部２は、通信装置間を伝送されるパケットのキャプチャデータに基づいて、送信元アドレス又は送信先アドレスが同じであって、同一コネクション内で伝送されるパケット群を抽出する。パケット抽出部２の一例として、図１９のＳ１５またはＳ１９の処理を行うＣＰＵ０が挙げられる。
【００３０】
先頭パケット候補特定部３は、抽出したパケット群に含まれる各パケットのキャプチャタイミングの時間差に基づいて、同一コネクション内で伝送された、第１の先頭パケット候補と第２の先頭パケット候補とを特定する。先頭パケット候補特定部３の一例として、図２０のＳ２４〜Ｓ２５の処理を行うＣＰＵ０が挙げられる。
【００３１】
位置推定部４は、キャプチャしたパケット群のパケット長からメッセージ長を算出する。位置推定部４は、算出した該メッセージ長に基づいて、第１の先頭パケット候補から、パケット群で形成されるメッセージのメッセージ長が格納されている位置を推定する。ここで、キャプチャしたパケット群とは、第１の先頭パケット候補を含み、第１の先頭パケット候補のキャプチャ後第２の先頭パケット候補のキャプチャ前にキャプチャされたパケット群である。位置推定部４の一例として、図２１のＳ４１〜Ｓ４６の処理を行うＣＰＵ０が挙げられる。
【００３２】
メッセージ検出部５は、推定した位置に格納されたメッセージ長に応じて、抽出したパケット群で形成されるメッセージを検出する。メッセージ検出部５の一例として、図２２のＳ６５の処理を行うＣＰＵ０が挙げられる。
【００３３】
このように構成することにより、メッセージ単位でのパケットの検出精度を向上させることができる。
【００３４】
位置推定部４は、メッセージ毎に、第１の先頭パケット候補を含むパケット群からメッセージ長と同じ値が格納されている位置を検索して、位置毎に、位置が検出された回数を計測する。位置推定部４は、計測回数が最も多い位置を、パケット群で形成されるメッセージのメッセージ長が格納されている位置を推定する。
【００３５】
このように構成することにより、受信したパケット群から、メッセージ長が格納されている位置を推定することができる。
【００３６】
メッセージ検出部５は、推定された位置に基づいて、受信したパケットからメッセージ長を取得し、順次受信したパケットを保持する。保持したパケットのパケット長の累計がメッセージ長に達した場合、メッセージ検出部５は、保持したパケット群が１メッセージであると判定する。
【００３７】
このように構成することにより、１メッセージを精度よく検出することができる。
分析装置１は、さらにプロトコル特定部６を含む。プロトコル特定部６は、位置が推定された場合、通信プロトコルとメッセージの格納位置とが関係付けられた情報から、推定された位置に対応する通信プロトコルを取得する。プロトコル特定部６は、メッセージのコネクションに対応する通信プロトコルが、取得した通信プロトコルであると特定する。
【００３８】
この場合、メッセージ検出部５は、パケットを受信し、受信した該パケットのコネクション情報の通信プロトコルが特定されている場合、推定された前記位置に基づいて、受信したパケットからメッセージ長を取得し、順次受信したパケットを保持する。メッセージ検出部５は、保持したパケットのパケット長の累計がメッセージ長に達した場合、保持したパケット群が１メッセージであると判定する。
【００３９】
このように構成することにより、受信した該パケットのコネクション情報の通信プロトコルが特定されている場合、メッセージ間隔では無くメッセージ長を用いて、受信したパケットから１メッセージを特定することができる。
【００４０】
以下に、本発明を実施するための実施例について詳細に説明する。
図７は、本実施形態における情報システムと分析装置とを示す。情報システム１２は、複数のコンピュータ１３（１３ａ，１３ｂ，１３ｃ，・・・）、スイッチ装置（ＳＷ）１４を含む。
【００４１】
分析装置１１は、コンピュータ１３（１３ａ，１３ｂ，１３ｃ，・・・）が互いにやり取りするパケットをＳＷ１４のミラーリング機能を用いて受信し、受信したパケットに基づいてそのコンピュータの稼動状況を監視及び分析を行う。すなわち、分析装置１１は、受信したパケットからメッセージを再構成し、リクエストを示すメッセージとレスポンスを示すメッセージとを監視する。これにより、分析装置１１は、通信しているコンピュータ同士の稼動状態、通信状態等を監視・分析することができる。
【００４２】
ＳＷ１４は、例えば、Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）  Ｓｗｉｔｃｈ（ＳＷ）等のパケット伝送路のスイッチングを行う中継機器である。ＳＷ１４には、コンピュータ１３ａ，１３ｂ，１３ｃ，・・・等が接続されている。
【００４３】
ＳＷ１４は、コンピュータ１３又は不図示の中継機器とパケットの送受信を行うことができる。ＳＷ１４は、複数の通信ポートを備えている。ＳＷ１４は、１つの通信ポートからパケットが進入してくると、そのパケットの送り出し先として適切な通信ポートを選択し、選択した通信ポートからそのパケットを送出する。本実施形態では、これらの通信ポートには、それぞれ、コンピュータ１３（１３ａ，１３ｂ，１３ｃ，・・・）が接続されている。ＳＷ１４は、ポートミラーリング機能を実現するための回路を内蔵している。ポートミラーリング機能は、特定の通信ポートを通過するパケットを複製し、複製したパケットをミラーポートから送出するための機能である。本実施形態では、ＳＷ１４は、１個のミラーポートを備える。ポートミラーリング機能は、２個以上の通信ポートから進入してくる全てのパケットを複製し、複製したパケットをミラーポートから出力する。本実施形態では、ＳＷ１４のミラーポートには、分析装置１１が接続されている。なお、複製元のパケット（オリジナルのパケット）は、適切な通信ポートから送出される。
【００４４】
図８は、本実施形態における分析装置の処理シーケンスを示す。分析装置１１は、ＳＷ１４から転送されたコンピュータ１３間の通信パケットを、ネットワークインターフェースカード（ＮＩＣ）２６を介して受信する（Ｓ１）。
【００４５】
分析装置１１は、受信したパケットのヘッダ情報（ＩＰヘッダ及びＴＣＰヘッダ）からコネクション情報（接続先ＩＰアドレス、接続先ポート番号、接続元ＩＰアドレス、接続元ポート番号）を取得し、コネクション情報の解析処理を行う。コネクション情報の解析処理では、分析装置１１は、取得したコネクション情報に基づいて、そのパケットに対応するコネクションを識別し、コネクションの接続方向を識別し、パケットの送信方向を識別する（Ｓ２）。ここで、クライアントからサーバへコネクション確立が要求される場合、接続先ＩＰアドレスと接続先ポート番号を用いて接続されるため、プロトコル種別は接続先ＩＰアドレスと接続先ポート番号の組み合わせにより決定される。
【００４６】
次に、分析装置１１は、受信したパケットの送信間隔に基づいて、１メッセージを形成するパケット群を検出し、その検出したパケット群のパケット長の合計をメッセージ長として算出する（Ｓ３）。なお、本実施形態では、分析装置１１における受信間隔を、パケットの送信間隔として検出することとする。
【００４７】
分析装置１１は、Ｓ３で得られたメッセージ長を用いて、その検出したパケット群で形成されるメッセージから、メッセージ長が格納されている位置を推定する（Ｓ４）。ここでは、分析装置１１は、その検出したパケット群で形成されるメッセージ単位で、Ｓ３で得られたメッセージ長の値と同じ値が格納されている位置を検索し、その位置毎にその検出数を計測する。分析装置１１は、所定メッセージ数分、Ｓ１〜Ｓ４の処理を行い、メッセージ長が示す値と同じ値が格納されていることが検出された回数の最も多い位置をメッセージ長が格納されている位置（推定格納位置）であると推定する。
【００４８】
分析装置１１は、プロトコル種別毎のメッセージ長の格納位置情報を記録したデータ（メッセージ位置定義テーブル）から、推定格納位置に対応するプロトコル種別を取得する。
【００４９】
分析装置１１は、接続先ＩＰアドレスおよび接続先ポート番号と、取得したプロトコル種別とを関係付けて、プロトコル毎にメッセージ解析処理に振り分けるための振り分けテーブルに登録する。
【００５０】
その後、接続先ＩＰアドレスおよび接続先ポート番号が振り分けテーブルに登録されているパケットを受信した場合、すなわち、振り分けテーブルに、受信したパケットで用いられているプロトコルが登録されている場合、分析装置１１は、以下の処理を行う。すなわち、分析装置１１は、メッセージ間隔では無くメッセージ長を用いて、受信したパケットから１メッセージを特定する。
【００５１】
この場合、分析装置１１は、受信したパケットをバッファに格納する。分析装置１１は、振り分けテーブルから、接続先ＩＰアドレスおよび接続先ポート番号の組み合わせに対応するプロトコル種別を特定する。さらに、分析装置１１は、メッセージ位置定義テーブルから、その特定したプロトコル種別に対応するメッセージ長の格納位置を取得する。
【００５２】
分析装置１１は、取得したメッセージ長の格納位置に基づいて、受信したパケットからメッセージ長を取得する。分析装置１１は、バッファに格納したパケットのパケット長の合計がその取得したメッセージ長に達するまで、受信したパケットをバッファに保持する。
【００５３】
バッファに格納したパケットのパケット長の合計がその取得したメッセージ長に達した場合、分析装置１１は、バッファに保持しているパケット群を１メッセージとして、特定したプロトコルに対応するメッセージ解析処理に振り分ける（Ｓ５）。分析装置１１は、プロトコル毎に振り分けたメッセージを、解析処理する（Ｓ６−１〜Ｓ６−４）。
【００５４】
図９は、本実施形態における分析装置のハードウェア構成図を示す。分析装置１１は、例えば、マルチプロセッサ２０、メモリ２１、記憶装置２２、リーダ／ライタ２３、出力Ｉ／Ｆ２４、入力Ｉ／Ｆ２５、ＮＩＣ２６、ＲＡＭ２７、ＲＯＭ２８、バス２９等を含むコンピュータである。ＲＯＭは、リードオンリメモリを示す。ＲＡＭは、ランダムアクセスメモリを示す。Ｉ／Ｆは、インターフェースを示す。マルチプロセッサ２０、メモリ２１、記憶装置２２、リーダ／ライタ２３、出力Ｉ／Ｆ２４、入力Ｉ／Ｆ２５、ＮＩＣ２６、ＲＡＭ２７、ＲＯＭ２８等は、バス２９で接続されている。
【００５５】
マルチプロセッサ２０は、ＣＰＵ０（２０ａ），ＣＰＵ１（２０ｂ），ＣＰＵ２（２０ｃ）を含む。なお、本実施形態のマルチプロセッサは、３つのＣＰＵを含むが、これに限定されず、２以上のＣＰＵを含んでいればよい。ＣＰＵ０（２０ａ），ＣＰＵ１（２０ｂ），ＣＰＵ２（２０ｃ）は、時刻を計測するタイマー機能または時間を計測するカウンタ機能を含んでもよい。また、分析装置１１は、ＣＰＵ０（２０ａ），ＣＰＵ１（２０ｂ），ＣＰＵ２（２０ｃ）とは別に、時計回路を有していてもよい。この場合、各ＣＰＵは、時計回路より得られた時刻情報またはカウント情報を取得するようにしてもよい。
【００５６】
メモリ２１は、バッファ２１ａを含む。バッファ２１ａは、例えば、各ＣＰＵが使用するバッファがある。
【００５７】
記憶装置２２には、オペレーティングシステム（ＯＳ）４２、分析アプリケーションプログラム４１が格納されている。さらに、記憶装置２２には、コネクション情報テーブル４３、パケット管理テーブル４４、メッセージ位置定義テープル４５、振り分けテーブル４６、格納位置検出頻度テーブル４７、閾値情報４８等が格納されている。分析装置１１の起動時に、マルチプロセッサ２０は、記憶装置２２からＯＳ４２と分析アプリケーション４１を読み出して、メモリ２１に展開し、各プログラムを実行する。なお、記憶装置２２としては、ハードディスク、フラッシュメモリ装置など様々な形式の記憶装置を使用することができる。分析アプリケーションプログラム４１は、本実施形態に係るパケット解析プログラムを含む。閾値情報４８には、本実施形態で用いる閾値が格納されている。
【００５８】
ＮＩＣ２６は、ＳＷ１４のミラーポートと接続されている。ＳＷ１４のミラーリング機能により、監視対象のコンピュータ１３間の通信によるパケットがＳＷ１４からＮＩＣ２６へ送信される。ＮＩＣ２６に到達したパケットは、ＮＩＣ２６のプロミスキャスモードを用いて、オペレーティングシステム４２を経由して分析アプリケーション４１に到達し、分析アプリケーション４１に取り込まれる。ここで、プロミスキャスモードとは、宛先が自分宛でないパケットも受信するモードをいう。
【００５９】
リーダ／ライタ２３は、可搬型記録媒体から情報を読み出したり、可搬型記録媒体に情報を書き込む装置である。出力機器３０は、出力Ｉ／Ｆ２４に接続されている。入力機器３１は、入力Ｉ／Ｆ２５に接続にされている。
【００６０】
分析アプリケーション４１は、プログラム提供者側から、通信ネットワーク、およびＮＩＣ１６を介して、例えば記憶装置２２に格納してもよい。また、分析アプリケーション４１は、市販され、流通している可搬型記憶媒体に格納されていてもよい。この場合、この可搬型記憶媒体はリーダ／ライタ２３にセットされて、マルチプロセッサ２０によってそのプログラムが読み出されて、実行されてもよい。可搬型記憶媒体としてはＣＤ−ＲＯＭ、フレキシブルディスク、光ディスク、光磁気ディスク、ＩＣカード、ＵＳＢメモリ装置、ＤＶＤなど様々な形式の記憶媒体を使用することができる。
【００６１】
また、入力機器３１には、キーボード、マウス、電子カメラ、ウェブカメラ、マイク、スキャナ、センサ、タブレットなどを用いることが可能である。また、出力機器３０には、ディスプレイ、プリンタ、スピーカなどを用いることが可能である。また、ネットワークは、インターネット、ＬＡＮ、ＷＡＮ、専用線、有線、無線等の通信網であってよい。
【００６２】
図１０は、本実施形態におけるコネクション情報テーブルの一例を示す。コネクション情報テーブル４３は、「接続先ＩＰアドレス」４３ａ、「接続先ポート番号」４３ｂ、「接続元ＩＰアドレス」４３ｃ、「接続元ポート番号」４３ｄのデータ項目を含む。
【００６３】
「接続先ＩＰアドレス」４３ａには、接続先のＩＰアドレスが格納される。「接続先ポート番号」４３ｂには、接続先のポート番号が格納される。「接続元ＩＰアドレス」４３ｃには、接続元のＩＰアドレスが格納される。「接続元ポート番号」４３ｄには、接続元のポート番号が格納される。ここで、「接続元」とは、コネクションを確立する際に、接続を要求した側をいう。「接続先」とは、コネクションを確立する際に、接続を要求された側をいう。なお、「接続元」、「接続先」については後述する。
【００６４】
以下では、「接続先ＩＰアドレス」、「接続先ポート番号」、「接続元ＩＰアドレス」、「接続元ポート番号」を含む1組の情報をコネクション情報という。
【００６５】
図１１は、本実施形態におけるパケット管理テーブルの一例を示す。パケット管理テーブル４４は、「接続先ＩＰアドレス」４４ａ、「接続先ポート番号」４４ｂ、「接続元ＩＰアドレス」４４ｃ、「接続元ポート番号」４４ｄ、「上りパケット到着時刻」４４ｅ、「下りパケット到着時刻」４４ｆのデータ項目を含む。パケット管理テーブル４４は、さらに、「上りパケット長の累計」４４ｇ、「下りパケット長の累計」４４ｈのデータ項目を含む。
【００６６】
「接続先ＩＰアドレス」４４ａには、接続先のＩＰアドレスが格納される。「接続先ポート番号」４４ｂには、接続先のポート番号が格納される。「接続元ＩＰアドレス」４４ｃには、接続元のＩＰアドレスが格納される。「接続元ポート番号」４４ｄには、接続元のポート番号が格納される。「上りパケット到着時刻」４４ｅには、コネクションの方向が上がり方向のパケットの到着時刻（受信時刻）が格納される。「下りパケット到着時刻」４４ｆｅには、コネクションの方向が下り方向のパケットの到着時刻（受信時刻）が格納される。「上りパケット長の累計」４４ｇには、コネクションの方向が上がり方向のパケットのパケット長の累計が格納される。「下りパケット長の累計」４４ｈには、コネクションの方向が下り方向のパケットのパケット長の累計が格納される。
【００６７】
図１２は、本実施形態におけるメッセージ位置定義テーブルの一例を示す。メッセージ位置定義テーブル４５は、「プロトコル名」４５ａ、「メッセージ長の格納位置」４５ｂ、「メッセージ長」４５ｃのデータ項目を含む。「プロトコル名」４５ａは、通信プロトコルの名称が格納される。「メッセージ長の格納位置」４５ｂには、その通信プロトコルの場合、メッセージ長がパケットの先頭から何バイト目に格納されているかが格納される。「メッセージ長」４５ｃには、その通信プロトコルのメッセージ長が格納される。
【００６８】
図１３は、本実施形態における振り分けテーブルの一例を示す。振り分けテーブル４６は、「プロトコル名」４６ａ、「接続先ＩＰアドレス」４６ｂ、「接続先ポート番号」４６ｃのデータ項目を含む。
【００６９】
「接続先ＩＰアドレス」４６ｂには、接続先のＩＰアドレスが格納される。「接続先ポート番号」４６ｃには、接続先のポート番号が格納される。「プロトコル名」４６ａには、「接続先ＩＰアドレス」４６ｂ及び「接続先ポート番号」４６ｃで特定されるコネクションで使用されている通信プロトコルの名称が格納される。
【００７０】
図１４は、本実施形態における格納位置検出頻度テーブルの一例を示す。格納位置検出頻度テーブル４７は、「接続先ＩＰアドレス」４７ａ、「接続先ポート番号」４７ｂ、同一コネクションのパケットの検出結果（４７ｃ〜４７ｋ）、「総数」４７ｌのデータ項目を含む。同一コネクションのパケットの検出結果とは、１番目位置からｎ番目位置までの各パケット検索結果、得られる「先頭から（その位置までの）バイト数」、「長さ」、「（その位置の）検出回数」である。
【００７１】
「先頭から（その位置までの）バイト数」とは、Ｓ３で得られたメッセージ長と同じ値が格納されている位置であって、パケットの先頭から何バイト目に格納されているかを示す。「長さ」とは、Ｓ３で得られたメッセージ長の値が格納されている領域のサイズを示す。「（その位置の）検出回数」とは、その位置が検出された個数を示す。「総数」ｌとは、処理したメッセージの総数を示す。
【００７２】
図１５は、パケットのデータ構造を示す。パケットは、ＩＰヘッダ、ＴＰＣヘッダ、ＴＰＣデータを含む。
【００７３】
図１６は、ＩＰヘッダの構造を示す。ＩＰヘッダは、バージョン、ヘッダ長、サービスタイプ、パケット長、識別子、フラグ、フラグメントオフセット、生存時間、プロトコル、ヘッダチェックサム、送信元ＩＰアドレス、送信先ＩＰアドレス、オプション、パディングの項目を有する。「パケット長」には、パケット全体のサイズ（ｂｙｔｅ）がセットされる。「送信元ＩＰアドレス」には、送信元のＩＰアドレスがセットされる。「送信先ＩＰアドレス」には、送信先のＩＰアドレスがセットされる。これ以外の項目については、本実施形態で言及しないので、省略する。
【００７４】
図１７は、ＴＰＣヘッダの構造を示す。ＴＰＣヘッダは、送信元ポート番号、送信先ポート番号、シーケンス番号、確認応答番号、ヘッダ長、予約ビット、フラグ、ウィンドウサイズ、チェックサム、緊急ポインタ、オプション、パディングの項目を有する。「送信元ポート番号」には、送信元のポート番号がセットされる。「送信先ポート番号」には、送信先のポート番号がセットされる。
【００７５】
図１８は、ＴＰＣコネクションのシーケンスの一例を示す。まずは、スリーウェイハンドシェイクによるＴＣＰコネクションの確立について説明する。接続を要求する側（以下、クライアントという）から接続を要求される側（以下、サーバという）へＳＹＮパケット（ＴＣＰヘッダ内のＳＹＮを示すフラグが立ったパケット）を送る。サーバは、ＳＹＮ−ＡＣＫパケット（ＴＣＰヘッダ内の項目「フラグ」において、ＳＹＮフラグとＡＣＫフラグが立ったパケット）をクライアントに送る。クライアントは、ＡＣＫパケット（ＡＣＫフラグが立ったパケット）をサーバに送る。これにより、接続を要求する側（クライアント）と接続を要求される側（サーバ）の間のコネクションが確立する。
【００７６】
ここで、接続を要求する側（クライアント）を「接続元」という。接続を要求される側（サーバ）を「接続先」という。接続を要求する側（クライアント）から接続を要求される側（サーバ）への接続方向を「上り」といい、その反対の方向を「下り」という。
【００７７】
次に、ＴＰＣコネクションの切断について説明する。ＴＣＰコネクションを切断しようとするコンピュータから、他方のコンピュータへコネクションの切断を要求するＦＩＮパケット（ＴＣＰヘッダ内の項目「フラグ」において、ＦＩＮフラグが立ったパケット）を送信する。これに対して、該他方のコンピュータは、ＴＣＰコネクションを切断しようとするコンピュータへＡＣＫパケットを送り、片方向のコネクションが開放される。さらに、該他方のコンピュータがＴＣＰコネクションを切断しようとするコンピュータへＦＩＮパケットを送る。これに対して、ＴＣＰコネクションを切断しようとするコンピュータは、ＡＣＫパケットを他のコンピュータへ送り、もう片方向のコネクションも開放される。
【００７８】
図１９及び図２０は、本実施形態におけるメッセージ単位でのパケットの振り分けシーケンスの詳細を示す。例えば、ＣＰＵ０は、記憶装置２２からパケット受信プログラム４１ａを読み出し、パケット受信処理を実行するものとする。また、例えば、ＣＰＵ１，２はそれぞれ、記憶装置１２からメッセージ解析プログラム４１ｂを読み出し、メッセージ解析処理を実行するものとする。
【００７９】
ＣＰＵ０は、分析アプリケーション４１により取り込まれたパケットを連続して受信する（Ｓ１１）。ＣＰＵ０は、受信したパケットのＩＰヘッダから「送信元ＩＰアドレス」、「送信先ＩＰアドレス」を取得する。さらに、ＣＰＵ０は、ＴＣＰヘッダから「送信元ポート番号」、「送信先ポート番号」を取得する（Ｓ１２）。以下では、「送信元ＩＰアドレス」、「送信先ＩＰアドレス」、「送信元ポート番号」、「送信先ポート番号」を「送信関係情報」という。
【００８０】
ＣＰＵ０は、Ｓ１２で取得した送信関係情報を用いて、コネクション情報テーブル４３を検索する。これにより、コネクションが確立しているかを検出し、さらにパケットの送信方向を検出する（Ｓ１３）。具体的には、ＣＰＵ０は、Ｓ１２で取得した送信関係情報と一致するコネクション情報（「接続先ＩＰアドレス」、「接続先ポート番号」、「接続元ＩＰアドレス」、「接続元ポート番号」）がコネクション情報テーブル４３に登録されているか否かを判断する。
【００８１】
ここで、スリーウェイハンドシェイクによるコネクション確立前には、そのコネクションについてのコネクション情報は、コネクション情報テーブル４３に登録されていないから、Ｓ１４で「Ｎｏ」へ進む。それから、Ｓ１６〜Ｓ１８（Ｓ１８で「Ｎｏ」）へ進み、ＣＰＵ０は、受信パケットがコネクション確立メッセージであるかを判断する（Ｓ２０）。受信パケットがコネクション確立メッセージでない場合（Ｓ２０で「Ｎｏ」）、本フローは終了する。
【００８２】
したがって、スリーウェイハンドシェイクによるコネクション確立準備段階において、ＳＹＮパケット、ＳＹＮ−ＡＣＫパケットを受信した場合には（Ｓ２０で「Ｎｏ」）、本フローは終了する。
【００８３】
ＳＹＮパケット、ＳＹＮ−ＡＣＫパケットを受信後、さらにＡＣＫパケットを受信した場合、すなわち、コネクション確立メッセージを検出した場合（Ｓ２０で「Ｙｅｓ」）、ＣＰＵ０は、コネクションの確立を確認する（Ｓ２１）。この場合、ＣＰＵ０は、Ｓ３２で取得した送信関係情報をコネクション情報（「接続先ＩＰアドレス」、「接続先ポート番号」、「接続元ＩＰアドレス」、「接続元ポート番号」）としてコネクション情報テーブル４３へ登録する（Ｓ２２）。これにより、本フローを終了する。
【００８４】
このように、スリーウェイハンドシェイクによるコネクション確立準備段階の間は、Ｓ１１〜Ｓ１３、Ｓ１４で「Ｎｏ」、Ｓ１６〜Ｓ１７、Ｓ１８で「Ｎｏ」、Ｓ２０の処理を繰り返す。
【００８５】
コネクション確立後に受信したパケットの場合、Ｓ１１，Ｓ１２の処理後、ＣＰＵ０は、Ｓ１２で取得した送信関係情報を用いてコネクション情報テーブル４３を検索する。これにより、ＣＰＵ０は、コネクションが確立しているかを検出し、さらにパケットの送信方向を検出する（Ｓ１３）。
【００８６】
Ｓ１２で取得した送信関係情報と一致するコネクション情報がコネクション情報テーブル４３に登録されている場合（Ｓ１４で「Ｙｅｓ」）、ＣＰＵ０は、コネクションの接続方向に対して、受信パケットの送信方向を「上り」と特定する（Ｓ１５）。それから、ＣＰＵ０は、Ｓ２３の処理を行う。
【００８７】
Ｓ１２で取得した送信関係情報と一致するコネクション情報がコネクション情報テーブル４３に登録されていない場合（Ｓ１４で「Ｎｏ」）、ＣＰＵ０は以下の処理を実行する。すなわち、ＣＰＵ０は、送信関係情報の「送信先ＩＰアドレス」と「送信元ＩＰアドレス」の内容を入れ替え、「送信先ポート番号」と「送信元ポート番号」の内容と入れ替える（Ｓ１６）。以下では、Ｓ１６で入れ替えた送信関係情報を「入れ替え送信関係情報」という。
【００８８】
ＣＰＵ０は、入れ替え送信関係情報を用いてコネクション情報テーブル４３を検索する。これにより、ＣＰＵ０は、コネクションが確立しているかを検出し、さらにパケットの送信方向を検出する（Ｓ１７）。具体的には、ＣＰＵ０は、入れ替え送信関係情報と一致するコネクション情報がコネクション情報テーブル４３に登録されているか否かを判断する。
【００８９】
入れ替え送信関係情報と一致するコネクション情報がコネクション情報テーブル４３に登録されている場合（Ｓ１８で「Ｙｅｓ」）、ＣＰＵ０は、コネクションの接続方向に対して、受信パケットの送信方向を「下り」と特定する（Ｓ１９）。それから、ＣＰＵ０は、Ｓ２３の処理を行う。
【００９０】
入れ替え送信関係情報と一致するコネクション情報がコネクション情報テーブル４３に登録されていない場合（Ｓ１８で「Ｎｏ」）、上述したように、Ｓ２０〜Ｓ２２の処理を行う。
【００９１】
なお、以下では、パケットの送信方向が「上り」と特定された送信関係情報、及びパケットの送信方向が「下り」と特定された入れ替え送信関係情報を、「対象コネクション情報」という。
【００９２】
Ｓ１５またはＳ１９の処理後、ＣＰＵ０は、送信方向（上りまたは下り）単位に、振り分けテーブル４６に、受信パケットのコネクション情報に対応するプロトコルが登録されているかを判定する（Ｓ２３）。
【００９３】
振り分けテーブル４６に、受信パケットのコネクション情報に対応するプロトコルが登録されている場合（Ｓ２３で「Ｙｅｓ」）、ＣＰＵ０は、振り分け処理を行う（Ｓ３０）。Ｓ３０の振り分け処理について、後述する。
【００９４】
振り分けテーブル４６に、コネクション情報に対応するプロトコルが登録されていない場合（Ｓ２３で「Ｎｏ」）、ＣＰＵ０は、連続して受信したパケットの受信間隔を測定する（Ｓ２４）。パケットの受信間隔を測定するため、例えば、ＣＰＵ０は次の処理を行う。上述したように、本実施形態では、パケットの送信間隔を、分析装置１１における受信間隔として検出することとする。
【００９５】
パケットの受信間隔を計測する第１の例として、ＣＰＵ０は、自身の有するタイマー機能または時計回路を用いて、パケットを受信したときの時刻を取得する。ＣＰＵ０は、前回、上りパケットまたは下りパケット（以下、上り／下りパケットと称する）を受信した時の時刻をパケット管理テーブル４４の「上りパケット到着時刻」４４ｅまたは「下りパケット到着時刻」４４ｆから読み出す。そして、ＣＰＵ０は、その読み出した前回の上り／下りパケットの受信時刻と、今回上り／下りパケットを受信したときの受信時刻との差を受信間隔として算出する。それから、ＣＰＵ０は、今回上り／下りパケットを受信したときの受信時刻によって、パケット管理テーブル４４の「上りパケット到着時刻」４４ｅまたは「下りパケット到着時刻」４４ｆを更新する。
【００９６】
パケットの受信間隔を計測する第２の例として、ＣＰＵ０は、ＣＰＵ０の有するカウント機能または時計回路の有するカウント機能を用いて、パケットの受信間隔をカウントするようにしてもよい。例えば、パケットを受信した場合、ＣＰＵ０は、カウンタを０で初期化して、次のパケットを受信するまでの間隔をカウントする。そのカウントした値を受信間隔としてもよい。
【００９７】
ＣＰＵ０は、Ｓ２４で算出した受信間隔と、閾値Ｔ１とを比較し、受信パケットがメッセージの先頭候補であるか否かを判定する（Ｓ２５）。ここで、閾値Ｔ１は、図５で説明した送信間隔についての閾値であり、閾値情報４８の１つとして記憶装置２２に登録されている。Ｓ２４で算出した受信間隔が閾値Ｔ１以下である場合は、ＣＰＵ０は、受信パケットがメッセージ内で先頭パケット候補以外（２番目以降）のパケットであると判定する。また、Ｓ４３で算出した受信間隔が閾値Ｔ１より長い場合は、ＣＰＵ０は、受信パケットがメッセージの先頭パケット候補であると判定する。
【００９８】
Ｓ２５において、先頭パケット候補以外（２番目以降）のパケットであると判定した場合（Ｓ２６で「Ｎｏ」）、ＣＰＵ０は、受信パケットのパケット長を検出する（Ｓ２７）。
【００９９】
ＣＰＵ０は、受信パケットが上りパケットである場合、パケット管理テーブル４４の「上りパケット長の累計」４４ｇに、検出したパケット長を加算する。また、ＣＰＵ０は、受信パケットが下りパケットである場合、パケット管理テーブル４４の「下りパケット長の累計」４４ｈに、検出したパケット長を加算する（Ｓ２８）。
【０１００】
ＣＰＵ０は、受信パケットをコネクション情報毎にバッファに格納する（Ｓ２９）。
Ｓ２５において、先頭パケット候補であると判定した場合（Ｓ２６で「Ｙｅｓ」）、ＣＰＵ０は、直前メッセージのプロトコル登録・振り分け処理を行う（Ｓ３１）。ここで、前メッセージとは、１つ前に検出した先頭パケットから今回検出した先頭パケットの直前のパケットまでのパケット群により形成されるメッセージを示す。Ｓ３１の処理については、図２１で詳述する。
【０１０１】
図２１は、本実施形態における直前メッセージのプロトコル登録・振り分け処理（Ｓ３１）のフローを示す。ＣＰＵ０は、パケット管理テーブル４４から、パケット長の累計、すなわち直前メッセージのメッセージ長を取得する（Ｓ４１）。このとき、上りメッセージについて処理している場合には、直前メッセージのメッセージ長として「上りパケット長の累計」４４ｇが取得される。下りメッセージについて処理している場合には、直前メッセージのメッセージ長として「下りパケット長の累計」４４ｈが取得される。
【０１０２】
ＣＰＵ０は、バッファに保持されている直前メッセージから、メッセージ長と同じ値が格納されている位置をメッセージの全範囲から、例えば先頭から末尾に向かって検索する。ＣＰＵ０は、検索結果として、検索されたメッセージの位置（メッセージの先頭からのバイト数、メッセージ長が格納されている領域の範囲）を格納位置検出頻度テーブル４７に格納する。また、ＣＰＵ０は、既に検索された位置が格納位置検出頻度テーブル４７に登録されている場合、その位置に対応する検索回数に１を加算する（Ｓ４２）。
【０１０３】
ＣＰＵ０は、格納位置検出頻度テーブル４７から、最も検出回数の多い位置（最頻値）のメッセージ位置（メッセージの先頭からのバイト数と長さ）と、検出したメッセージの総数を取得する（Ｓ４３）。
【０１０４】
ＣＰＵ０は、メッセージ位置定義テーブル４５から、取得した最頻値のメッセージ位置と長さに対応するプロトコル名を取得する（Ｓ４４）。
【０１０５】
ＣＰＵ０は、Ｓ４３で取得したメッセージの総数が閾値Ｔ２未満か否かを判定する（Ｓ４５）。閾値Ｔ２は、閾値情報４８の１つとして記憶装置２２に登録されている。メッセージの総数が閾値Ｔ２未満の場合（Ｓ４５で「Ｙｅｓ」）、Ｓ４７の処理へ進む。メッセージの総数が閾値Ｔ２以上の場合（Ｓ４５で「Ｎｏ」）、ＣＰＵ０は、振り分けテーブル４６に、そのメッセージの接続先ＩＰアドレス、接続先ポート番号と、Ｓ４４で取得したプロトコル名を登録する（Ｓ４６）。
【０１０６】
ＣＰＵ０は、バッファからパケット群（メッセージ）を取り出し（Ｓ４７）、そのメッセージのプロトコルに応じてメッセージ解析処理に振り分ける（Ｓ４８）。振り分けられたメッセージは、解析処理が行われる（Ｓ４９）。
【０１０７】
メッセージ解析処理で解析エラーが検出された場合（Ｓ５０で「Ｎｏ」）、ＣＰＵ０は初期化処理を実行する（Ｓ５１）。ここでは、ＣＰＵ０は、振り分けテーブル４６、格納位置検出頻度テーブル４７から、登録しているそのプロトコル及びそのプロトコルに対応するメッセージに関する情報を削除する。
【０１０８】
図２２は、本実施形態におけるプロトコルが登録されているパケットの振り分け処理処理（Ｓ３０）のフローを示す。振り分けテーブル４６に、コネクションに対応するプロトコルが登録されている場合（Ｓ２３で「Ｙｅｓ」）、ＣＰＵ０は、受信したパケットをそのコネクションに対応するバッファへ格納する（Ｓ６１）。ＣＰＵ０は、メッセージ位置定義テーブル４５から、プロトコル名に対応するメッセージ長の格納位置およびメッセージ長を取得する（Ｓ６２）。
【０１０９】
ＣＰＵ０は、パケット管理テーブル４４から「上りパケット長の累計」４４ｇまたは「下りパケット長の累計」４４ｈを取得する（Ｓ６３）。
【０１１０】
ＣＰＵ０は、メッセージ位置定義テーブル４５から取得したメッセージ長と、パケット管理テーブル４４から取得したパケット長の累計に今回受信したパケットのパケット長を加算した値（受信したパケットのパケット長の累計）とを比較する（Ｓ６４）。受信したパケットのパケット長の累計がメッセージ長まで達していない場合（Ｓ６４で「Ｎｏ」）、ＣＰＵ０は、次の処理を行う。すなわち、ＣＰＵ０は、パケット管理テーブル４４の「上りパケット長の累計」４４ｇまたは「下りパケット長の累計」４４ｈに、今回受信したパケットのパケット長を加算し（Ｓ７２）、本フローの処理が終了する。
【０１１１】
受信したパケットのパケット長の累計がメッセージ長まで達した場合（Ｓ６４で「Ｎｏ」）、ＣＰＵ０は、次の処理を行う。すなわち、ＣＰＵ０は、パケット管理テーブル４４の「上りパケット長の累計」４４ｇまたは「下りパケット長の累計」４４ｈを初期化する（Ｓ６６）。
【０１１２】
ＣＰＵ０は、バッファからパケット群（メッセージ）を取り出し（Ｓ６７）、そのメッセージのプロトコルに応じてメッセージ解析処理に振り分ける（Ｓ６８）。振り分けられたメッセージは、解析処理が行われる（Ｓ６９）。
【０１１３】
メッセージ解析処理で解析エラーが検出された場合（Ｓ７０で「Ｎｏ」）、ＣＰＵ０は初期化処理を実行する（Ｓ７１）。ここでは、ＣＰＵ０は、振り分けテーブル４６、格納位置検出頻度テーブル４７から、登録しているそのプロトコル及びそのプロトコルに対応するメッセージに関する情報を削除する。
【０１１４】
本実施形態によれば、パケット受信間隔で特定したメッセージの長さと同じ値が格納された位置を検出頻度より推定し、推定位置に格納されたメッセージ長になるまで受信したパケット群を１メッセージとして検出する。これにより、メッセージ特定の精度が向上する。
【０１１５】
すなわち、受信したパケットの通信プロトコル種別が不明であっても、パケットの受信間隔から得られたメッセージ長を用いて、受信したパケットからメッセージ長の格納位置を推定し、その推定された格納位置からプロトコルを特定できる。受信した該パケットのコネクション情報の通信プロトコルが特定されている場合、メッセージ間隔では無くメッセージ長を用いて、受信したパケットから１メッセージを特定することができる。
【０１１６】
なお、本発明は、以上に述べた実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【符号の説明】
【０１１７】
１      分析装置
２      パケット抽出部
３      先頭パケット候補特定部
４      位置推定部
５      メッセージ検出部
６      プロトコル特定部
１２    情報システム
１３    コンピュータ
１４    ＳＷ
２０    マルチプロセッサ
２０ａ  ＣＰＵ０
２０ｂ  ＣＰＵ１
２０ｃ  ＣＰＵ２
２１    メモリ
２１ａ  バッファ
２２    記憶装置
２３    リーダ／ライタ
２４    出力Ｉ／Ｆ
２５    入力Ｉ／Ｆ
２６    ＮＩＣ
４１    分析アプリケーション
４２    パケット受信プログラム
４３    コネクション情報テーブル
４４    パケット管理テーブル
４５    メッセージ位置定義テープル
４６    振り分けテーブル
４７    格納位置検出頻度テーブル
４８    閾値情報
【図１】
2016096416.tif 000003
【図２】
2016096416.tif 000004
【図３】
2016096416.tif 000005
【図４】
2016096416.tif 000006
【図５】
2016096416.tif 000007
【図６】
2016096416.tif 000008
【図７】
2016096416.tif 000009
【図８】
2016096416.tif 000010
【図９】
2016096416.tif 000011
【図１０】
2016096416.tif 000012
【図１１】
2016096416.tif 000013
【図１２】
2016096416.tif 000014
【図１３】
2016096416.tif 000015
【図１４】
2016096416.tif 000016
【図１５】
2016096416.tif 000017
【図１６】
2016096416.tif 000018
【図１７】
2016096416.tif 000019
【図１８】
2016096416.tif 000020
【図１９】
2016096416.tif 000021
【図２０】
2016096416.tif 000022
【図２１】
2016096416.tif 000023
【図２２】
2016096416.tif 000024