(57)【要約】【課題】データを分割して送受信する場合、データの切れ目においてもウイルス検知を行うことができる情報処理装置を提供する。【解決手段】情報処理装置のウイルス検知手段は、予め定められた第１のデータ長又は予め定められた受信時間にデータを受信した場合、該データに対してウイルス検知を行い、送信手段は、ウイルス検知を行ったデータをデータ要求元に送信し、前記ウイルス検知手段は、２回目以降に受信したデータをウイルス検知する場合に、前回のウイルス検知を行ったデータを予め定められた第２のデータ長分だけ遡ったデータを、受信したデータの先頭に付加してウイルス検知を行う。【選択図】図１
2019053628.tif 000002
【特許請求の範囲】
【請求項１】
予め定められた第１のデータ長又は予め定められた受信時間にデータを受信した場合、該データに対してウイルス検知を行うウイルス検知手段と、
ウイルス検知を行ったデータをデータ要求元に送信する送信手段
を有し、
前記ウイルス検知手段は、２回目以降に受信したデータをウイルス検知する場合に、前回のウイルス検知を行ったデータを予め定められた第２のデータ長分だけ遡ったデータを、受信したデータの先頭に付加してウイルス検知を行う、
情報処理装置。
【請求項２】
前記予め定められた第２のデータ長として、ウイルス定義においてパターンマッチングするパターンの最長データ数から単位データ長を減算した値以上である、
請求項１に記載の情報処理装置。
【請求項３】
前記第２のデータ長分だけ遡ったデータとは、前回のウイルス検知を行ったデータの最後尾から前記第２のデータ長分のデータを先頭にして、その後に、今回のデータを付加したデータである、
請求項１に記載の情報処理装置。
【請求項４】
データ送信元と該データ送信元からのデータ通信におけるタイムアウト時間との対応を記憶する記憶手段と、
前記予め定められた受信時間として、前記記憶手段に記憶されているタイムアウト時間未満の時間を設定する設定手段
をさらに有する請求項１に記載の情報処理装置。
【請求項５】
前記記憶手段に記憶されるタイムアウト時間は、過去のタイムアウト時間の履歴から生成された値である、
請求項４に記載の情報処理装置。
【請求項６】
前記記憶手段に記憶されるタイムアウト時間は、前記データ送信元に対してダミーリクエストを行った場合のタイムアウト時間から生成された値である、
請求項４に記載の情報処理装置。
【請求項７】
前記第１のデータ長は、前記記憶手段に記憶されているタイムアウト時間から生成された値である、
請求項４に記載の情報処理装置。
【請求項８】
前記送信手段は、２回目以降にデータを前記データ要求元に送信する場合、前回送信したデータを含めないようにする、
請求項１に記載の情報処理装置。
【請求項９】
前記送信手段は、ウイルス検知を行ったデータの先頭から前記第２のデータ長分のデータを削除して、前記データ要求元に送信する、
請求項８に記載の情報処理装置。
【請求項１０】
コンピュータを、
予め定められた第１のデータ長又は予め定められた受信時間にデータを受信した場合、該データに対してウイルス検知を行うウイルス検知手段と、
ウイルス検知を行ったデータをデータ要求元に送信する送信手段
として機能させ、
前記ウイルス検知手段は、２回目以降に受信したデータをウイルス検知する場合に、前回のウイルス検知を行ったデータを予め定められた第２のデータ長分だけ遡ったデータを、受信したデータの先頭に付加してウイルス検知を行う、
情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理プログラムに関する。
【背景技術】
【０００２】
特許文献１には、通信データの安全性を確認する処理を行う装置の負荷を軽減することを課題とし、信頼情報生成部は、複数の通信インタフェースのうち、インターネットを介して接続された装置との間の通信に用いられるものを上流とし、その他を下流とし、下流の通信インタフェースを用いた通信における通信相手を表す情報を信頼情報として生成し、信頼情報送信部は、生成された信頼情報を上流の通信インタフェースから送信し、信頼情報登録部は、他の装置から受信した信頼情報を信頼情報記憶部に登録し、中継処理手段のウイルスチェック処理部は、上流の通信インタフェースにおいて受信したパケットの送信先を表す情報が信頼情報記憶部に登録された前記信頼情報に含まれていない場合に、当該パケットについてウイルスチェック処理を実行することが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−０５３８８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
クライアント端末とサーバーとの間にあって、両者間のデータの送受信を制御する中継装置がある。その中継装置ではウイルス検知処理が行われる。そして、ウイルスが検知されなかった場合に、クライアント端末にサーバーから送信されたデータを送信する。
ところで、送信するデータ量が膨大である場合に、ウイルス検知に時間がかかりタイムアウトが発生することがある。そこで、データを分割して、送受信を行う必要があるが、そのデータの切れ目においては、ウイルス検知ができない。
本発明は、データを分割して送受信する場合、データの切れ目においてもウイルス検知を行うことができる情報処理装置及び情報処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００５】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項１の発明は、予め定められた第１のデータ長又は予め定められた受信時間にデータを受信した場合、該データに対してウイルス検知を行うウイルス検知手段と、ウイルス検知を行ったデータをデータ要求元に送信する送信手段を有し、前記ウイルス検知手段は、２回目以降に受信したデータをウイルス検知する場合に、前回のウイルス検知を行ったデータを予め定められた第２のデータ長分だけ遡ったデータを、受信したデータの先頭に付加してウイルス検知を行う、情報処理装置である。
【０００６】
請求項２の発明は、前記予め定められた第２のデータ長として、ウイルス定義においてパターンマッチングするパターンの最長データ数から単位データ長を減算した値以上である、請求項１に記載の情報処理装置である。
【０００７】
請求項３の発明は、前記第２のデータ長分だけ遡ったデータとは、前回のウイルス検知を行ったデータの最後尾から前記第２のデータ長分のデータを先頭にして、その後に、今回のデータを付加したデータである、請求項１に記載の情報処理装置である。
【０００８】
請求項４の発明は、データ送信元と該データ送信元からのデータ通信におけるタイムアウト時間との対応を記憶する記憶手段と、前記予め定められた受信時間として、前記記憶手段に記憶されているタイムアウト時間未満の時間を設定する設定手段をさらに有する請求項１に記載の情報処理装置である。
【０００９】
請求項５の発明は、前記記憶手段に記憶されるタイムアウト時間は、過去のタイムアウト時間の履歴から生成された値である、請求項４に記載の情報処理装置である。
【００１０】
請求項６の発明は、前記記憶手段に記憶されるタイムアウト時間は、前記データ送信元に対してダミーリクエストを行った場合のタイムアウト時間から生成された値である、請求項４に記載の情報処理装置である。
【００１１】
請求項７の発明は、前記第１のデータ長は、前記記憶手段に記憶されているタイムアウト時間から生成された値である、請求項４に記載の情報処理装置である。
【００１２】
請求項８の発明は、前記送信手段は、２回目以降にデータを前記データ要求元に送信する場合、前回送信したデータを含めないようにする、請求項１に記載の情報処理装置である。
【００１３】
請求項９の発明は、前記送信手段は、ウイルス検知を行ったデータの先頭から前記第２のデータ長分のデータを削除して、前記データ要求元に送信する、請求項８に記載の情報処理装置である。
【００１４】
請求項１０の発明は、コンピュータを、予め定められた第１のデータ長又は予め定められた受信時間にデータを受信した場合、該データに対してウイルス検知を行うウイルス検知手段と、ウイルス検知を行ったデータをデータ要求元に送信する送信手段として機能させ、前記ウイルス検知手段は、２回目以降に受信したデータをウイルス検知する場合に、前回のウイルス検知を行ったデータを予め定められた第２のデータ長分だけ遡ったデータを、受信したデータの先頭に付加してウイルス検知を行う、情報処理プログラムである。
【発明の効果】
【００１５】
請求項１の情報処理装置によれば、データを分割して送受信する場合、データの切れ目においてもウイルス検知を行うことができる。
【００１６】
請求項２の情報処理装置によれば、予め定められた第２のデータ長として、ウイルス定義においてパターンマッチングするパターンの最長データ数から単位データ長を減算した値以上とすることができる。
【００１７】
請求項３の情報処理装置によれば、第２のデータ長分だけ遡ったデータとは、前回のウイルス検知を行ったデータの最後尾から第２のデータ長分のデータを先頭にして、その後に、今回のデータを付加したデータとすることができる。
【００１８】
請求項４の情報処理装置によれば、予め定められた受信時間として、記憶手段に記憶されているタイムアウト時間未満の時間を設定することができる。
【００１９】
請求項５の情報処理装置によれば、過去のタイムアウト時間の履歴から生成された値をタイムアウト時間として記憶手段に記憶させることができる。
【００２０】
請求項６の情報処理装置によれば、データ送信元に対してダミーリクエストを行った場合のタイムアウト時間から生成された値をタイムアウト時間として記憶手段に記憶させることができる。
【００２１】
請求項７の情報処理装置によれば、タイムアウト時間から第１のデータ長を生成することができる。
【００２２】
請求項８の情報処理装置によれば、２回目以降にデータをデータ要求元に送信する場合、前回送信したデータを含めないようにすることができる。
【００２３】
請求項９の情報処理装置によれば、ウイルス検知を行ったデータの先頭から第２のデータ長分のデータを削除して、データ要求元に送信することができる。
【００２４】
請求項１０の情報処理プログラムによれば、データを分割して送受信する場合、データの切れ目においてもウイルス検知を行うことができる。
【図面の簡単な説明】
【００２５】
【図１】本実施の形態の構成例についての概念的なモジュール構成図である。
【図２】本実施の形態を利用したシステム構成例を示す説明図である。
【図３】本実施の形態による処理例を示すフローチャートである。
【図４】本実施の形態による処理例を示す説明図である。
【図５】ウイルスを見逃してしまう処理例を示す説明図である。
【図６】本実施の形態による処理例を示す説明図である。
【図７】データを分割せずに送信した場合の処理例を示すフローチャートである。
【図８】本実施の形態による処理例を示す説明図である。
【図９】本実施の形態による処理例を示すフローチャートである。
【図１０】本実施の形態による処理例を示すフローチャートである。
【図１１】本実施の形態による処理例を示すフローチャートである。
【図１２】ウイルスチェック属性テーブルのデータ構造例を示す説明図である。
【図１３】タイムアウト定義テーブルのデータ構造例を示す説明図である。
【図１４】レスポンスデータ属性テーブルのデータ構造例を示す説明図である。
【図１５】本実施の形態による処理例を示すフローチャートである。
【図１６】本実施の形態による処理例を示す説明図である。
【図１７】本実施の形態によるタイムアウト定義テーブルの例を示す説明図である。
【図１８】本実施の形態による処理例を示すフローチャートである。
【図１９】本実施の形態による処理例を示す説明図である。
【図２０】本実施の形態による処理例を示す説明図である。
【図２１】ウイルスチェックテーブルのデータ構造例を示す説明図である。
【図２２】本実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【００２６】
まず、本実施の形態を説明する前に、その前提又は本実施の形態を利用する中継装置について説明する。なお、この説明は、本実施の形態の理解を容易にすることを目的とするものである。
インターネット等の通信回線を通して業務を行うことが一般化する状況で、スタンドアロンとしてのパソコン等の内部のデータだけではなく通信回線上を流れるデータの安全性も求められている。
そこで、特許文献１に記載の技術のように、通信回線と接続するパソコンとその通信回線の間にウイルスチェックを行う中継装置を設置し、パソコンへ送信されるデータに対して中継装置でウイルスチェックを行う技術が存在する。
一般的手法としてクライアントであるパソコンが通信回線上のコンテンツをダウンロードした場合、次のようにウイルスチェックが行われる。
・通信回線上のサーバーがリクエストに対するコンテンツをクライアントへ送信する。
・中継装置はコンテンツデータを受け取ると、クライアントへの転送は行わず、データをバッファする。
・中継装置はコンテンツデータ全体を受け取ると、コンテンツに対してウイルスチェックを行う。
・ウイルスが検知されなかった場合はコンテンツをクライアントへ転送を行う。
【００２７】
中継装置はウイルスチェックが完了したデータをパソコンに返すため巨大なデータをダウンロードする場合や、データ送信サーバーの送信が遅い場合では、ウイルスチェックを完了するまでパソコンへ何も応答が渡らなくなるためサーバーより、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）タイムアウトが発生してしまう恐れがある。
そこで、ＴＣＰタイムアウトを発生させないため、ウイルスチェックをかけていないデータをウイルスチェックを行わずにそのまま送り、データ全体が揃い次第ウイルスチェックを行い、その結果を後追いで受信元に伝えるという方法が考えられる。しかし、そのようにした場合、ウイルスチェックをかけていないデータが受信元に渡ってしまうためセキュリティが担保できなくなる。このようにＴＣＰタイムアウトを起こさないこととセキュリティの担保を同時に実現することに課題がある。
【００２８】
以下、図面に基づき本発明を実現するにあたっての好適な一実施の形態の例を説明する。
図１は、本実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア（コンピュータ・プログラム）、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、それらのモジュールとして機能させるためのコンピュータ・プログラム（コンピュータにそれぞれの手順を実行させるためのプログラム、コンピュータをそれぞれの手段として機能させるためのプログラム、コンピュータにそれぞれの機能を実現させるためのプログラム）、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するという意味である。また、モジュールは機能に一対一に対応していてもよいが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。なお、１つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続（データの授受、指示、データ間の参照関係、ログイン等）の場合にも用いる。「予め定められた」とは、対象としている処理の前に定まっていることをいい、本実施の形態による処理が始まる前はもちろんのこと、本実施の形態による処理が始まった後であっても、対象としている処理の前であれば、そのときの状況・状態にしたがって、又はそれまでの状況・状態にしたがって定まることの意を含めて用いる。「予め定められた値」が複数ある場合は、それぞれ異なった値であってもよいし、２以上の値（もちろんのことながら、全ての値も含む）が同じであってもよい。また、「Ａである場合、Ｂをする」という記載は、「Ａであるか否かを判断し、Ａであると判断した場合はＢをする」の意味で用いる。ただし、Ａであるか否かの判断が不要である場合を除く。また、「Ａ、Ｂ、Ｃ」等のように事物を列挙した場合は、断りがない限り例示列挙であり、その１つのみを選んでいる場合（例えば、Ａのみ）を含む。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク（一対一対応の通信接続を含む）等の通信手段で接続されて構成されるほか、１つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。もちろんのことながら、「システム」には、人為的な取り決めである社会的な「仕組み」（社会システム）にすぎないものは含まない。
また、各モジュールによる処理毎に又はモジュール内で複数の処理を行う場合はその処理毎に、対象となる情報を記憶装置から読み込み、その処理を行った後に、処理結果を記憶装置に書き出すものである。したがって、処理前の記憶装置からの読み込み、処理後の記憶装置への書き出しについては、説明を省略する場合がある。なお、ここでの記憶装置としては、ハードディスク、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、外部記憶媒体、通信回線を介した記憶装置、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）内のレジスタ等を含んでいてもよい。
【００２９】
本実施の形態である情報処理装置１００は、透過型ウイルス検知を行うものであって、図１の例に示すように、受信モジュール１０５、ウイルスチェックモジュール１１０、ウイルスチェック属性保持モジュール１１５、レスポンスデータ保持モジュール１２０、レスポンスデータ送信モジュール１２５、レスポンスデータ属性保持モジュール１３０、リクエストデータ解析モジュール１３５、タイムアウト定義保持モジュール１４０、タイマーモジュール１４５を有している。
情報処理装置１００は、データ要求元（図１の例では、クライアント２１０）とデータ送信元（図１の例では、サーバー２５０）との間のデータの送受信を中継するものである。データ要求元からの要求にしたがって、データ送信元から送信されるデータを受信し、データ要求元にそのデータを送信するにあたって、そのデータのウイルス検知（ウイルスチェック、ウイルススキャン、ウイルス検索ともいわれる。以下、ウイルスチェックともいう）を行うものである。いわゆる透過型ウイルス検知（又は、ゲートウェイ型ウイルス検知）を行う。送信対象であるデータの容量が大きいため、複数回の送受信を行う。そのため、データの切れ目におけるウイルス検知が問題になる。
【００３０】
タイムアウト（以下、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）タイムアウトともいう）回避のため、情報処理装置１００はウイルス検知をかけたデータを、クライアント２１０に対して都度送信する。
つまり、ある程度の長さのデータに対してウイルス検知を行うことになる。データ全体ではなく、部分的にウイルス検知をかけていくことになるので、切れ目にあるウイルスを見逃さないようにする必要がある。データを分割してウイルス検知を行った場合、分割方法によってはウイルスを見逃してしまう可能性がある（図５の例を用いて後述する）。ウイルス検知時には、前回ウイルス検知をかけた部分から最長のウイルスパターン定義分遡ってウイルス検知を行う。
また、ウイルス検知の回数を減らすため、情報処理装置１００はタイムアウトが発生しない程度にデータの受信を行い、できるだけ多くのデータに対してウイルス検知を行う。
【００３１】
受信モジュール１０５は、ウイルスチェックモジュール１１０、レスポンスデータ保持モジュール１２０、サーバー２５０と接続されている。受信モジュール１０５は、サーバー２５０からの送信されてきたデータを受信する。そのデータをウイルスチェックモジュール１１０、レスポンスデータ保持モジュール１２０に渡す。
【００３２】
ウイルスチェックモジュール１１０は、受信モジュール１０５、ウイルスチェック属性保持モジュール１１５、レスポンスデータ保持モジュール１２０、タイマーモジュール１４５と接続されている。ウイルスチェックモジュール１１０は、受信モジュール１０５が受信したデータに対してウイルス検知を行う。ウイルスチェックモジュール１１０は、予め定められた第１のデータ長又は予め定められた受信時間にデータを受信した場合、そのデータに対してウイルス検知を行う。
そして、ウイルスチェックモジュール１１０は、２回目以降に受信したデータをウイルス検知する場合に、前回のウイルス検知を行ったデータを予め定められた第２のデータ長分だけ遡ったデータを、受信したデータ（２回目以降に受信したデータ）の先頭に付加してウイルス検知を行う。
ここでのウイルス検知は、対象となっているデータに対して、予め用意されたウイルスパターンによるパターンマッチングを行う処理である。対象となっているデータ内に、ウイルスパターンが含まれている場合は、そのデータにウイルスが埋め込まれていることを意味する。
ここで「予め定められた第２のデータ長」として、ウイルス定義においてパターンマッチングするパターンの最長データ長から単位データ長を減算した値以上としてもよい。ここで「単位データ長」としては、取り扱うことができるデータの最小データ長をいい、例えば、１文字（例えば、８ビット、１６ビット等）、１ビット等であってもよい。単位データ長を減算するのは、前回のウイルス検知の対象となったデータにおいて、最後尾から「パターンの最長データ長」分のデータは、既に前回のウイルス検知が行われているからである。もちろんのことながら、遡るデータ長は、「パターンの最長データ長から単位データ長を減算した値以上」であれば、パターンの最長データ長、又は、パターンの最長データ長より長いデータ長であってもよい。つまり、「ウイルス定義においてパターンマッチングするパターンの最長データ長」の場合は、前回のウイルス検知によってウイルス検知が行われていることになるので、今回のウイルス検知は不要であるが、それらも含めてウイルス検知を行うようにしてもよい。
また「第２のデータ長分だけ遡ったデータ」として、前回のウイルス検知を行ったデータの最後尾から第２のデータ長分のデータを先頭にして、その後に、今回のデータを付加したデータとしてもよい。
【００３３】
ウイルスチェック属性保持モジュール１１５は、ウイルスチェックモジュール１１０と接続されている。ウイルスチェック属性保持モジュール１１５は、どこまでウイルス検知を行ったか判断するためウイルス検知を行ったデータ長を保持する。ウイルスチェック属性保持モジュール１１５は、例えば、ウイルスチェック属性テーブル１２００を記憶している。図１２は、ウイルスチェック属性テーブル１２００のデータ構造例を示す説明図である。ウイルスチェック属性テーブル１２００は、全データ長欄１２１０、ウイルスチェック済データ長欄１２２０を有している。全データ長欄１２１０は、全データ長を記憶している。ウイルスチェック済データ長欄１２２０は、ウイルスチェック済データ長を記憶している。
【００３４】
レスポンスデータ保持モジュール１２０は、受信モジュール１０５、ウイルスチェックモジュール１１０、レスポンスデータ送信モジュール１２５と接続されている。レスポンスデータ保持モジュール１２０は、サーバー２５０から送信されてきたレスポンスデータ（対象となるデータを含む）を保持する。
【００３５】
レスポンスデータ送信モジュール１２５は、レスポンスデータ保持モジュール１２０、レスポンスデータ属性保持モジュール１３０、クライアント２１０と接続されている。レスポンスデータ送信モジュール１２５は、ウイルス検知を行ったデータをデータ要求元に送信する。図１での「データ要求元」は、クライアント２１０である。つまり、ウイルスチェックモジュール１１０によってウイルス検知が行われたレスポンスデータ（レスポンスデータ保持モジュール１２０に保持されたレスポンスデータ）を、クライアント２１０に送信する。もちろんのことながら、クライアント２１０に送信するデータは、ウイルス検知を行った結果、ウイルスが無いと判断されたデータであって、ウイルスがあると判断されたデータは送信しない。
レスポンスデータ送信モジュール１２５は、２回目以降にデータをデータ要求元に送信する場合、前回送信したデータを含めないようにするようにしてもよい。ウイルス検知は、遡ったデータであるが、データ自体の送信は、遡って送信する必要はないからである。
レスポンスデータ送信モジュール１２５は、ウイルス検知を行ったデータの先頭から第２のデータ長分のデータを削除して、データ要求元に送信するようにしてもよい。
【００３６】
レスポンスデータ属性保持モジュール１３０は、レスポンスデータ送信モジュール１２５と接続されている。レスポンスデータ属性保持モジュール１３０は、レスポンスデータ送信モジュール１２５の処理結果（既にクライアント２１０に送信したレスポンスデータ長等）を保持しており、次回のレスポンスデータ送信モジュール１２５による送信処理に利用される。どこまでクライアント２１０へデータを送信したかを判断できるため、遡ってウイルス検知を行ったデータを重複することなくクライアント２１０へ送信することができるようになる。ウイルス検知は前データに対して遡って実行する必要があるが、データ自体の送信は、遡って送信する必要がないためである。
レスポンスデータ属性保持モジュール１３０は、例えば、レスポンスデータ属性テーブル１４００を記憶している。図１４は、レスポンスデータ属性テーブル１４００のデータ構造例を示す説明図である。レスポンスデータ属性テーブル１４００は、全データ長欄１４１０、送信済レスポンスデータ長欄１４２０を有している。全データ長欄１４１０は、全データ長を記憶している。送信済レスポンスデータ長欄１４２０は、送信済レスポンスデータ長を記憶している。
【００３７】
リクエストデータ解析モジュール１３５は、タイムアウト定義保持モジュール１４０、クライアント２１０と接続されている。リクエストデータ解析モジュール１３５は、クライアント２１０からサーバー２５０へのリクエストデータを受信し、そのリクエストデータを解析する。例えば、リクエスト先のサーバー２５０を特定し、そのサーバー２５０をタイムアウト定義保持モジュール１４０に渡す。
【００３８】
タイムアウト定義保持モジュール１４０は、リクエストデータ解析モジュール１３５、タイマーモジュール１４５と接続されている。タイムアウト定義保持モジュール１４０は、データ送信元とそのデータ送信元からのデータ通信におけるタイムアウト時間との対応を記憶する。ここでの「データ送信元」は、リクエストデータ解析モジュール１３５から渡されたリクエスト先であるサーバー２５０である。タイムアウト定義保持モジュール１４０は、例えば、タイムアウト定義テーブル１３００を記憶している。図１３は、タイムアウト定義テーブル１３００のデータ構造例を示す説明図である。タイムアウト定義テーブル１３００は、接続先欄１３１０、ＴＣＰタイムアウト値欄１３２０を有している。接続先欄１３１０は、接続先を記憶している。ＴＣＰタイムアウト値欄１３２０は、その接続先におけるＴＣＰタイムアウト値を記憶している。
【００３９】
タイムアウト定義保持モジュール１４０に記憶されるタイムアウト時間は、過去のタイムアウト時間の履歴から生成された値としてもよい。いわゆる過去のログデータ（タイムアウトが発生した時間）から学習して、タイムアウト時間を決定してもよい。学習には、統計的値（平均値、中央値、最頻値等）を算出すること、機械学習を用いること等がある。機械学習として、既存の手法を用いればよい。例えば、ニューラルネットワーク、サポートベクターマシン、クラスタリング等を用いればよい。
タイムアウト定義保持モジュール１４０に記憶されるタイムアウト時間は、データ送信元に対してダミーリクエストを行った場合のタイムアウト時間から生成された値としてもよい。ダミーリクエストを行って、タイムアウト時間を生成する処理については、図１５の例を用いて後述する。
また、第１のデータ長は、タイムアウト定義保持モジュール１４０に記憶されているタイムアウト時間から生成された値としてもよい。例えば、そのタイムアウト時間内で受信できるデータ長を、第１のデータ長としてもよい。
【００４０】
タイマーモジュール１４５は、ウイルスチェックモジュール１１０、タイムアウト定義保持モジュール１４０と接続されている。タイマーモジュール１４５は、予め定められた受信時間として、タイムアウト定義保持モジュール１４０に記憶されているタイムアウト時間未満の時間を設定する。そして、タイマーモジュール１４５は、時間を検知してタイムアウトが発生するかを確認する。具体的には、サーバー２５０に対してリクエストを送信したときに、タイマーを始動させ、タイムアウト時間前になったら（タイムアウト時間から予め定められた範囲内になったら）、受信モジュール１０５、ウイルスチェックモジュール１１０に通知する。
これによって、タイムアウトが発生する直前までデータを受信できるため、ウイルスチェックの回数を減らすことができる。
【００４１】
クライアント２１０は、情報処理装置１００のレスポンスデータ送信モジュール１２５、リクエストデータ解析モジュール１３５と接続されている。クライアント２１０は、ユーザーの操作等によって、サーバー２５０に対してデータの送信を要求するものであって、例えば、通信機能のあるパソコン、携帯情報通信機器、画像処理装置等がある。
サーバー２５０は、情報処理装置１００の受信モジュール１０５と接続されている。サーバー２５０は、クライアント２１０に対してデータを送信する。例えば、文書サーバー、動画配信サーバー等がある。
【００４２】
情報処理装置１００によって、ウイルス検知を行ったデータを都度クライアント２１０へ渡せるためタイムアウトを抑制できるようになる。そして、データを遡ってウイル検知を行うことでウイルス検知の境目をまたがったウイルスデータを検知できるようになる。
【００４３】
図２は、本実施の形態を利用したシステム構成例を示す説明図である。
中継装置２００は、情報処理装置１００を有している。サーバー２５０は、通信回線２９０を介して中継装置２００と接続されている。サーバー２５０による機能は、クラウドサービスとして実現してもよい。中継装置２００は、通信回線２９５を介してクライアント２１０と、通信回線２９０を介してサーバー２５０と接続されている。クライアント２１０は、通信回線２９５を介して中継装置２００と接続されている。
したがって、クライアント２１０がサーバー２５０から取得するデータは、中継装置２００を経由することになる。中継装置２００がウイルス検知を行うことによって、サーバー２５０から送信されてくるデータの安全性（ウイルスが含まれていないデータであることの保証）を確保することができるようになる。
なお、通信回線２９０は、無線、有線、これらの組み合わせであってもよく、例えば、通信インフラとしてのインターネット、イントラネット等であってもよい。通信回線２９５も、同様に、無線、有線、これらの組み合わせであってもよく、例えば、通信インフラとしてのイントラネット等であってもよい。
また、図２では、サーバー２５０とクライアント２１０が１つである簡素な例を示しているが、サーバー２５０と、中継装置２００に接続しているクライアント２１０は、複数あってもよい。
【００４４】
図３は、本実施の形態（特に、ウイルスチェックモジュール１１０）による処理例を示すフローチャートである。
ステップＳ３０２では、予め定められた時間サーバー２５０からの受信したデータをバッファリングし、ＴＣＰタイムアウトが発生する前にウイルスチェックをかける。
なお、この「予め定められた時間」は、サーバー２５０からのＴＣＰタイムアウトが起こらない範囲の時間を指定する。例えば、ＴＣＰタイムアウト時間が、予め検出されているのであれば、タイムアウトが発生しない直前までの時間を指定してもよい。
ステップＳ３０４では、クライアント２１０へウイルスチェックをかけたデータの転送を行う。
【００４５】
ステップＳ３０６では、次に最大のウイルス定義分のデータを受信した時点で、先ほど送信したデータの末尾から最大のウイルス定義分遡ったデータを合わせてウイルスチェックをかける。（例えば、後述する図４の例に示す「２回目のウイルスチェック範囲４９２」を参照。）
ステップＳ３０８では、クライアント２１０へ先ほど転送したデータから新しくウイルスチェックをかけたデータの転送を行う。
ステップＳ３１０では、サーバー２５０からデータの受信がなくなったか否かを判断し、なくなった場合は処理を終了し（ステップＳ３９９）、それ以外の場合はステップＳ３０２へ戻る。
【００４６】
図４は、本実施の形態による処理例を示す説明図である。図３の例に示したフローチャートによる処理例を示すものである。
図４（ａ）の例では、ウイルスチェックの範囲を示している。図４（ｂ）の例では、サーバー２５０から分割して受信したデータ４００を示している。
データ４００を、部分データ４１０、部分データ４２０、部分データ４３０、部分データ４４０、部分データ４５０の順で受信している。部分データ４１０は予め定められた時間受信したデータ長４１２であり、部分データ４２０は最大のウイルス定義長４２２であり、部分データ４３０は予め定められた時間受信したデータ長４３２であり、部分データ４４０は最大のウイルス定義長４４２であり、部分データ４５０は予め定められた時間受信したデータ長４５２である。
部分データ４１０を受信した後に、その部分データ４１０に対して初回のウイルスチェック範囲４９１でのウイルスチェックを行う。次に部分データ４２０を受信した後に、部分データ４１０を最大のウイルス定義長４１４分だけ遡った分（部分データ４１０の最後尾から最大のウイルス定義長４１４の分）と部分データ４２０に対して２回目のウイルスチェック範囲４９２でのウイルスチェックを行う。次に部分データ４３０を受信した後に、部分データ４２０と部分データ４３０に対して３回目のウイルスチェック範囲４９３でのウイルスチェックを行う。次に部分データ４４０を受信した後に、部分データ４３０を最大のウイルス定義長４３４分だけ遡った分と部分データ４４０に対して４回目のウイルスチェック範囲４９４でのウイルスチェックを行う。次に部分データ４５０を受信した後に、部分データ４４０と部分データ４５０に対して５回目のウイルスチェック範囲４９５でのウイルスチェックを行う。
なお、ここでは、前述の「第２のデータ長」として、最大のウイルス定義を用いている。
【００４７】
図５、図６の例を用いて、なぜウイルスチェックを遡らなければいけないかについて説明する。
図５は、ウイルスを見逃してしまう処理例を示す説明図である。データを遡ってウイルスチェックを行わないと、ウイルスチェックの境に存在するウイルスを見逃してしまう例を示したものである。
受信データ５００を、１回目の受信データ５１０、２回目の受信データ５２０、３回目の受信データ５３０の順で受信している。そして、１回目の受信データ５１０にはウイルス５１２が存在しており、２回目の受信データ５２０と３回目の受信データ５３０の境にウイルス５２８が存在している。
１回目の受信データ５１０を受信した後に、ウイルスチェック範囲５９１でのウイルスチェックを行う。この場合、ウイルス５１２を検知することができる。また、２回目の受信データ５２０を受信した後に、ウイルスチェック範囲５９２でのウイルスチェックを行う。この場合、ウイルス５２８を検知することができない。ウイルス５２８の前半部分だけが２回目の受信データ５２０に含まれているので（ウイルス５２８の後半部分が２回目の受信データ５２０に含まれていないので）、ウイルスのパターンに一致しないからである。次に３回目の受信データ５３０を受信した後に、ウイルスチェック範囲５９３でのウイルスチェックを行う。この場合、ウイルス５２８を検知することができない。ウイルス５２８の後半部分だけが３回目の受信データ５３０に含まれているので（ウイルス５２８の前半部分が３回目の受信データ５３０に含まれていないので）、ウイルスのパターンに一致しないからである。結局、図５の例では、２回目の受信データ５２０と３回目の受信データ５３０にまたがって存在しているウイルス５２８を検知することができない。
【００４８】
図６は、本実施の形態による処理例を示す説明図である。
対象とするデータは、図５（ｂ）の例に示した受信データ５００と同じである。つまり、１回目の受信データ５１０にはウイルス５１２が存在しており、２回目の受信データ５２０と３回目の受信データ５３０の境にウイルス５１４が存在している。
図６（ａ）の例に示すウイルスチェックでは、１回目の受信データ５１０を受信した後に、ウイルスチェック範囲６８１でのウイルスチェックを行う。この場合、ウイルス５１２を検知することができる。２回目の受信データ５２０を受信した後に、ウイルスチェック範囲６８２、ウイルスチェック範囲６８３でのウイルスチェックを行う。３回目の受信データ５３０を受信した後に、ウイルスチェック範囲６８４、ウイルスチェック範囲６８５でのウイルスチェックを行う。この場合、ウイルスチェック範囲６８４でのウイルスチェックによって、ウイルス５１４を検知することができる。なお、ウイルスチェック範囲６８２、ウイルスチェック範囲６８４は、ウイルス定義の最長分６５０の２倍である。
図６（ｂ）の例に示すウイルスチェックでは、１回目の受信データ５１０を受信した後に、ウイルスチェック範囲６９１でのウイルスチェックを行う。この場合、ウイルス５１２を検知することができる。２回目の受信データ５２０を受信した後に、ウイルスチェック範囲６９２、ウイルスチェック範囲６９３でのウイルスチェックを行う。３回目の受信データ５３０を受信した後に、ウイルスチェック範囲６９４、ウイルスチェック範囲６９５でのウイルスチェックを行う。この場合、ウイルスチェック範囲６９４でのウイルスチェックによって、ウイルス５１４を検知することができる。なお、ウイルスチェック範囲６９１とウイルスチェック範囲６９２の重複部分、ウイルスチェック範囲６９２とウイルスチェック範囲６９３の重複部分、ウイルスチェック範囲６９３とウイルスチェック範囲６９４の重複部分、ウイルスチェック範囲６９４とウイルスチェック範囲６９５の重複部分は、ウイルス定義の最長分６５０以上である。
なお、図４、図６（ａ）、図６（ｂ）の例に示すように、ウイルスチェックのかけ方については境界を含めてウイルス定義ファイルの最長分（「第２のデータ長分」の一例）カバーできていれば、区切り方に限定は無い。
【００４９】
図７、図８の例を用いて、データを分割してウイルスチェックを行わなければならない理由を説明する。クライアント（図７の例ではクライアント７１０、図８の例ではクライアント２１０）があるサーバー（図７の例ではサーバー７５０、図８の例ではサーバー２５０）に対して、データ送信のリクエストを送信し、そのサーバーがデータを３回に分けて送信する例を示している。
図７は、データを分割せずに送信した場合の処理例を示すフローチャートである。
ステップＳ７０２では、クライアント７１０は、中継装置７００を介してサーバー７５０に対して、データ送信のリクエストを送信する。
ステップＳ７０４では、サーバー７５０は、中継装置７００に対して、データの１／３を送信する。
ステップＳ７０６では、サーバー７５０は、中継装置７００に対して、ＴＣＰタイムアウトを通知する。ステップＳ７０４の送信に対して、クライアント７１０からの応答がないので、サーバー７５０でＴＣＰタイムアウトが起こり、ステップＳ７０６の処理となる。
つまり、中継装置７００は、全てのデータが揃うまで何もしない。クライアント７１０は、リクエストに対する応答がないので何もしない。サーバー７５０は、データの１／３送信に対する応答がないため、次のデータを送らない。このようにデッドロック状態になってしまう。
【００５０】
図８は、本実施の形態による処理例を示す説明図である。
ステップＳ８０２では、クライアント２１０は、中継装置２００を介してサーバー２５０に対して、データ送信のリクエストを送信する。
ステップＳ８０４では、サーバー２５０は、中継装置２００に対して、データの１／３を送信する。
ステップＳ８０６では、中継装置２００は、そのデータに対してウイルスチェックを行う。
ステップＳ８０８では、中継装置２００は、クライアント２１０に対して、ウイルスチェック済みデータを送信する。
【００５１】
ステップＳ８１０では、クライアント２１０は、中継装置２００に対して、データを受信したことの応答を送信する。
ステップＳ８１２では、中継装置２００は、サーバー２５０に対して、データを受信したことの応答を送信する。
ステップＳ８１４では、サーバー２５０は、中継装置２００に対して、データの２／３を送信する。
ステップＳ８１６では、中継装置２００は、そのデータに対してウイルスチェックを行う。
ステップＳ８１８では、中継装置２００は、クライアント２１０に対して、ウイルスチェック済みデータを送信する。
このように、クライアント２１０が都度応答を返せるため、サーバー２５０ではＴＣＰタイムアウトが発生しない。
【００５２】
図７の例に示すような処理をした場合に比べて、図８の例に示す処理を行った場合は、以下のような効果を得ることになる。
サーバー２５０でのＴＣＰタイムアウトを発生させないようになる。
動画データや音声データなどのリアルタイムに処理されるデータを受信するときに、分割せずにウイルスチェックするときに比べて、クライアント２１０で早く再生ができるようになる。
【００５３】
図９は、本実施の形態による処理例を示すフローチャートである。サーバー２５０へのリクエスト送信の処理例を示すものである。
ステップＳ９０２では、クライアント２１０からのリクエストを受信する。そして、リクエストデータ解析モジュール１３５は、クライアント２１０から受け取ったリクエストデータを解析し接続先情報を入手する。
ステップＳ９０４では、タイムアウト定義保持モジュール１４０から接続先（サーバー２５０）に対するタイムアウト定義を読み出す。具体的には、タイムアウト定義保持モジュール１４０から接続先に対応するタイムアウト値を入手する。
ステップＳ９０６では、タイマーモジュール１４５に、読み出したタイムアウト値を設定する。
ステップＳ９０８では、クライアント２１０からのリクエストデータ受信完了信号を受け取っているか否かを判断し、受け取っている場合は処理を終了し（ステップＳ９９９）、それ以外の場合はステップＳ９１０へ進む。
ステップＳ９１０では、クライアント２１０からリクエストが届くまで待つ。
ステップＳ９１２では、サーバー２５０へリクエストを送信し、ステップＳ９０８へ戻る。
【００５４】
図１０は、本実施の形態による処理例を示すフローチャートである。サーバー２５０からのレスポンス受信の処理例を示すものである。
ステップＳ１００２では、サーバー２５０からレスポンスデータが届くまで待つ。具体的には、受信モジュール１０５はクライアント２１０のリクエストに対するサーバー２５０の全てのレスポンスデータが返ってきたかを監視する。なお、全てのレスポンスデータを受け取っていた場合は処理を終了することになる（ステップＳ１０１０）。そして、受信されたレスポンスデータは一度レスポンスデータ保持モジュール１２０に保存される。保存と同時にタイマーモジュール１４５に設定されたタイムアウト値を確認する。タイムアウト値にまだ近づいていない場合には再度データを受信し、レスポンスデータを保存する。
【００５５】
ステップＳ１００４では、ＴＣＰタイムアウトに近づいているか否かを判断し、近づいている場合はステップＳ１００８へ進み、それ以外の場合はステップＳ１００６へ進む。つまり、ＴＣＰタイムアウト値に近づいていた場合は［ウイルスチェック処理］を実施する。ＴＣＰタイムアウトに近づいているか否かの判断として、例えば、タイマーモジュール１４５で計測している時間（タイマーモジュール１４５を始動させてからの時間）とＴＣＰタイムアウト時間との差分が予め定められた値未満又は以下であるか否かの判断をすればよい。
【００５６】
ステップＳ１００６では、ウイルスチェック処理を行う。ステップＳ１００６の詳細な処理については、図１１の例に示すフローチャートを用いて後述する。
ステップＳ１００８では、クライアント２１０へウイルスチェック済み受信レスポンスデータを送信する。具体的には、ウイルスチェックが完了した後、レスポンスデータ属性保持モジュール１３０に保存された送信済みデータ長を確認し、未送信分からクライアント２１０へデータを送信する。
ステップＳ１０１０では、全てのレスポンスデータの受信が完了したか否かを判断し、完了した場合は処理を終了し（ステップＳ１０９９）、それ以外の場合はステップＳ１００２へ戻る。
【００５７】
図１１は、本実施の形態による処理例を示すフローチャートである。ウイルスチェックの処理例を示すものである。
ステップＳ１１０２では、途中までウイルスチェックをかけているか否かを判断し、かけている場合はステップＳ１１０４へ進み、それ以外の場合はステップＳ１１０８へ進む。具体的には、ウイルスチェック属性保持モジュール１１５より、受信データに対して既にウイルスチェックをどこまでかけたかを取得する。まだウイルスチェックを一度もかけていない場合は、受信データを頭からウイルスチェックをかけることになる（ステップＳ１１０８）。すでにウイルスチェックをかけたデータがあるのであれば、ウイルスチェックモジュール１１０は次の長さ分ウイルスチェックをかける（ステップＳ１１０４、ステップＳ１１０６）。
【００５８】
ステップＳ１１０４では、記憶している前回のウイルスチェック済み位置を読み出す。
ステップＳ１１０６では、チェック済み位置を中心として前後、最長のウイルスパターン定義の長さ分ウイルスチェックを行う。例えば、図４の例に示したように、以下のような処理を行ってもよい。今回が偶数回であるならば、最大ウイルス定義長分だけ遡り、最大ウイルス定義長分新規にウイルスチェックをかける。今回が奇数回であるならば、最大ウイルス定義長分だけ遡り、受信データ分新規にウイルスチェックをかける。
ステップＳ１１０８では、新しく受信したデータの先頭からウイルスチェックを行う。
【００５９】
図１５は、本実施の形態による処理例を示すフローチャートである。タイムアウト時間については、この処理例のようにタイムアウト時間を学習させるようにしてもよい。
ステップＳ１５０２では、クライアント２１０は、中継装置２００に対して、リクエストを送信する。
ステップＳ１５０４では、中継装置２００は、リクエストの送り先（接続先）を複製する。
ステップＳ１５０６では、中継装置２００は、タイマーモジュール１４５を作動する。つまり、中継装置２００から接続先のサーバー２５０へダミーリクエストが送信されたと同時にタイマーモジュール１４５が時間を計測する。
【００６０】
ステップＳ１５０８では、中継装置２００は、サーバー２５０に対して、タイムアウト測定用のダミーリクエストを送信する。つまり、リクエストデータ解析モジュール１３５より接続先を読み取り、タイムアウト計測用のダミーリクエストを生成する。そして、ダミーリクエストと平行して本来のリクエストに対してデフォルトのタイムアウト値を設定し、通常の処理を実施する。
ステップＳ１５１０では、中継装置２００は、サーバー２５０に対して、本来のリクエストを送信する。
ステップＳ１５１２では、サーバー２５０は、中継装置２００に対して、ダミーリクエストに対するレスポンスを送信する。
【００６１】
ステップＳ１５１４では、中継装置２００は、レスポンスを破棄し、応答も返さない。
ステップＳ１５１６では、サーバー２５０は、中継装置２００に対して、本来のリクエストに対するレスポンスを送信する。
ステップＳ１５１８では、中継装置２００は、ウイルスチェックを実施する。
【００６２】
ステップＳ１５２０では、中継装置２００は、クライアント２１０に対して、ウイルスチェック済みレスポンスを送信する。
ステップＳ１５２２では、サーバー２５０は、中継装置２００に対して、ダミーリクエストに対するレスポンスを送信する。
ステップＳ１５２４では、中継装置２００は、レスポンスを破棄し、応答も返さない。
【００６３】
ステップＳ１５２６では、サーバー２５０は、中継装置２００に対して、ＴＣＰタイムアウトを通知する。
ステップＳ１５２８では、中継装置２００は、タイマーモジュール１４５を停止する。つまり、接続先のサーバー２５０からＴＣＰタイムアウトが返って来たならば、タイマーモジュール１４５を停止する。ステップＳ１５０６の時点からＴＣＰタイムアウト時間１５９０の経過後に、ステップＳ１５２８の処理を行うことになる。
ステップＳ１５３０では、中継装置２００は、タイムアウト定義保持モジュール１４０のデータを更新する。具体的には、接続先（サーバー２５０）と経過時間をタイムアウト定義保持モジュール１４０に保存する。
【００６４】
図１６は、本実施の形態による処理例を示す説明図である。
データ１６００は、サーバー２５０がクライアント２１０に送信するデータ例である。この中にウイルスデータ１６１０が含まれているとする。
図１７は、本実施の形態によるタイムアウト定義テーブル１３００の例を示す説明図である。
例えば、「２１６．５８．１９７．１９５」のサーバーでは、ＴＣＰタイムアウト値は２４０であり、「Ｇｏｏｇｇｇ．ｃｏ．ｊｐ」のサーバーでは、ＴＣＰタイムアウト値は１８０であり、「２０２．２２４．４６．１７９」のサーバーでは、ＴＣＰタイムアウト値は３００である。
【００６５】
図１８は、本実施の形態による処理例を示すフローチャートである。図１６、図１７に示した例を用いている。
ステップＳ１８０２では、サーバー２５０は、中継装置２００に対して、データＢ（データＡの１／２）を送信する。具体的には、図１９（ａ）に示すデータ１９１０（データ１６００の前半部分）を送信する。データ１９１０内には、ウイルスデータ１６１０の前半部分（図１９では薄い文字部分）が含まれている。
ステップＳ１８０４では、中継装置２００は、ウイルスチェックを行う。データ１９１０に対して、ウイルスチェックを行う。データ１９１０内にウイルスデータ１６１０の一部分は含まれているが、ウイルスデータ１６１０全体が含まれていないので、ウイルスを検知しない。
【００６６】
ステップＳ１８０６では、中継装置２００は、クライアント２１０に対して、チェック済データを送信する。具体的には、図２０（ａ）に示すウイルスチェック済データ２０１０（データ１９１０と同じ）を送信する。なお、ウイルスデータは実行コードで全て揃わなければ動作しないため、一部だけ送られても問題は発生しない。
ステップＳ１８０８では、クライアント２１０は、中継装置２００に対して、応答する。
ステップＳ１８１０では、中継装置２００は、サーバー２５０に対して、応答する。
【００６７】
ステップＳ１８１２では、サーバー２５０は、中継装置２００に対して、データＣ（データＡの２／２）を送信する。具体的には、図１９（ｂ）に示すデータ１９２０（データ１６００の後半部分）を送信する。データ１９２０内には、ウイルスデータ１６１０の後半部分（図１９では薄い文字部分）が含まれている。
ステップＳ１８１４では、中継装置２００は、ウイルスチェックを行う。データＣを受信した際は、前データであるデータＢの末尾から最大ウイルス定義長分遡ってウイルスチェックを行う。具体的には、図２０（ｂ）に示すウイルスチェック済データ２０２０に対して、ウイルスチェックを行う。ウイルスチェック済データ２０２０内には、ウイルスデータ１６１０（図２０では薄い文字部分）の全体が含まれている。したがって、ウイルスあり（ウイルスを検知した）と判断する。
【００６８】
ステップＳ１８１６では、中継装置２００は、クライアント２１０に対して、ウイルスを検知したことを通知する。
ステップＳ１８１８では、クライアント２１０は、ウイルスデータを破棄する。具体的には、ステップＳ１８０６で送信されてきたウイルスチェック済データ２０１０を破棄する。
【００６９】
なお、中継装置２００内の時点１８５０では、ウイルスチェックテーブル２１００は、図２１（ａ）の例に示すようになっている。
ウイルスチェックテーブル２１００は、接続先欄２１０５、最大ウイルス定義長欄２１１０、受信データ長欄２１１５、総受信データ長欄２１２０、前回チェック終了位置欄２１２５、ウイルス検知欄２１３０を有している。接続先欄２１０５は、接続先を記憶している。最大ウイルス定義長欄２１１０は、最大ウイルス定義長を記憶している。受信データ長欄２１１５は、受信データ長を記憶している。総受信データ長欄２１２０は、総受信データ長を記憶している。前回チェック終了位置欄２１２５は、前回チェック終了位置を記憶している。ウイルス検知欄２１３０は、ウイルス検知の有無を記憶している。
例えば、接続先欄２１０５として「ｈｏｇｅ．ｃｏｍ」、最大ウイルス定義長欄２１１０として２０（ｂｙｔｅ）、受信データ長欄２１１５として１４３（ｂｙｔｅ）、総受信データ長欄２１２０として１４３（ｂｙｔｅ）、前回チェック終了位置欄２１２５として０（ｂｙｔｅ）、ウイルス検知欄２１３０として「なし」を記憶している。
【００７０】
図２１（ｂ）の例に示すウイルスチェックテーブル２１００は、中継装置２００内の時点１８５２における状態を示すものである。
図２１（ａ）と異なるのは、受信データ長欄２１１５が１４３（ｂｙｔｅ）から１４９（ｂｙｔｅ）になっている。つまり、図１９（ｂ）の例に示すデータ１９２０のデータ長である。総受信データ長欄２１２０が１４３（ｂｙｔｅ）から２９２（ｂｙｔｅ）になっている。これは、前回の受信データ長（１４３（ｂｙｔｅ））に今回の受信データ長（１４９（ｂｙｔｅ））を加算したものである。前回チェック終了位置欄２１２５が０（ｂｙｔｅ）から１４３（ｂｙｔｅ）になっている。したがって、ウイルスチェックは、１４３から最大ウイルス定義長の２０を差し引いた値（１２３（ｂｙｔｅ））から行うことになる。そのウイルスチェックの結果、ウイルス検知欄２１３０が「なし」から「あり」になっている。
【００７１】
なお、本実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、図２２に例示するように、一般的なコンピュータであり、具体的にはパーソナルコンピュータ、サーバーとなり得るコンピュータ等である。つまり、具体例として、処理部（演算部）としてＣＰＵ２２０１を用い、記憶装置としてＲＡＭ２２０２、ＲＯＭ２２０３、ＨＤ２２０４を用いている。ＨＤ２２０４として、例えばハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を用いてもよい。受信モジュール１０５、ウイルスチェックモジュール１１０、レスポンスデータ送信モジュール１２５、リクエストデータ解析モジュール１３５、タイマーモジュール１４５等のプログラムを実行するＣＰＵ２２０１と、そのプログラムやデータを記憶するＲＡＭ２２０２と、本コンピュータを起動するためのプログラム等が格納されているＲＯＭ２２０３と、ウイルスチェック属性保持モジュール１１５、レスポンスデータ保持モジュール１２０、レスポンスデータ属性保持モジュール１３０、タイムアウト定義保持モジュール１４０としての機能を有する補助記憶装置（フラッシュ・メモリ等であってもよい）であるＨＤ２２０４と、キーボード、マウス、タッチスクリーン、マイク、カメラ（視線検知カメラ等を含む）等に対する利用者の操作（動作、音声、視線等を含む）に基づいてデータを受け付ける受付装置２２０６と、ＣＲＴ、液晶ディスプレイ、スピーカー等の出力装置２２０５と、ネットワークインタフェースカード等の通信ネットワークと接続するための通信回線インタフェース２２０７、そして、それらをつないでデータのやりとりをするためのバス２２０８により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
【００７２】
前述の実施の形態のうち、コンピュータ・プログラムによるものについては、本ハードウェア構成のシステムにソフトウェアであるコンピュータ・プログラムを読み込ませ、ソフトウェアとハードウェア資源とが協働して、前述の実施の形態が実現される。
なお、図２２に示すハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図２２に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えば特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）等）で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続している形態でもよく、さらに図２２に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、携帯情報通信機器（携帯電話、スマートフォン、モバイル機器、ウェアラブルコンピュータ等を含む）、情報家電、ロボット、複写機、ファックス、スキャナ、プリンタ、複合機（スキャナ、プリンタ、複写機、ファックス等のいずれか２つ以上の機能を有している画像処理装置）などに組み込まれていてもよい。
【００７３】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通等のために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、ブルーレイ・ディスク（Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ）、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去及び書換可能な読出し専用メモリ（ＥＥＰＲＯＭ（登録商標））、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）、ＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリーカード等が含まれる。
そして、前記のプログラムの全体又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、又は無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分若しくは全部であってもよく、又は別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化等、復元可能であればどのような態様で記録されていてもよい。
【符号の説明】
【００７４】
１００…情報処理装置
１０５…受信モジュール
１１０…ウイルスチェックモジュール
１１５…ウイルスチェック属性保持モジュール
１２０…レスポンスデータ保持モジュール
１２５…レスポンスデータ送信モジュール
１３０…レスポンスデータ属性保持モジュール
１３５…リクエストデータ解析モジュール
１４０…タイムアウト定義保持モジュール
１４５…タイマーモジュール
２００…中継装置
２１０…クライアント
２５０…サーバー
２９０…通信回線
２９５…通信回線
【図１】
2019053628.tif 000003
【図２】
2019053628.tif 000004
【図３】
2019053628.tif 000005
【図４】
2019053628.tif 000006
【図５】
2019053628.tif 000007
【図６】
2019053628.tif 000008
【図７】
2019053628.tif 000009
【図８】
2019053628.tif 000010
【図９】
2019053628.tif 000011
【図１０】
2019053628.tif 000012
【図１１】
2019053628.tif 000013
【図１２】
2019053628.tif 000014
【図１３】
2019053628.tif 000015
【図１４】
2019053628.tif 000016
【図１５】
2019053628.tif 000017
【図１６】
2019053628.tif 000018
【図１７】
2019053628.tif 000019
【図１８】
2019053628.tif 000020
【図１９】
2019053628.tif 000021
【図２０】
2019053628.tif 000022
【図２１】
2019053628.tif 000023
【図２２】
2019053628.tif 000024