以下に添付図面を参照して、この発明にかかる端末検出方法、端末検出プログラム、および端末検出装置の実施の形態を詳細に説明する。
図1は、本実施形態にかかる端末検出システム1000の構成を示す図である。図1に示すように、端末検出システム1000は、送信ホスト100と、送信ホスト110と、受信ホスト200と、対象ホスト300と、検出装置400と、通信ネットワーク500と、を含んで構成されている。なお、通信ネットワーク500は、WAN(Wide Area Network)やLAN(Local Area Network)等の通信回線網である。
送信ホスト100および送信ホスト110は、TCP(Transmission Control Protocol)やUDP(User Datagram Protocol)等の種々のプロトコルにしたがって、対象ホスト300との間で様々なデータの送受信を行う端末等である。以下の説明では、送信ホスト100および送信ホスト110は、近隣の対象ホスト300に対して所望のデータを検索するための要求を行うものとする。このように、送信ホスト100や送信ホスト110が、近隣の対象ホスト300に対して行う要求のことをクエリと呼ぶこととする。
また、クエリは、検索を行うための複数の検索情報(例えば、検索する対象となる文字列や、その文字列を検索するコマンド、あるいは検索対象となるWebサーバのページ等の情報)を含んで構成される。上述した送信ホスト100や送信ホスト110は、クエリをクエリと同じ、またはクエリよりも小さいデータ(以下、パケットと呼ぶ。)に分割して対象ホスト300に送信する。
より具体的には、送信ホスト100や送信ホスト110は、クエリをパケットに分割する際に、送信ホスト100や送信ホスト110のアドレスを示す送信IP(Internet Protocol)アドレス、対象ホスト300のアドレスを示す受信IPアドレス、送信ポート番号、受信ポート番号、プロトコルの種類等の各種の情報をヘッダ情報(IPヘッダ)としてパケットに付加し、ヘッダ情報が付加されたパケットを対象ホスト300に送信している。以下では、上述したヘッダ情報に含まれる各種の情報のうち、特に、送信IPアドレス、受信IPアドレス、送信ポート番号、受信ポート番号、プロトコルの種類、の5つの情報のことを5タプルと呼ぶこととする。5タプルの具体的な内容については、検出装置400を説明する際に合わせて説明する。
さらに以下では、上述した5タプルの各情報が同一であるパケットまたはパケットチャンク(後述)の集合のことを、特に、フローと呼ぶこととする。また、フローのうち、各パケットを送信または受信した間隔が、あらかじめ定められた一定の時間の間隔(例えば、10ミリ秒)以内であるパケットやその集合のことを、特に、パケットチャンクと呼ぶこととする。パケットチャンクは、少なくとも1つ以上のパケットを含んで構成されているが、フローおよびパケットチャンクの具体的な内容については、上述した5タプルと同様に後述する。
なお、送信ホスト100および送信ホスト110についての具体的な構成については、その記載を省略するが、上述したクエリを送信できるものであれば、いずれの構成でも構わない。また、以下では、クエリを送信する送信ホスト100や送信ホスト110のことを、単に送信ノードと呼ぶこともある。
受信ホスト200は、上述した送信ノードの各ホストと同様に、種々のプロトコルにしたがって、近隣の対象ホスト300との間で様々なデータの送受信を行う端末等である。以下の説明では、受信ホスト200は、上述した送信ノードから要求されたクエリについてのパケットを含む種々のデータを、近隣のホストである対象ホスト300から受信するものとして説明している。
なお、受信ホスト200についての具体的な構成については、送信ノードの各ホストと同様にその記載を省略するが、上述したクエリを受信できるものであれば、いずれの構成でも構わない。また、以下では、クエリを受信する受信ホスト200のことを、単に受信ノードと呼ぶこともある。
対象ホスト300は、上述した送信ノードや受信ノードの各ホストと同様に、種々のプロトコルにしたがって、これらの近隣の各ホストとの間で様々なデータの送受信を行う端末等である。以下の説明では、対象ホスト300は、近隣の送信ノードの各ホストからクエリについてのパケットを受信すると、近隣の受信ノードまでのルーティングを示す経路情報を受信したパケットに付加し、経路情報を付加したパケットを、送信ノード以外の近隣のホストである受信ノードに転送する場合について説明している。
なお、以下では、このように、あるクエリについてのパケットを受信した場合に、上述した経路情報をパケットに付加し、近隣のホストに転送することをクエリルーティングと呼ぶこととする。このように、近隣のホストがクエリルーティングを行うことによって、送信ノードの各ホストからのクエリが実行され、送信ノードから要求された各種のデータを検索することができる。また、以下では、対象ホスト300のことを、対象ノードと呼ぶこともある。
図2および図3は、上述したクエリ、フロー、パケットチャンク、送信ノード、および受信ノード、対象ノードの関係を示すイメージ図である。図2に示す例では、送信ホスト100が、1つのクエリ(クエリA)としてパケットチャンクPaとPcとを対象ホスト300に送信し、送信ホスト110が、1つのクエリ(クエリB)としてパケットチャンクPbとPdとを対象ホスト300に送信した場合の例を示している。
なお、図2に示した例では、クエリAとして送信したパケットチャンクPc、およびクエリBとして送信したパケットチャンクPdは、対象ホスト300が、既に各パケットチャンクに含まれるパケットに経路情報を付加して受信ホスト200に送信した状態であり、パケットチャンクPaが含まれるフローをフロー1、パケットチャンクPcおよびパケットチャンクPdが含まれるフローをフロー2、パケットチャンクPbが含まれるフローをフロー3としてあらわしている。
図2に示すように、対象ホスト300は、送信ホスト100からパケットチャンクPaとパケットチャンクPcとを受信すると、順次、受信したパケットチャンクに含まれるパケットに経路情報を付加して受信ホスト200に転送する。これと同様に、対象ホスト300は、送信ホスト110からパケットチャンクPbとパケットチャンクPdとを受信すると、順次、受信したパケットチャンクに含まれるパケットに経路情報を付加して受信ホスト200に転送する。
上述したように、パケットチャンクPaとパケットチャンクPbについては、送信ホスト100と対象ホスト300との間で通信されている状態である。したがって、パケットチャンクPaの5タプルの各情報には、送信IPアドレスとして送信ホスト100のIPアドレス、受信IPアドレスとして対象ホスト300のIPアドレス、送信ポート番号として送信ホスト100の送信ポート番号、受信ポート番号として対象ホスト300の受信ポート番号、プロトコルの種類として、例えばTCPが記されている。
また、パケットチャンクPbについては、送信IPアドレスとして送信ホスト110のIPアドレス、受信IPアドレスとして対象ホスト300のIPアドレス、送信ポート番号として送信ホスト110の送信ポート番号、受信ポート番号として対象ホスト300の受信ポート番号、プロトコルの種類として、例えばTCPが、パケットチャンクPaと同様に記されている。
一方、パケットチャンクPcとパケットチャンクPdについては、上述したように、すでに対象ホスト300が受信し、対象ホスト300と受信ホスト200との間で通信された状態である。したがって、パケットチャンクPcの5タプルの各情報には、送信IPアドレスとして対象ホスト300のIPアドレス、受信IPアドレスとして受信ホスト200のIPアドレス、送信ポート番号として対象ホスト300の送信ポート番号、受信ポート番号として受信ホスト200の受信ポート番号、プロトコルの種類として、例えばTCPが記されている。パケットチャンクPbについても、パケットチャンクPaと同様の5タプルの各情報が記されている。
このように、送信ノードからクエリとしてパケットが送信され、送信されたパケットがクエリルーティングされると、そのパケットチャンクの5タプルの各情報は、対象端末300によって転送される前と後とでは異なっている。このため、後述する検出端末400では、パケットチャンクの5タプルの各情報が同一であるか否か、さらには転送されるパケットチャンクの時間の間隔に着目することによって、対象端末300がP2P通信を行っているか否かを判定している。すなわち、クエリルーティングした可能性のあるクエリに含まれるパケットチャンクの組(ペア)について、上述した判定を行うことによって、P2P通信を行っている端末を特定している。なお、判定の具体的な内容については後述する。
図3は、パケットとパケットチャンクの関係の例を示す図である。図3では、図2に示したフロー2に含まれるパケットチャンクPcおよびパケットチャンクPdを例に、横軸を時間(t)として、パケットチャンクPcにはパケット1およびパケット2が含まれ、パケットチャンクPdにはパケット3およびパケット4が含まれる場合を示している。
図3に示すように、パケットチャンクPcに含まれるパケット1およびパケット2は、一定の時間の間隔(Δl)以下で送信されているため、1つのパケットチャンク(パケットチャンクPc)であると判断する。これと同様に、パケットチャンクPdについても、パケット3およびパケット4が一定の時間の間隔(Δl)以下で送信されているため、1つのパケットチャンク(パケットチャンク2)であると判断する。一方、パケットチャンクPcに含まれるパケット2およびパケットチャンクPdに含まれるパケット3の時間の間隔は、一定の時間の間隔(Δl)よりも長いため、パケット2とパケット3とは1つのパケットチャンクではないと判断される。
なお、以下の説明では、対象ホスト300におけるパケットの送受信に着目し、対象ホスト300が送信ノードからパケットを受信する場合のクエリ、フロー、パケットチャンク、パケットのことを、それぞれ受信クエリ、受信フロー、受信パケットチャンク、受信パケット等と呼ぶ場合もある。また、これと同様に、対象ホスト300が受信ノードに対してパケットを送信する場合のクエリ、フロー、パケットチャンク、パケットのことを、それぞれ送信クエリ、送信フロー、送信パケットチャンク、送信パケット等と呼ぶ場合もある。続いて、図1に戻り、検出装置400について説明する。
検出装置400は、送信ホスト100や送信ホスト110、受信ホスト200、対象ホスト300の各ホストとの間で送受信されるデータのトラヒックを監視する端末等である。ここで、トラヒックとは、上述したクエリ、フロー、パケットチャンク、パケットの各情報の伝送量をいうものとする。
図4は、検出装置400の主要な物理的な構成を示す図である。図4に示すように、検出装置400は、物理的には、入出力装置405と、本体装置410と、を含んで構成されている。入出力装置405は、ディスプレイ等の表示装置とキーボード等の入力装置を含んで構成され、検出装置400の利用者からの指示(例えば、検出装置400の起動指示)の入力を受け付けたり、あるいは後述する本体装置410のCPU(Central Processing Unit)450が処理を行った結果等を表示する。
なお、入出力装置405の入力装置と出力装置とは、実際には別個の筐体であるが、これらの各装置が行う処理は主要な部分ではないため、これらをまとめて入出力装置405として示している。また、以下の説明では、CPU450が処理を行った結果等を入出力装置405に表示する前提で説明しているが、例えば、送信ノードの各ホストや受信ノード等、通信ネットワーク500によって接続された他の装置等に表示させることとしてもよい。
本体装置410は、インタフェース420と、記憶装置430と、メモリ440と、CPU450と、バス460と、を含んで構成されている。
インタフェース420は、NIC(Network Interface Card)等から構成され、通信ネットワーク500と検出装置400との間の通信を媒介する。
記憶装置430は、HDD(Hard Disk Drive)等から構成され、外向きフローDB(Data Base)431と内向きフローDB432とを記憶する。外向きフローDB431と内向きフローDB432の具体的な内容については後述する。
メモリ440は、RAM(Random Access Memory)およびROM(Read Only Memory)等の記憶媒体から構成されている。ROMには、上述した対象ホスト300を検出するプログラムがあらかじめ記憶されている。そして、このプログラムが後述するCPU450によってRAMに展開(ロード)されて実行されることによって、対象ホスト300におけるトラヒックを検出している。CPU450が実行する具体的な機能については後述する。なお、以下では、上述したプログラムは、あらかじめROMに記憶されている前提で説明しているが、例えば、通信ネットワーク500を介して、他のホスト等から必要に応じてインストールすることとしてもよい。
CPU450は、プロセッサ等の演算装置から構成され、上述したプログラムの実行や、検出装置400に含まれる各装置の動作を制御する。なお、CPU450は、時刻を計時するクロックを内部に備えているものとする。
バス460は、検出装置400に含まれる各装置を接続し、これらの装置間における種々のデータの受け渡しを行う。
続いて、上述した検出装置400の機能的な構成について説明する。図5は、図4に示した検出装置400の機能的な構成、および物理的な各装置との関係を示す図である。図5に示すように、CPU450は、パケット取得部451と、送信パケット保存部452と、受信パケット保存部453と、ルーティングスコア算出部454と、ペアリング部455と、を含んで構成されている。
パケット取得部451は、対象ホスト300を含む通信ネットワーク500におけるトラヒックを監視するものである。具体的には、パケット取得部451は、インタフェース420を介して通信ネットワーク500に接続し、対象ホスト300が対象ホスト300以外の他のホストに送信しているパケット、または対象ホスト300以外の他のホストから受信しているパケットを取得し、取得したパケットを、後述する送信パケット保存部452または受信パケット保存部453に出力する。
より具体的には、パケット取得部451は、対象ホスト300からパケットを取得すると、取得したパケットのヘッダ情報に記載された送信IPアドレスおよび受信IPアドレスを読み取る。そして、パケット取得部451は、読み取った送信IPアドレスおよび受信IPアドレスに、対象ホスト300のIPアドレスが含まれているか否かを判定する。
そして、パケット取得部451は、読み取った送信IPアドレスおよび受信IPアドレスに、対象ホスト300のIPアドレスが含まれていると判定した場合、さらにそのIPアドレスが送信IPアドレスまたは受信IPアドレスのいずれに含まれているか否かを判定する。
パケット取得部451は、対象ホスト300のIPアドレスが送信IPアドレスに含まれていると判定した場合、取得したパケットは、対象ホスト300が対象ホスト300以外の他のホストに送信するパケット、すなわち送信フローに含まれるパケット(送信パケット)であると判断し、取得した送信パケットを後述する送信パケット保存部452に出力する。
これと同様に、パケット取得部451は、対象ホスト300のIPアドレスが送信IPアドレスに含まれていない、すなわち、対象ホスト300のIPアドレスが受信IPアドレスに含まれていると判定した場合、取得したパケットは、対象ホスト300が対象ホスト300以外の他のホストから受信したパケットであると判断する。すなわち、パケット取得部451は、取得したパケットは受信フローに含まれるパケット(受信パケット)であると判断し、取得した受信パケットを後述する受信パケット保存部453に出力する。
送信パケット保存部452は、パケット取得部451から出力された送信パケットを受け取ると、その送信パケットをフロー形式のデータ(以下、外向きフローレコードと呼ぶ。)とパケットチャンク形式のデータ(以下、外向きチャンクレコードと呼ぶ。)に変換し、変換した各データを外向きフローDB431に記憶させる。すなわち、送信パケット保存部452は、送信パケットをフローレコードまたはチャンクレコード単位に分類する。
図6は、上述した外向きフローレコードが外向きフローDB431に記憶された場合の例を示す図である。なお、図6に示すように外向きフローDB431に記憶された外向きフローレコードの全体のことを外向きフローテーブルと呼ぶこととする。
送信パケット保存部452は、まず、パケット取得部451から送信パケットを受け取ると、受け取ったパケットがフローの中で最初に取得した送信パケットであるか否かを判定する。そして、送信パケット保存部452は、受け取った送信パケットがフローの中で最初に取得した送信パケットであると判定した場合、外向きフローテーブルに新たに外向きフローレコードを生成する。
そして、送信パケット保存部452は、外向きフローレコードを一意に特定するためのID(Identification。以下、外向きフローIDと呼ぶ。)を付与するとともに、取得したパケットのサイズ情報、パケットを最初に取得した時刻である開始時刻、パケットを最後に取得した時刻である終了時刻、5タプルの値、ルーティングスコアの6つの値を含む外向きフローレコードを新たに生成する。
例えば、外向きフローIDには0、1、2等の数値、サイズ情報には送信パケットのヘッダ情報の除いたパケットペイロードの値、開始時刻および終了時刻にはパケット取得部451から送信パケットを受け取った時刻、5タプルの値には取得した送信パケットのヘッダ情報に含まれているそれぞれの値が外向きフローレコードに記憶される。なお、ルーティングスコアとは、外向きフローに含まれるパケットチャンクのうち、クエリの転送に用いられたと考えられるものの数であり、後述するルーティングスコア算出部454は、このルーティングスコアが高いほど、クエリルーティングされたと判定する。また、ルーティングスコアには、後述するルーティングスコア算出部454によって初期値としてゼロが記憶されるが、ルーティングスコアについての具体的な内容については後述する。
なお、パケット取得部451が取得した送信パケットがフローの中で最初に取得した送信パケットであるか否かの判定は、取得した送信パケットと、過去に取得した送信パケットの5タプルの値が同じである外向きフローレコードが、外向きフローテーブルに記憶されているか否かによって判定する。
一方、送信パケット保存部452は、受け取った送信パケットがフローの中で最初に取得した送信パケットではないと判定した場合、取得した送信パケットの5タプルの値と、すでに外向きフローテーブルに記憶されている外向きフローレコードの5タプルの値とが同じ外向きフローレコードを特定する。そして、送信パケット保存部452は、特定した外向きフローレコードのサイズ情報に、取得した送信パケットのパケットペイロードの値を追加し、さらに、終了時刻にパケット取得部451から送信パケットを受け取った時刻を上書きする。
図6に示す例では、外向きフローIDが「0」〜「2」までの外向きフローレコードが外向きフローテーブルに記憶されている場合の例を示している。外向きフローIDが「0」であるフローレコードは、サイズ情報が「3.0KB」、開始時刻が「08/12/08 12:00:00.000」、終了時刻が「08/12/08 12:00:00.300」、5タプルの値が「10.0.0.1:200 10.0.0.2:80 TCP」、ルーティングスコアが「1」であることを示している。
これと同様に、外向きフローIDが「1」であるフローレコードは、サイズ情報が「0.6KB」、開始時刻が「08/12/08 12:00:10.000」、終了時刻が「08/12/08 12:00:10.400」、5タプルの値が「10.0.0.1:400 10.0.0.3:162 UDP」、ルーティングスコアが「2」であり、フローIDが「2」であるフローレコードは、サイズ情報が「1.0KB」、開始時刻が「08/12/08 13:00:00.000」、終了時刻が「08/12/08 13:00:00.000」、5タプルの値が「10.0.0.1:500 10.0.0.4:137 TCP」、ルーティングスコアが「1」となっていることを示している。このように、外向きフローレコードが、順次、外向きフローテーブルに記憶されるが、記憶されたこれらの外向きフローレコードの5タプルの値のうち、送信IPアドレスについては、同じ送信IPアドレス(10.0.0.1)、すなわち対象ホスト300のIPアドレスが記憶される。
なお、上述した例では、外向きフローIDが「3」の外向きフローレコードの開始時刻と終了時刻が同じ時刻となっているが、送信パケット保存部452が受け取った送信パケットが、フローの中で最初に取得した送信パケットであるためである。続いて、外向きチャンクレコードについて説明する。
図7は、上述した外向きチャンクレコードが外向きフローDB431に記憶された場合の例を示す図である。なお、図7に示すように外向きフローDB431に記憶された外向きチャンクレコードの全体のことを外向きチャンクテーブルと呼ぶこととする。
送信パケット保存部452は、受け取った送信パケットの5タプルの値と、過去に取得した送信パケットの5タプルの値が同じである外向きチャンクレコードが外向きチャンクテーブルに存在し、かつ取得した送信パケットの時刻と外向きチャンクテーブルの末尾パケット検出時刻との間の間隔が、あらかじめ定められた一定の時間の間隔(例えば、10ミリ秒)以内であるか否かを判定する。
そして、送信パケット保存部452は、過去に取得した送信パケットの5タプルの値が同じである外向きチャンクレコードが外向きチャンクテーブルに存在しない、または取得した送信パケットの時刻と外向きチャンクテーブルの末尾パケット検出時刻(後述)との間の間隔が、一定の時間の間隔よりも大きいと判定した場合、外向きチャンクテーブルに新たに外向きチャンクレコードを生成する。
そして、送信パケット保存部452は、外向きフローレコードの場合と同様に、外向きチャンクレコードを一意に特定するためのID(以下、外向きチャンクIDと呼ぶ。)を付与するとともに、取得した送信パケットのサイズ情報、送信パケットを最初に取得した時刻である先頭パケット検出時刻、送信パケットを最後に取得した時刻である末尾パケット検出時刻、5タプルの値、5タプルの値が同じであると判定した外向きチャンクレコードのチャンクIDの6つの値を含むチャンクレコードを新たに生成する。
一方、送信パケット保存部452は、受け取った送信パケットの5タプルの値と、過去に取得した送信パケットの5タプルの値が同じである外向きチャンクレコードが外向きチャンクテーブルに存在し、かつ取得した送信パケットの時刻と外向きチャンクテーブルの末尾パケット検出時刻との間の間隔が、一定の時間の間隔以内であると判定した場合、パケット取得部451から送信パケットを受け取った時刻を、末尾パケット検出時刻に上書きするとともに、サイズ情報を、受け取った送信パケットのパケットペイロードの値に追加する。
図7では、外向きチャンクIDが「0」〜「7」までの外向きチャンクレコードが外向きチャンクテーブルに記憶されている場合の例を示している。IDが「0」である外向きチャンクレコードは、サイズ情報が「1.0KB」、先頭パケット検出時刻が「08/12/08 12:00:00.000」、末尾パケット検出時刻が「08/12/08 12:00:00.050」、5タプルの値が「10.0.0.1:200 10.0.0.2:80 TCP」、外向きフローIDが「0」となっている。このように、図7に示す外向きチャンクIDが「0」の外向きチャンクレコードは、図6に示した外向きフローIDが「0」の外向きフローレコードに対応付けて記憶される。
これと同様に、外向きチャンクIDが「1」である外向きチャンクレコードは、サイズ情報が「0.5KB」、先頭パケット検出時刻が「08/12/08 12:00:10.200」、末尾パケット検出時刻が「08/12/08 12:00:10.200」、5タプルの値および外向きフローIDが、外向きチャンクIDが「0」の外向きチャンクレコードと同じであり、外向きチャンクIDが「2」である外向きチャンクレコードは、サイズ情報が「1.0KB」、先頭パケット検出時刻が「08/12/08 12:00:10.350」、末尾パケット検出時刻が「08/12/08 12:00:10.400」、5タプルの値および外向きフローIDが、外向きチャンクIDが「0」の外向きチャンクレコードと同じであることを示している。
さらに、外向きチャンクIDが「3」である外向きチャンクレコードは、サイズ情報が「0.5KB」、先頭パケット検出時刻が「08/12/08 12:00:10.600」、末尾パケット検出時刻が「08/12/08 12:00:10.600」、5タプルの値および外向きフローIDが、外向きチャンクIDが「0」の外向きチャンクレコードと同じであることを示している。このように、外向きチャンクレコードが、順次外向きチャンクテーブルに記憶されるが、記憶されたこれらの外向きフローレコードの5タプルの値のうち、送信IPアドレスについては、外向きフローレコードと同様に、同じ送信IPアドレス(10.0.0.1)、すなわち対象ホスト300のIPアドレスが記憶される。
すなわち、図6に示した外向きフローIDが「0」の外向きフローレコードは、図7に示した外向きチャンクIDが「0」〜「2」の3つの外向きチャンクレコードから構成されていることを示している。これと同様に、例えば、図6に示した外向きフローIDが「1」である外向きフローレコードは、図7に示す外向きチャンクIDが「4」〜「6」の3つの外向きチャンクレコードから構成されていることを示している。このように、1つの外向きフローレコードは、少なくとも1つの外向きチャンクレコードから構成され、互いに対応付けて記憶されている。続いて、図5に戻り、受信パケット保存部453について説明する。
受信パケット保存部453は、送信パケット保存部452と同様に、パケット取得部451から出力された受信パケットを受け取ると、その受信パケットをフロー形式のデータ(以下、内向きフローレコードと呼ぶ。)とパケットチャンク形式のデータ(以下、内向きチャンクレコードと呼ぶ。)に変換し、変換した各データを内向きフローDB432に記憶させる。すなわち、受信パケット保存部453は、上述した送信パケット保存部452と同様に、受信パケットをフローレコードまたはチャンクレコード単位に分類する。
受信パケット保存部453は、まず、パケット取得部451からパケットを受け取ると、受け取った受信パケットがフローの中で最初に取得した受信パケットであるか否かを判定する。そして、送信パケット保存部452は、受け取った受信パケットがフローの中で最初に取得した受信パケットであると判定した場合、内向きフローテーブルに新たに内向きフローレコードを生成する。
そして、受信パケット保存部453は、内向きフローレコードを一意に特定するための内向きフローIDを付与するとともに、外向きフローレコードの場合と同様に、取得した受信パケットのサイズ情報、受信パケットを最初に取得した時刻である開始時刻、受信パケットを最後に取得した時刻である終了時刻、5タプルの値、ルーティングスコアの6つの値を含む内向きフローレコードを新たに生成する。内向きフローレコードがどのように生成されるかについては、外向きフローレコードの場合と同様であるため、ここではその説明を省略する。
図8は、内向きフローIDが「0」〜「3」までの内向きフローレコードが内向きフローテーブルに記憶されている場合の例を示している。内向きフローIDが「0」である内向きフローレコードは、サイズ情報が「1.0KB」、開始時刻が「08/12/08 11:59:59.900」、終了時刻が「08/12/08 11:59:59.950」、5タプルの値が「10.0.0.5:200 10.0.0.1:80 TCP」、ルーティングスコアが「0」であることを示している。
これと同様に、内向きフローIDが「1」である内向きフローレコードは、サイズ情報が「0.5KB」、開始時刻が「08/12/08 11:59:59.895」、終了時刻が「08/12/08 12:00:09.895」、5タプルの値が「10.0.0.6:300 10.0.0.1:162 UDP」、ルーティングスコアが「0」であり、内向きフローIDが「2」である内向きフローレコードは、サイズ情報が「0.6KB」、開始時刻が「08/12/08 12:00:09.900」、終了時刻が「08/12/08 12:00:09.950」、5タプルの値が「10.0.0.7:400 10.0.0.1:139 TCP」、ルーティングスコアが「0」であり、内向きフローIDが「3」である内向きフローレコードは、サイズ情報が「1.0KB」、開始時刻が「08/12/08 12:59:59.950」、終了時刻が「08/12/08 12:59:59.950」、5タプルの値が「10.0.0.8:200 10.0.0.1:137 TCP」、ルーティングスコアが「0」であることを示している。続いて、内向きチャンクレコードについて説明する。
図9は、上述した内向きチャンクレコードが内向きフローDB432に記憶された場合の例を示す図である。なお、図9に示すように内向きフローDB432に記憶された内向きチャンクレコードの全体のことを、外向きチャンクテーブルの場合と同様に、内向きチャンクテーブルと呼ぶこととする。なお、内向きチャンクレコードがどのように生成されるかについては、外向きチャンクレコードの場合と同様であるため、ここではその説明を省略する。
図9に示す例では、内向きチャンクIDが「0」〜「3」までの内向きチャンクレコードが内向きチャンクテーブルに記憶されている場合の例を示している。これらの内向きチャンクレコードは、図8に示した内向きフローレコードと同様の内容となっているが、各フローレコードには、1つのチャンクレコードのみが含まれている状態であるためである。このように、内向きチャンクレコードが、順次内向きチャンクテーブルに記憶されるが、記憶されたこれらの内向きフローレコードの5タプルの値のうち、受信IPアドレスについては、内向きフローレコードと同様に、同じ受信IPアドレス(10.0.0.1)、すなわち対象ホスト300のIPアドレスが記憶される。
すなわち、図8に示した内向きフローIDが「0」の内向きフローレコードは、図9に示した内向きチャンクIDが「0」の内向きチャンクレコードから構成され、内向きフローIDが「1」である内向きフローレコードは、内向きチャンクIDが「1」の内向きチャンクレコードから構成されていることを示している。このように、1つの内向きフローレコードは、外向きフローレコードの場合と同様に、少なくとも1つの内向きチャンクレコードから構成され、互いに対応付けて記憶されている。続いて、図5に戻り、ルーティングスコア算出部454について説明する。なお、ルーティングスコア算出部454およびペアリング部455を単に判定部と呼ぶこともある。
ルーティングスコア算出部454は、上述した外向きフローDB431および内向きフローDB432からそれぞれのフローレコードおよびチャンクレコードを読み取り、読み取ったフローレコードおよびチャンクレコードについての送信フローのルーティングスコアをカウントし、カウントしたルーティングスコアの値が、あらかじめ定められた一定の閾値(例えば、7)を超えた場合に、対象ホスト300がP2P通信を行っているノードである旨等の結果を入出力装置405に出力するものである。すなわち、ルーティングスコア算出部454は、クエリルーティングした可能性のあるパケットの組(ペア)を判定するものである。
ルーティングスコア算出部454は、外向きフローDB431に記憶されている外向きフローレコードのうち、終了時刻およびサイズ情報が更新された外向きフローレコードを特定し、特定した外向きフローレコードのルーティングスコアに初期値として「0」を設定する。
なお、終了時刻およびサイズ情報が更新されたレコードであるか否かについては、終了時刻については、例えば、開始時刻と終了時刻が異なっている場合には終了時刻が更新されたと判定する。また、サイズ情報については、例えば、外向きフローテーブルに外向きフローレコードを記憶させた際のサイズ情報をメモリ440に記憶しておき、終了時刻が更新されたと判定した場合におけるサイズ情報を読み取り、読み取ったサイズ情報がメモリ440に記憶したサイズ情報と異なっている場合にはサイズ情報が更新されたレコードであると判定する。
その後、ルーティングスコア算出部454は、内向きフローDB432に含まれる内向きフローレコードの中から、終了時刻およびサイズ情報が更新された外向きフローレコードの5タプルに含まれる送信IPアドレス以外の送信IPアドレスを含む内向きフローレコードを特定する。そして、ルーティングスコア算出部454は、特定した内向きフローレコードと終了時刻およびサイズ情報が更新された外向きフローレコードとを後述するペアリング部455に出力する。
さらに、ルーティングスコア算出部454は、後述するペアリング部455が、特定した内向きフローレコードと、終了時刻およびサイズ情報が更新された外向きフローレコードのうち、クエリルーティングされたチャンクレコードが存在すると判定した場合、終了時刻およびサイズ情報が更新された外向きフローレコードのルーティングスコアを更新する。なお、以下の説明では、クエリルーティングされたチャンクレコードが存在すると判定された場合において、終了時刻およびサイズ情報が更新された外向きフローレコードのルーティングスコアを更新しているが、これとは逆に、内向きフローレコードのルーティングスコアを更新することとしてもよい。
そして、ルーティングスコア算出部454は、更新したルーティングスコアの値が、あらかじめ定められた閾値以上であるか否かを判定し、更新したルーティングスコアの値が、あらかじめ定められた閾値以上であると判定した場合、対象ホスト300は、P2P通信を行っていると判断し、対象ホスト300のIPアドレス、ルーティングスコアの値、P2P通信を行っている旨を入出力装置405に出力する。
一方、ルーティングスコア算出部454は、更新したルーティングスコアの値が、あらかじめ定められた閾値未満であると判定した場合、内向きフローDB432の中に、終了時刻およびサイズ情報が更新された外向きフローレコードの5タプルに含まれる送信IPアドレス以外の送信IPアドレスを含む内向きフローレコードが他にあるか否かを判定する。
そして、ルーティングスコア算出部454は、内向きフローDB432の中に、終了時刻およびサイズ情報が更新された外向きフローレコードの5タプルに含まれる宛先アドレス(図6に示した外向きフローIDが「0」の外向きフローレコードでは、「10.0.0.2」)以外のアドレスを送信元アドレスとして含む内向きフローレコードが他にあると判定した場合には、その内向きフローレコードについて、上述した各処理を行う。このように、ルーティングスコア算出部454は、1つの外向きフローレコードをキーにして、すべての内向きフローレコードについて、上述した各処理を繰り返し行う。
その後、ルーティングスコア算出部454は、内向きフローDB432の中に、終了時刻およびサイズ情報が更新された外向きフローレコードの5タプルに含まれる送信IPアドレス以外の送信IPアドレスを含む内向きフローレコードが他にない、すなわち、その外向きフローレコードをキーにしてすべての内向きフローレコードについて上述した判定を終了した場合、対象ホスト300がP2P通信を行っていないと判断し、対象ホスト300のIPアドレス、ルーティングスコアの値、P2P通信を行っていない旨を入出力装置405に出力する。
例えば、図6に示した外向きフローレコードの中で、外向きフローIDが「0」である外向きフローレコードの終了時刻は開始時刻とは異なる時刻であり、サイズ情報は図7に示した外向きチャンクテーブルの中の外向きチャンクIDが「0」〜「3」である4つの外向きチャンクレコードのサイズ情報の合計となっている(すなわち、サイズ情報が更新されている)ため、ルーティングスコア算出部454は、まず、外向きフローIDが「0」の外向きフローレコードを特定する。
そして、ルーティングスコア算出部454は、外向きフローIDが「0」の外向きフローレコードに含まれる5タプルの値のうち、宛先IPアドレス「10.0.0.2」以外のアドレスを送信元IPアドレスとして含む内向きフローレコードを特定する。図8に示した内向きフローテーブルに含まれる内向きフローレコードの例では、内向きフローID「0」〜「3」のレコードが、送信IPアドレスが「10.0.0.5」、「10.0.0.6」、「10.0.0.7」、「10.0.0.8」となっており、外向きフローレコードの送信IPアドレス「10.0.0.2」とは異なっているため、これらのすべてのレコードをペアリング部455に出力する。
その後、ペアリング部455によって、外向きフローレコードと内向きフローレコードの組(ペア)に含まれる外向きチャンクレコードと内向きチャンクレコードの組(ペア)がクエリルーティングした旨の通知を受けた場合、例えば、図6に示した外向きフローIDが「0」の外向きフローレコードのルーティングスコア(図6に示した例では「1」)を更新する。このように、外向きフローテーブルに記憶されている外向きフローレコードと内向きフローテーブルに記憶されている内向きフローレコードのすべてのレコードについて、クエリルーティングした可能性のあるパケットの組(ペア)を判定し、ルーティングスコアをカウントアップする。続いて、図5に戻り、ペアリング部455について説明する。
ペアリング部455は、対象ホスト300がクエリをクエリルーティングした場合において、外向きフローレコードに含まれるチャンクレコードと内向きフローレコードに含まれるチャンクレコードのうち、同じクエリのルーティングに用いられたものが存在するか否かを判定するものである。
具体的には、ペアリング部455は、まず、ルーティングスコア算出部454から受け取った外向きフローレコードと内向きフローレコードのうち、外向きフローレコードの外向きフローIDを含む外向きチャンクレコード、および内向きフローレコードの内向きフローIDを含む内向きチャンクレコード、すなわち判定対象となるフローレコードをそれぞれ特定する。
そして、ペアリング部455は、特定した内向きチャンクレコードの末尾パケット検出時刻が、外向きチャンクレコードの先頭パケット検出時刻よりも過去の時刻であって、かつ、内向きチャンクレコードの末尾パケット検出時刻と外向きチャンクレコードの先頭パケット検出時刻との差(間隔)が一定の閾値(例えば、10ミリ秒)以内であるか否かを判定する。
そして、ペアリング部455は、内向きチャンクレコードの末尾パケット検出時刻と外向きチャンクレコードの先頭パケット検出時刻との差が一定の閾値以内であると判定した場合、さらに、内向きチャンクレコードのサイズ情報と外向きチャンクレコードのサイズ情報とを比較し、内向きチャンクレコードのサイズ情報と外向きチャンクレコードのサイズ情報との差が一定の閾値(例えば、100バイト)以下であるか否かを判定する。
その後、ペアリング部455は、内向きチャンクレコードのサイズ情報と外向きチャンクレコードのサイズ情報との差が一定の閾値以下であると判定した場合、特定した内向きチャンクレコードと外向きチャンクレコードは、同じクエリのクエリルーティングに用いられたと判定し、その旨をルーティングスコア算出部454に通知する。
例えば、ペアリング部455は、図6に示した外向きフローIDが「0」の外向きフローレコードと、図8に示した内向きフローIDが「0」〜「3」の内向きフローレコードをルーティングスコア算出部454から受け取ると、まず、受け取った外向きフローレコードの外向きフローID「0」を読み取り、その外向きフローID「0」を含む外向きチャンクレコードを、図7に示した外向きチャンクテーブルの中から特定する。図7に示した例では、ペアリング部455は、外向きフローIDが「0」である外向きチャンクIDが「0」〜「3」の外向きチャンクレコードを特定する。
続いて、ペアリング部455は、内向きフローIDが「0」〜「3」の内向きフローレコードのうち、まず、内向きフローIDが「0」である内向きフローレコードを選択し、選択した内向きフローレコードの内向きフローID「0」を含む内向きチャンクレコードである内向きチャンクIDが「0」の内向きチャンクレコードを、図9に示した内向きチャンクテーブルの中から特定する。
その後、ペアリング部455は、特定した内向きチャンクIDが「0」の内向きチャンクレコードの末尾パケット検出時刻「08/12/08 11:59:59.950」が、図7に示した外向きチャンクIDが「0」の外向きチャンクレコードの先頭パケット検出時刻「08/12/08 12:00:00.000」よりも過去の時刻であり、さらに両者の時間の間隔(差)が「.050」であり、一定の閾値(例えば、10ミリ秒)以内であるため、さらに、外向きチャンクIDが「0」の外向きチャンクレコードと内向きチャンクレコードのそれぞれに含まれているサイズ情報の値を比較する。
そして、ペアリング部455は、その外向きチャンクレコードのサイズ情報「1.0KB」と、その内向きチャンクレコードのサイズ情報「0.9KB」を比較し、両者の差(容量)「0.1KB」が一定の閾値(例えば、100KB)以下であると判定し、図7に示した外向きチャンクIDが「0」である外向きチャンクレコードと、図9に示した内向きチャンクIDが「0」である内向きチャンクレコードの組(ペア)は、クエリルーティングされたと判定し、その旨をルーティングスコア算出部454に通知する。
その後、ペアリング部455は、図7に示した外向きチャンクIDが「0」の外向きチャンクレコードと、図9に示した内向きチャンクIDが「1」〜「3」の内向きチャンクレコードの組(ペア)について上述した内容と同様の処理を行い、すべての組(ペア)のチャンクレコードについて処理が終了するまで繰り返し行う。
このように、ペアリング部455は、ルーティングスコア算出部454から受け取った内向きフローレコードと外向きフローレコードを受け取ると、これらの各フローレコードに含まれるチャンクレコードを特定し、特定したチャンクレコード(チャンクレコードが複数存在する場合には、それぞれのチャンクレコード)について、上述した2つの条件を満たしているか否かを判定することによって、クエリルーティングが行われたか否かを判定している。
続いて、上述した端末検出システム1000で行われる処理について説明する。図10〜図14は、端末検出システム1000が上述した各種の処理を行う場合の処理手順を示すフローチャートである。以下の説明では、検出装置400は、対象ホスト300のパケットを所定の時間の間隔で検出している状態にあるものとする。
図10に示すように、パケット取得部451は、対象ホスト300からパケットを取得し(ステップS1001)、取得したパケットの送信IPアドレスおよび受信IPアドレスを読み取る(ステップS1002)。
そして、パケット取得部451は、読み取った送信IPアドレスおよび受信IPアドレスが、対象ホスト300のIPアドレスに一致するか否かを判定し(ステップS1003)、読み取った送信IPアドレスおよび受信IPアドレスが、対象ホスト300のIPアドレスに一致すると判定した場合(ステップS1003;Yes)、さらに、そのIPアドレスが送信IPアドレスであるか受信IPアドレスであるか否かを判定し、取得したパケットが送信パケットであるか受信パケットであるか否かを判定する(ステップS1004)。
その後、パケット取得部451は、取得したパケットが送信パケットであると判定した場合(ステップS1004;Yes)、取得したパケットを送信パケット保存部452に出力する(ステップS1005)。
一方、パケット取得部451は、取得したパケットが送信パケットではない、すなわち取得したパケットは受信パケットであると判定した場合(ステップS1004;No)、取得したパケットを受信パケット保存部453に出力する(ステップS1006)。このステップS1005またはステップS1006の処理が終了すると、パケット取得部451における処理が終了し、図11に示す処理、または図12に示す処理に進む。
図11に示すように、送信パケット保存部452は、パケット取得部451から受け取った送信パケットをフロー形式(外向きフローレコード)に変換し(ステップS1101)、さらに、パケット取得部451から受け取った送信パケットをチャンク形式(外向きチャンクレコード)に変換し(ステップS1102)、変換した外向きフローレコードおよび外向きチャンクレコードを外向きフローDB431に記憶する(ステップS1103)。このステップS1103の処理が終了すると、送信パケット保存部452における処理が終了し、図13に示す処理に進む。
また、図12に示すように、受信パケット保存部453は、パケット取得部451から受け取った受信パケットをフロー形式(内向きフローレコード)に変換し(ステップS1201)、さらに、パケット取得部451から受け取った受信パケットをチャンク形式(内向きチャンクレコード)に変換し(ステップS1202)、変換した内向きフローレコードおよび内向きチャンクレコードを内向きフローDB432に記憶する(ステップS1203)。このステップS1203の処理が終了すると、受信パケット保存部453における処理が終了し、図13に示す処理に進む。
図13に示すように、ルーティングスコア算出部454は、外向きフローテーブルに含まれる外向きフローレコードのうち、終了時刻およびサイズ情報が更新された外向きフローレコードを特定し(ステップS1301)、内向きフローレコードの中から、特定した外向きフローレコードの宛先IPアドレス以外のアドレスを、送信元アドレスとして含む内向きフローレコードを特定し、特定した内向きフローレコードと終了時刻およびサイズ情報が更新された外向きフローレコードとをペアリング部455に出力する(ステップS1302)。このステップS1302の処理が終了すると、クエリルーティング判定処理に進む(ステップS1303)。
図14は、上述したクエリルーティング判定処理の処理手順を示すフローチャートである。図14に示すように、ペアリング部455は、ルーティングスコア算出部454から外向きフローレコードと内向きフローレコードを受け取ると(ステップS1401)、受け取った外向きフローレコードの外向きフローIDを含む外向きチャンクレコード、および内向きフローレコードの内向きフローIDを含む内向きチャンクレコードをそれぞれ特定する(ステップS1402)。
その後、ペアリング部455は、内向きチャンクレコードが外向きチャンクレコードよりも過去に検出され、かつ両者を検出した間隔が一定の閾値以内であるか否かを判定し(ステップS1403)、内向きチャンクレコードが外向きチャンクレコードよりも過去に検出され、かつ両者を検出した間隔が一定の閾値以内であると判定した場合(ステップS1403;Yes)、さらに、内向きチャンクレコードのサイズ情報と外向きチャンクレコードのサイズ情報との差が一定の閾値以下であるか否かを判定する(ステップS1404)。
そして、ペアリング部455は、内向きチャンクレコードのサイズ情報と外向きチャンクレコードのサイズ情報との差が一定の閾値以下であると判定した場合(ステップS1404;Yes)、その旨をルーティングスコア算出部454に通知し、ルーティングスコア算出部454は、外向きフローレコードのルーティングスコアをカウントアップする(ステップS1405)。
一方、ペアリング部455は、内向きチャンクレコードが外向きチャンクレコードよりも過去に検出され、かつ両者を検出した間隔が一定の閾値以内でないと判定した場合(ステップS1403;No)、または内向きチャンクレコードが外向きチャンクレコードよりも過去に検出され、かつ両者を検出した間隔が一定の閾値以内であると判定したものの、内向きチャンクレコードのサイズ情報と外向きチャンクレコードのサイズ情報との差が一定の閾値以下でないと判定した場合(ステップS1404;No)、すべての組についてステップS1403およびステップS1404の判定を行ったか否かを判定する(ステップS1406)。
そして、ペアリング部455は、すべての組についてステップS1403およびステップS1404の判定を行ったと判定した場合(ステップS1406;Yes)、クエリルーティング判定処理を終了し、図13に示すステップS1304の処理に進む。一方、すべての組についてステップS1403およびステップS1404の判定を行っていないと判定した場合(ステップS1406;No)、ステップS1402に戻り、ステップS1403以降の処理を繰り返す。
その後、図13において、ルーティングスコア算出部454は、外向きフローレコードのルーティングスコアの値が、あらかじめ定められた閾値以上であるか否かを判定し(ステップS1304)、ルーティングスコアの値が、あらかじめ定められた閾値以上であると判定した場合(ステップS1304;Yes)、対象ホスト300がP2P通信を行っていると判断し、送信IPアドレスあるいは受信IPアドレス、ルーティングスコアの値、P2P通信を行っている旨を入出力装置405に出力する(ステップS1307)。
一方、ルーティングスコア算出部454は、ルーティングスコアの値が、あらかじめ定められた閾値以上でないと判定した場合(ステップS1304;No)、内向きフローDB432の中に、終了時刻およびサイズ情報が更新された外向きフローレコードの5タプルに含まれる送信IPアドレス以外の送信IPアドレスを含む内向きフローレコードが他にあるか否か、すなわちすべての内向きフローレコードについてステップS1304の判定を行ったか否かを判定する(ステップS1305)。
そして、ルーティングスコア算出部454は、すべての内向きフローレコードについてステップS1304の判定を行っていないと判定した場合(ステップS1305;No)、ステップS1302に戻り、ステップS1303以降の各処理を繰り返し行う。
一方、ルーティングスコア算出部454は、すべての内向きフローレコードについてステップS1304の判定を行ったと判定した場合(ステップS1305;Yes)、対象ホスト300がP2P通信を行っていないと判断し、送信IPアドレスあるいは受信IPアドレス、ルーティングスコアの値、P2P通信を行っていない旨を入出力装置405に出力する(ステップS1306)。このステップS1306またはステップS1307の処理が終了すると、本実施の形態におけるすべての処理が終了する。
このように、パケット取得部451が、対象ホスト300に接続する送信ホスト100または送信ホスト110から送信された、所望のデータを検索するための要求であるクエリを構成する1または複数のパケットを取得し、判定部(ルーティングスコア算出部454、ペアリング部455)が、取得されたパケットのうち、対象ホスト300に接続する送信ホスト100または送信ホスト110以外の受信ホスト200に送信する処理であるクエリルーティングが行われる対象となるパケットが存在するか否かを判定し、取得されたパケットのうち、クエリルーティングが行われる対象となるパケットが存在する場合に、対象ホスト300がP2P通信を行うホストであると判定する判定ステップと、を含んでいるので、適切にP2P端末を検出することができる。
なお、上述した実施の形態においては、上述した実施の形態に限定されず、種々の変形が可能である。
例えば、上述した実施の形態においては、対象ホスト300が送受信するパケットをパケットチャンク単位にグループ化し、フローに含まれるパケットチャンクを基準としてルーティングスコアをカウントすることとした。しかし、このようにパケットチャンクを基準としてルーティングスコアをカウントするのではなく、フローに含まれるパケット単位にルーティングスコアをカウントすることとしてもよい。
具体的には、例えば、図11に示したステップS1102の処理において、送信パケット保存部452が、パケット取得部451から送信パケットを受け取る都度、受け取った送信パケットをパケットチャンク形式に変換した外向きチャンクレコードを外向きフローテーブルに記憶させる。これと同様に、受信パケットについても図12に示したステップS1202の処理において、受信パケット保存部453が、パケット取得部451から受信パケットを受け取る都度、受け取った受信パケットをパケットチャンク形式に変換した内向きチャンクレコードを内向きフローテーブルに記憶させる。
この場合、変換された外向きチャンクレコードには送信パケットについての開始時刻、終了時刻、5タプルの値がそれぞれ記憶され、内向きチャンクレコードには、受信パケットについての開始時刻、終了時刻、5タプルの値がそれぞれ記憶される。すなわち、外向きフローテーブルおよび内向きフローテーブルには、パケット単位のパケットチャンクレコードが記憶される。
そして、図14に示したクエリルーティング判定処理のステップS1402において、ペアリング部455が、外向きフローテーブルおよび内向きフローテーブルに記憶された各チャンクレコードの中から判定対象となる外向きチャンクレコードと内向きチャンクレコードの組を特定し、ステップS1403およびステップS1404の各処理を行うこととしてもよい。
このような実施の形態においては、パケット単位にクエリルーティングを行ったか否かについての判定を行うので、P2P端末を検出する精度を高めることができる。また、外向きフローDB431および内向きフローDB432に各パケットチャンクテーブルを記憶させる必要がないので、記憶装置430の容量を抑制することができる。
さらに、上述した実施の形態においては、パケット取得部451、送信パケット保存部452、受信パケット保存部453、外向きフローDB431、内向きフローDB432、ルーティングスコア算出部454、ペアリング部455の各部は、すべて検出装置400の内部に保持することとした。しかし、これらの各部を複数の装置に分けて保持させることによって、図10〜図14に示した各処理を、それぞれ異なる装置で実行させることとしてもよい。
このような実施の形態においては、対象ホスト300に対するトラヒックの量が多量である場合に、検出装置400における処理を分散させることができるため、検出装置400における処理負荷を軽減することができる。
また、上述した実施の形態においては、図13に示したステップS1304において、ルーティングスコア算出部454は、外向きフローレコードのルーティングスコアの値が、あらかじめ定められた閾値以上であるか否かを判定することによって対象ホスト300が、P2P通信を行っているか否かを判定した。しかし、このように判定した外向きフローレコードの数をカウントし、カウントした外向きフローレコードの数が、ある一定の閾値(例えば、5)以上存在する場合に、メモリ440に、上述した閾値、およびその閾値以上の外向きフローレコードの数を記憶しておくことにより、対象ホスト300はP2P端末であると判定することとしてもよい。このような実施の形態においては、複数の外向きフローレコードを基準としてP2P端末であるか否かを判定するため、より適切にP2P端末を検出することができる。
さらに、ルーティングスコア算出部454は、外向きフローレコードのルーティングスコアの値を一定の時間の間隔(例えば、1時間ごと)に繰り返し読み取ることによって、P2P端末であるか否かを判定することも可能である。例えば、ルーティングスコア算出部454が読み取ったルーティングスコアの値が一度は閾値以下であると判定された場合において、その後、対象ホスト300がクエリルーティングを続行している場合等には、外向きフローレコードのルーティングスコアの値が閾値よりも大きい値となるため、その時点において対象ホスト300がP2P通信を行っているか否かを判定することができる。すなわち、外向きフローレコードのルーティングスコアの値を一定の時間の間隔に繰り返し読み取ることによって、あるタイミングのみP2P通信を行う場合であっても、上述した場合と同様に、より適切にP2P端末を検出することができる。
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。