(57)【要約】【課題】高い汎用性を持って、様々な通信装置の IPv6 の利用形態を把握する技術を提供する。【解決手段】候補アドレス生成部２０２０は、複数の候補アドレスを生成する。各候補アドレスは、IPv6 アドレスのリテラル表記で表したインタフェース ID に所定個以上の０を含む IPv6 アドレスである。送信部２０４０は、候補アドレス生成部２０２０によって生成された各候補 IPv6 アドレスを対象としてメッセージを送信する。検出部２０６０は、ある候補 IPv6 アドレスを対象として送信したメッセージに対する応答を受信した場合に、その候補 IPv6 アドレスを持つノード３０００を、手動設定された IPv6 アドレスを持つノード３０００として検出する。【選択図】図１
2016134895.tif 000002
【特許請求の範囲】
【請求項１】
IPv6 (Internet Protocol version 6) アドレスのリテラル表記で表したインタフェース ID に第１所定個以上の０が含まれる複数の候補 IPv6 アドレスを生成する候補アドレス生成手段と、
各前記候補 IPv6 アドレスを対象としてメッセージを送信する送信手段と、
ある候補 IPv6 アドレスを対象として送信したメッセージに対する応答を受信した場合に、その候補 IPv6 アドレスを持つノードを、手動設定された IPv6 アドレスを持つノードとして検出する検出手段と、
を有するノード検出装置。
【請求項２】
前記候補アドレス生成手段は、IPv6 アドレスのリテラル表記で表したインタフェース ID が０を第２所定個以上連続して含む前記候補 IPv6 アドレスを生成する請求項１に記載のノード検出装置。
【請求項３】
前記候補アドレス生成手段は、IPv6 アドレスのリテラル表記で表したインタフェース ID の一部が省略できる前記候補 IPv6 アドレスを生成する請求項２に記載のノード検出装置。
【請求項４】
前記アドレス生成手段は、
インタフェースＩＤに含まれる４つのセクションのうち、３つのセクションの各桁の値が全て０であり、残りの１つのセクションが０でない値を含む候補 IPv6 アドレスを生成するか、又は、
インタフェースＩＤに含まれる４つのセクションのうち、隣接する２つのセクションの各桁の値が全て０であり、残りの２つのセクションがそれぞれ０でない値を含む候補 IPv6 アドレスを生成する、
請求項３に記載のノード検出装置。
【請求項５】
前記アドレス生成手段は、IPv6 アドレスのリテラル表記で表したインタフェース ID に含まれる０の個数が多い候補 IPv6 アドレスほど優先的に生成する請求項１乃至４いずれか一項に記載のノード検出装置。
【請求項６】
前記アドレス生成手段は、IPv6 アドレスのリテラル表記で表したインタフェース ID に含まれる連続する０の個数が多い候補 IPv6 アドレスほど優先的に生成する請求項２乃至４いずれか一項に記載のノード検出装置。
【請求項７】
前記アドレス生成手段は、IPv6 アドレスのリテラル表記で表す際に省略できる部分が多い候補 IPv6 アドレスほど優先的に生成する請求項３又は４に記載のノード検出装置。
【請求項８】
前記送信手段が前記候補 IPv6 アドレスを宛先とする Echo Request メッセージを送信し、かつ前記検出手段がその Echo Request メッセージに対する応答である Echo Reply メッセージを受信することで手動設定された IPv6 アドレスを持つノードを検出するか、又は、
前記送信手段が前記候補 IPv6 アドレスをターゲットアドレスとする Neighbor Solicitation メッセージを送信し、かつ前記検出手段がその Neighbor Solicitation メッセージに対する応答である Neighbor Advertisement メッセージを受信することで手動設定された IPv6 アドレスを持つノードを検出する、
請求項１乃至７いずれか一項に記載のノード検出装置。
【請求項９】
判定対象の IPv6 アドレスを取得するアドレス取得手段と、
IPv6 アドレスのリテラル表記で表した前記判定対象の IPv6 アドレスのインタフェース ID が、第１所定個以上０を含む場合、第２所定個以上連続して０を含む場合、又は一部が省略できる場合に、前記判定対象の IPv6 アドレスは手動で設定された IPv6 アドレスであると判定する判定手段と、
を有する請求項１乃至８いずれか一項に記載のノード検出装置。
【請求項１０】
コンピュータによって実行される制御方法であって、
IPv6 (Internet Protocol version 6) アドレスのリテラル表記で表したインタフェース ID に第１所定個以上の０が含まれる複数の候補 IPv6 アドレスを生成する候補アドレス生成ステップと、
各前記候補 IPv6 アドレスを対象としてメッセージを送信する送信ステップと、
ある候補 IPv6 アドレスを対象として送信したメッセージに対する応答を受信した場合に、その候補 IPv6 アドレスを持つノードを、手動設定された IPv6 アドレスを持つノードとして検出する検出ステップと、
を有する制御方法。
【請求項１１】
コンピュータを請求項１乃至９いずれか一項に記載のノード検出装置として動作させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、IPv6（Internet Protocol version 6）に関する。
【背景技術】
【０００２】
現在、PC（Personal Computer）や携帯機器等の様々な計算機において、既に IPv6 がサポートされており、ネットワークには既に IPv6 パケットが流れている。今後新たに取得されるグローバルアドレスは、IPv6 アドレスしかなく、今後、更に急速に、ネットワークの IPv6 化が進むことになる。これにより、IPv4 と IPv6 とが混在する環境が今後拡大していくことになる。ここで、以下、携帯機器、又は仮想マシン等の計算機を、ノードとも表記する。また、IPv6 をサポートする計算機を、IPv6 マシンと表記する。
【０００３】
ネットワークに IPv6 が導入されたことに伴い、IPv6 マシンが存在するネットワークを管理する方法が求められている。例えば特許文献１は、IPv6 のネットワークにおいて、不正接続の検出、及び不正接続端末を遮断する技術を開示している。
【０００４】
その他にも、IPv6 を扱う先行技術文献として、以下に示す特許文献２〜８がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２８７２９９号公報
【特許文献２】特開２００５−３３３６８４号公報
【特許文献３】特開２００４−１２８７２７号公報
【特許文献４】特開２００９−１００３６３号公報
【特許文献５】特開２０１０−０６３１１０号公報
【特許文献６】特開２０１０−１０９５６８号公報
【特許文献７】特開２０１１−１２４７７７号公報
【特許文献８】特開２００６−３１９８６３号公報
【非特許文献】
【０００６】
【非特許文献１】RFC（Request for Comments）3041、［online］、［平成２６年１０月８日検索］、インターネット＜URL : http://tools.ietf.org/html/rfc3041」＞
【非特許文献２】RFC4291、［online］、［平成２６年１０月８日検索］、インターネット＜URL : http://tools.ietf.org/html/rfc4291」＞
【非特許文献３】RFC4443、［online］、［平成２６年１０月８日検索］、インターネット＜URL : http://tools.ietf.org/html/rfc4443」＞
【非特許文献４】RFC4861、［online］、［平成２６年１０月８日検索］、インターネット＜URL : http://tools.ietf.org/html/rfc4861」＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
現状、公衆網だけでなく、企業網等のプライベート網においても、IPv6 の利用形態が把握されていない状況にある。例えば、或るネットワーク内における各端末に関し IPv4 アドレスは管理されている可能性が高いが、各端末が IPv6 をサポートしているか否か、各端末が IPv6 通信を行っているか否か等については、管理されていない。
【０００８】
このような状況にある原因の１つは、IPv6 のネットワーク管理の難しさにある。IPv6 ネットワークを管理する方法は、IPv4 ネットワークを管理する方法を単純に IPv6 ネットワークに適用するだけでは成立しない。
【０００９】
IPv4 と IPv6 との顕著な違いの１つとして、アドレス空間の広さがある。具体的には、IPv6 のアドレス空間は１２８ビットであり、IPv4 のアドレス空間は３２ビットである。よって、IPv6 で表現できるアドレスの数は、IPv4 アドレスで表現できる数の２の９６乗倍となる。このように IPv6 のアドレス空間は IPv4 のアドレス空間と比較して広大であるため、IPv4 ネットワークの管理手法を単純に IPv6 ネットワークの管理に適用すると、現実的な時間では終わらない処理もあり、このような処理は実質的に実行不可能となる。
【００１０】
また、IPv6 では、１つのネットワークインタフェースに、リンクローカルアドレス、グローバルアドレス、及びユニークローカルアドレスといった複数の IPv6 アドレスが設定されうる。さらに、IPv6 には、アドレス自動設定機能がある。例えば、リンクローカルアドレスは、IPv6 プロトコルスタック起動時に、レイヤ２アドレス（MAC（Media Access Control）アドレスなど）に応じて自動的に設定される。ここで、レイヤ２とは、OSI（Open Systems Interconnection）参照モデルにおけるデータリンク層を意味する。また例えば、グローバルアドレスは、RA（Router Advertisement）や DHCPv6（IPv6 用のDynamic Host Configuration Protocol）に応じて、自動的に設定される。その他、IPv6 アドレスは手動でも設定可能である。更に、IPv6 アドレスは、状態管理されており、RFC3041（非特許文献１）で定義されるテンポラリアドレスのように更新されるアドレスや、期限切れで捨てられるアドレスも存在し得る。
【００１１】
このように IPv6 環境では、各通信装置に対し、ユーザが意図しない状態で、複数の IPv6  アドレスがそれぞれ設定され、設定された IPv6 アドレスが時間に応じて更新される。このことからも、IPv6 のネットワークは、IPv4 のネットワークよりも管理が難しいと言える。
【００１２】
IPv6 の利用形態が正確に把握されていない状況のままで IPv6 の導入が進めば、ある種の混沌状態に陥る可能性がある。このような混沌状態では、通信不可、通信遅延等の通信障害が発生する可能性がある。
【００１３】
そのため、IPv6 導入において、このような混沌状態を正しく整理し、通信障害の影響を低減させることが重要となる。即ち、ネットワーク内の IPv6 の利用形態を正しく把握することが重要となる。
【００１４】
ただし、この把握にあたり、非検出側に多くの制約を設けたのでは、現状の膨大な数かつ様々な形態のネットワークに対応することができなくなってしまう。非検出側への制約には、例えば、非検出側となる各通信装置への機能追加や機能修正の必要性、ネットワーク形態の条件等がある。
【００１５】
本発明は、このような点を考慮してなされたものであり、高い汎用性を持って、様々な通信装置の IPv6 の利用形態を把握する技術を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明が提供するノード検出装置は、IPv6 (Internet Protocol version 6) アドレスのリテラル表記で表したインタフェース ID に第１所定個以上の０が含まれる複数の候補 IPv6 アドレスを生成する候補アドレス生成手段と、各前記候補 IPv6 アドレスを対象としてメッセージを送信する送信手段と、ある候補 IPv6 アドレスを対象として送信したメッセージに対する応答を受信した場合に、その候補 IPv6 アドレスを持つノードを、手動設定された IPv6 アドレスを持つノードとして検出する検出手段と、を有する。
【００１７】
本発明が提供する制御方法は、コンピュータによって実行される。当該制御方法は、IPv6 (Internet Protocol version 6) アドレスのリテラル表記で表したインタフェース ID に第１所定個以上の０が含まれる複数の候補 IPv6 アドレスを生成する候補アドレス生成ステップと、各前記候補 IPv6 アドレスを対象としてメッセージを送信する送信ステップと、ある候補 IPv6 アドレスを対象として送信したメッセージに対する応答を受信した場合に、その候補 IPv6 アドレスを持つノードを、手動設定された IPv6 アドレスを持つノードとして検出する検出ステップと、を有する。
【００１８】
本発明が提供するプログラムは、コンピュータに、本発明が提供するノード検出装置として動作する機能を持たせる。
【発明の効果】
【００１９】
本発明によれば、高い汎用性を持って、様々な通信装置の IPv6 の利用形態を把握する技術が提供される。
【図面の簡単な説明】
【００２０】
【図１】実施形態１に係るノード検出装置をその使用環境と共に例示するブロック図である。
【図２】IPv6 アドレスを概念的に示す図である。
【図３】IPv6 のアドレス表現形式を例示する図である。
【図４】実施形態１のノード検出装置によって実行される処理の流れを例示するフローチャートである。
【図５】ノード検出装置のハードウエア構成を例示するブロック図である。
【図６】候補アドレスを概念的に例示する第１の図である。
【図７】候補アドレスを概念的に例示する第２の図である。
【図８】値が０の桁の位置を規則的に決める場合に生成されるインタフェース ID を、生成順に例示する図である。
【図９】ネットワークが２つのサブネットワークを含む様子を例示する図である。
【図１０】二項分布 B を表すグラフである。
【図１１】インタフェース ID において０以外の文字を含むセクションが１つである候補アドレスを概念的に示す図である。
【図１２】候補アドレス生成部によって生成される候補アドレスを生成される順に例示する第１の図である。
【図１３】インタフェース ID において２つの隣接するセクションの各桁が０である候補アドレスを概念的に示す図である。
【図１４】候補アドレス生成部によって生成される候補アドレスを生成される順に例示する第２の図である。
【図１５】実施形態４に係るノード検出装置をその使用環境と共に例示するブロック図である。
【図１６】実施形態４のノード検出装置によって実行される処理の流れを例示するフローチャートである。
【発明を実施するための形態】
【００２１】
以下、本発明の実施の形態について、図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。
【００２２】
［実施形態１］
図１は、実施形態１に係るノード検出装置２０００をその使用環境と共に例示するブロック図である。図１において、矢印は情報の流れを表している。さらに、図１において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を表している。
【００２３】
＜想定環境＞
ノード検出装置２０００は、ネットワーク４０００を介して、ノード３０００と通信可能に接続されている。以下、ネットワーク４０００を介してノード検出装置２０００と接続されているノード３０００を、「ネットワーク４０００上のノード３０００」とも表記する。ネットワーク４０００上には、１つ又は複数のノード３０００が存在する。
【００２４】
ノードとは、ネットワークインタフェースのことを指す。ネットワークインタフェースは、例えば、 PC（Personal Computer）、サーバ計算機、又は携帯型計算機等の計算機に備わっている。ノードは、物理的なネットワークインタフェースでもよいし、仮想的なネットワークインタフェースでもよい。物理的なネットワークインタフェースは、例えば物理計算機が備える物理 NIC（Network Interface Card）である。仮想的なネットワークインタフェースは、例えば仮想計算機が備える仮想 NIC である。１つの計算機が有するノード３０００は、１つであってもよいし、複数であってもよい。
【００２５】
ノード３０００は、１つ又は複数の IPv6 アドレスを保持する。IPv6 アドレスを保持するノード３０００は、その IPv6 アドレスを用いて、ネットワーク４０００上の別のノード、ルータ、又はノード検出装置２０００などと通信可能である。例えば、保持する IPv6 アドレスを宛先とするメッセージを受信したり、保持する IPv6 アドレスを送信元とするメッセージを送信したりすることができる。
【００２６】
ネットワーク４０００は、有線で構成されるネットワークでもよいし、無線で構成されるネットワークでもよいし、有線と無線とが混在して構成されるネットワークでもよい。
【００２７】
上述した想定環境の下、ノード検出装置２０００は、手動で設定されたと考えられる IPv6 アドレスを保持するノード３０００を検出する。一般に、ノード３０００に保持させる IPv6 アドレスを設定する方法として、人が手動で設定する方法と、ノード３０００を管理する OS（Operating System）やその他の計算機等によって自動で設定する方法とがある。IPv6 アドレスを手動で設定する方法の例として、「ノード３０００の管理者が、ノード３０００の設定ファイルに IPv6 アドレスを書き込む」という方法などがある。こうすることでノード３０００に対し、設定ファイルに書き込んだ IPv6 アドレスが割り当てられる。一方、IPv6 アドレスを自動で設定する方法の例として、「DHCPv6 サーバがノード３０００に対して IPv6 アドレスを割り当てる」という方法がある。
【００２８】
なお前述したように、ノード３０００は複数の IPv6 アドレスを保持できる。ノード３０００が複数の IPv6 アドレスを保持する場合、ノード検出装置２０００は、保持する IPv6 アドレスの少なくとも１つが手動設定されたアドレスであるノード３０００を、「手動設定された IPv6 アドレスを保持するノード３０００」として検出する。
【００２９】
＜ノード検出装置２０００の概要＞
ノード検出装置２０００は、候補アドレス生成部２０２０、送信部２０４０、及び検出部２０６０を有する。候補アドレス生成部２０２０は、複数の候補アドレスを生成する。各候補アドレスは、IPv6 アドレスのリテラル表記で表したインタフェース ID が０を多く含む IPv6 アドレスである。具体的には、インタフェース ID が所定個以上の０を含む IPv6 アドレスである。送信部２０４０は、候補アドレス生成部２０２０によって生成された各候補アドレスを対象としてメッセージを送信する。送信部２０４０によって送信されるメッセージの詳細については後述する。検出部２０６０は、送信部２０４０によって送信されるメッセージに対する応答に基づいて、手動設定された IPv6 アドレスを保持するノード３０００を検出する。具体的には、検出部２０６０は、ある候補アドレスを対象として送信したメッセージに対する応答を受信した場合に、その候補アドレスを持つノード３０００を、手動設定された IPv6 アドレスを持つノード３０００として検出する。
【００３０】
ここで、候補アドレス生成部２０２０によって生成される IPv6 アドレスについて説明する。図２は、IPv6 アドレスを概念的に示す図である。まず、IPv6 アドレスは、１２８ビットのアドレスである。また、IPv6 アドレスは、プレフィックスと、インタフェース ID との組み合わせで構成される。例えば IPv6 アドレスは、６４ビットのプレフィックスと、６４ビットのインタフェース ID とを有する。ここで、プレフィックスの長さ、及びインタフェース ID の長さは、６４ビットには限定されない。ただし、プレフィックスの長さとインタフェース ID の長さの合計は、１２８ビットである。
【００３１】
プレフィックスは、レイヤ３レベルにおけるサブネットワークの識別子である。ここで、レイヤ３は、OSI（Open Systems Interconnection）参照モデルにおけるネットワーク層を意味する。プレフィックスが共通している IPv6 アドレスをそれぞれ持つ各ノードは、レイヤ３レベルで同じサブネットワークに属している。インタフェース ID は、レイヤ３レベルで同じサブネットワークに属している各ノードを識別する識別子である。
【００３２】
一般に IPv6 アドレスは、図３に示すリテラル表記で表される。このリテラル表記は、RFC4291（非特許文献２）で規定されている推奨形式（preferred form）である。このリテラル表記において、IPv6 アドレスは、３２個の１６進数で構成されており、４つの１６進数ごとに（１６ビットごとに）コロンで区切られている。このコロンで区切られた各部分はセクションと呼ばれる。
【００３３】
候補 IPv6 アドレスは、リテラル表記においてインタフェース ID を構成する１６個の １６進数のうち、所定個以上の１６進数が０となるように生成される。この所定個が４個の場合、例えば「2001:0db8:0000:0001:0010:0111:1111:1111」が候補 IPv6 アドレスとなる。この候補アドレスのインタフェース ID は「0010:0111:1111:1111」であり、0 を４個含む。
【００３４】
＜処理の流れ＞
図４は、実施形態１のノード検出装置２０００によって実行される処理の流れを例示するフローチャートである。まず、ノード検出装置２０００は、カウンタ i を０に初期化する（Ｓ１０２）。ステップＳ１０４からＳ１１６は、繰り返し条件Ｐ１が満たされる間繰り返し実行されるループ処理Ａである。繰り返し条件Ｐ１は、例えば「まだ生成されていない、インタフェース ID の一部が省略可能な IPv6 アドレスが存在する」という条件である。
【００３５】
候補アドレス生成部２０２０は、候補アドレス i を生成する（Ｓ１０６）。候補アドレス i は、前回以前の各ループ処理Ａにおいて生成された各候補アドレスとは異なる IPv6 アドレスである。送信部２０４０は、候補アドレス i を対象としてメッセージを送信する（Ｓ１０８）。
【００３６】
ステップＳ１０８で送信されたメッセージに対して応答がない場合（Ｓ１１０：ＮＯ）、図４の処理はステップＳ１１６に進む。一方、ステップＳ１０６で送信されたメッセージに対する応答を受信した場合（Ｓ１１０：ＹＥＳ）、図４の処理はステップＳ１１２に進む。ステップＳ１１２において、検出部２０６０は、候補アドレス i を持つノード３０００を、手動設定された IPv6 アドレスを持つノード３０００として検出する。
【００３７】
ノード検出装置２０００は、i に１を加算する（ステップＳ１１４）。ステップＳ１１６はループ処理Ａの終端であるため、図４の処理はステップＳ１０４に進む。
【００３８】
なお、処理の流れは図４で示す流れに限定されない。図４では、ある候補アドレスを対象にメッセージを送信し、そのメッセージに対する返信を受信したか否かの判断を行った後、次の候補アドレスを対象としてメッセージを送っている。しかし、ノード検出装置２０００は、各候補アドレスに対してメッセージを送信する処理とは非同期に、メッセージに対する返信の有無を判断する処理を行ってもよい。この場合、送信部２０４０は、ある候補アドレスを対象としてメッセージを送信した後、そのメッセージに対する返信を待たずに、次の候補アドレスを対象としてメッセージを送信する。
【００３９】
＜作用・効果＞
ネットワーク４０００の管理などを目的として、ネットワーク４０００上に存在するノード３０００を把握したい場合などがある。ここで、ネットワーク４０００上に存在するノード３０００を検出するナイーブアプローチとして、「ネットワーク４０００上に存在しうる全ての IPv6 アドレスについて探索を行う」という方法も考えられる。具体的には、「ネットワーク４０００上に存在しうる全ての IPv6 アドレスそれぞれを対象とするメッセージを送信し、そのメッセージに対する応答に基づいてノード３０００を検出する」という方法となる。しかし、インタフェース ID の値空間は６４ビットという広大な大きさであり、インタフェース ID の総数は「２の６４乗個 = 約 1.8e19 個」という膨大な数となる。そのため、このような膨大な数の対象それぞれに対してメッセージを送るというブルートフォースの処理には膨大な時間がかかる。例えば１秒間に１０個のノードへメッセージを送信したとしても、約５８０億年かかる。したがって、このような処理は現実的には不可能な処理である。
【００４０】
これに対し、本実施形態のノード検出装置２０００は、「ネットワーク４０００上に存在しうる IPv6 アドレスのうち、IPv6 アドレスのリテラル表記で表した際のインタフェース ID に所定個以上０が含まれる」という条件を見たす。このように探索する IPv6アドレスのアドレス空間を限定することで、ノード３０００の検出にかかる時間が短くなる。よって、上記所定個を適切に設定することにより、現実的な時間でネットワーク４０００上のノード３０００を検出できるようになる。
【００４１】
また、以下の理由により、０を多く含む IPv6 アドレスは、手動で設定された蓋然性が高い IPv6 アドレスであると考えられる。まず IPv6 アドレスは、たとえリテラル表記という簡便な表記方法を用いた場合であっても、３２桁という長い文字列となる。このような長い文字列を手動で入力することは、人にとって手間のかかる作業である。
【００４２】
ここで、このように長い文字列を作る際、人は０を特別扱いし、０を多用する傾向にある。例えば、最後の数個の文字だけを０以外の文字にし、残りは全て０で埋めるといった文字列を作る傾向にある。一般に、人は、文字や数値を扱う際に、「最初の文字」や「最初の値」を特別扱いすることが多い。例えば、ひらがなやアルファベットの文字列を適当に作成する場合、「あああ」や「AAA」などを作ることが多い。コンピュータシステムにおいては、例えば配列の添字の値が０から始まるように、種々の値の基準として０が用いられる。そのため人は、手動で作成する文字列に０を多用する傾向がある。また、このように０を多用することで、少ない労力で IPv6 アドレスを入力することができる。
【００４３】
一方、計算機が文字列を自動生成する場合、感覚的に又は省力のために０を多用することはない。そのため、計算機によって IPv6 アドレスが自動生成される場合、人手で IPv6 アドレスが生成される場合と異なり、インタフェース ID に０が多く含まれる蓋然性は低い。
【００４４】
以上の理由により、インタフェース ID に０が多く含まれる IPv6 アドレスは、手動で生成された IPv6 アドレスである蓋然性が高い。そこで本実施形態に係るノード検出装置２０００は、「インタフェース ID に０が所定個以上含まれる」というように、０の個数を条件として、手動設定されたと考えられる IPv6 アドレスを持つノードを検出する。これにより、長い文字列を入力する際の人の傾向（癖）に着目して、手動設定された蓋然性の高い IPv6 アドレスを持つネットワーク４０００内のノード３０００を、現実的な時間内に検出することができる。
【００４５】
ここで、「ネットワーク４０００上に接続するノードに対しては、ネットワーク４０００上に存在する DHCPv6 サーバによって IPv6 アドレスを割り当てる」という運用方法でネットワーク４０００が運用されることがある。こうすることで、ネットワーク４０００の管理者が、ネットワーク４０００上のノード３０００の挙動などを把握しやすくなる。また、各ユーザが手動で IPv6 アドレスの設定を行う必要がないため、ユーザがネットワーク４０００を利用しやすくなる。
【００４６】
このような環境において手動設定された IPv6 アドレスを持つノード３０００は、所定の運用方法に従わないノード３０００である。本実施形態のノード検出装置２０００によれば、このような所定の運用方法に従わないノード３０００を検出することができる。そのため、ネットワーク４０００の管理がしやすくなる。
【００４７】
例えば上記の方法で運用されているネットワーク４０００において、悪意あるユーザが悪意ある行動をしようとする場合、ノード３０００に対して手動で IPv6 アドレスを設定することが考えられる。これにより、ネットワーク４０００の管理者が悪意あるユーザのノード３０００の存在を把握しにくくなるためである。本実施形態のノード検出装置２０００によれば、このような悪意あるユーザによって手動で IPv6 アドレスが設定されたノード３０００を検出することができる。そのため、ネットワーク４０００の管理者が、悪意あるユーザの存在を把握しやすくなる。
【００４８】
以下、本実施形態のノード検出装置２０００についてさらに詳細に説明する。
【００４９】
＜ハードウエア構成例＞
ノード検出装置２０００の各機能構成部は、各機能構成部を実現するハードウエア（例：ハードワイヤードされた電子回路など）で実現されてもよいし、ハードウエアとソフトウエアとの組み合わせ（例：電子回路とそれを制御するプログラムの組み合わせなど）で実現されてもよい。以下、各機能構成部をハードウエアとソフトウエアとの組み合わせで実現する場合について、その構成を具体的に例示する。
【００５０】
ノード検出装置２０００は、携帯型端末、PC、又はサーバなどの種々の計算機として実装される。ここでノード検出装置２０００は、ノード検出装置２０００を実装するための専用の計算機に実装されてもよいし、その他のアプリケーション等も含まれている汎用の計算機に実装されてもよい。
【００５１】
図５は、ノード検出装置２０００のハードウエア構成を例示するブロック図である。ノード検出装置２０００は、バス１０２０、プロセッサ１０４０、メモリ１０６０、ストレージ１０８０、入出力インタフェース１１００、ネットワークインタフェース１１２０を有する。バス１０２０は、プロセッサ１０４０、メモリ１０６０、ストレージ１０８０、入出力インタフェース１１００、及びネットワークインタフェース１１２０が、相互にデータを送受信するためのデータ伝送路である。ただし、プロセッサ１０４０などを互いに接続する方法は、バス接続に限定されない。プロセッサ１０４０は、例えば CPU (Central Processing Unit) や GPU (Graphics Processing Unit) などの演算処理装置である。メモリ１０６０は、例えば RAM (Random Access Memory) や ROM (Read Only Memory) などのメモリである。ストレージ１０８０は、例えばハードディスク、SSD (Solid State Drive)、又はメモリカードなどの記憶装置である。また、ストレージ１０８０は、RAM や ROM 等のメモリであってもよい。
【００５２】
入出力インタフェース１１００は、ノード検出装置２０００と入出力デバイスとを接続するためのインタフェースである。入出力デバイスは、例えばキーボード、マウス、又はディスプレイなどである。
【００５３】
ネットワークインタフェース１１２０は、ノード検出装置２０００をネットワーク４０００に接続するためのインタフェースである。
【００５４】
ストレージ１０８０は、ノード検出装置２０００の機能を実現するためのプログラムを記憶している。具体的には、候補アドレス生成部２０２０、送信部２０４０、及び検出部２０６０の機能をそれぞれ実現するプログラムモジュールを記憶している。プロセッサ１０４０は、これら各プログラムモジュールを実行することで、候補アドレス生成部２０２０、送信部２０４０、及び検出部２０６０の機能をそれぞれ実現する。ここでプロセッサ１０４０は、上記各モジュールを実行する際、これらのモジュールをメモリ１０６０上に読み出してから実行してもよいし、メモリ１０６０上に読み出さずに実行してもよい。
【００５５】
ノード検出装置２０００のハードウエア構成は図５に示した構成に限定されない。例えば、各プログラムモジュールはメモリ１０６０に格納されてもよい。この場合、ノード検出装置２０００は、ストレージ１０８０を備えていなくてもよい。
【００５６】
＜候補アドレス生成部２０２０の詳細＞
＜＜候補アドレスの概念＞＞
まず、候補アドレスについて概念的な説明をする。図６は、候補アドレスを概念的に例示する図である。前述したように、手動で生成された IPv6 アドレスは０を多く含む傾向にある。そのため、図６に示す候補アドレスのインタフェース ID において、斜線部分以外は全て０となっており、斜線部分は任意の１６進数である。言い換えると、手動設定された IPv6 アドレスを持つノード３０００を探索する際、候補アドレスの内の一部（図６の斜線部分）のみが探索対象になる有効空間（探索空間）となる。例えばノード検出装置２０００は、この斜線部分の文字列を様々に変えながら、いわゆるブルートフォースの探索を行う。このように、手動設定された IPv6 アドレスの特徴に着目し、探索空間を絞って手動設定された IPv6 アドレスを持つノード３０００の探索を行うことで、たとえブルートフォースで探索を行ったとしても、現実的に処理可能な短い時間で探索を行うことができる。
【００５７】
なお、図６ではインタフェース ID の末尾を探索空間としているが、探索空間はインタフェース ID の内の任意の位置にすることができる。例えば、図７（ａ）から（ｄ）に示すような候補アドレスが考えられる。ここで、探索空間は、図７（ｄ）に示すように分離した文字列で構成されてもよい。
【００５８】
なお、ノード検出装置２０００は、探索空間をある位置に固定して候補アドレスを生成してもよいし、探索空間の位置を変えていき、様々な位置を探索空間として候補アドレスを生成してもよい。例えば後者の場合、候補アドレス生成部２０２０は、図６や図７などで表される候補アドレスをそれぞれブルートフォースで生成する。
【００５９】
＜＜インタフェース ID を生成する具体的な方法＞＞
前述したように、候補アドレスは、プレフィックス及びインタフェース ID を有する。そこで、まずは候補アドレスのインタフェース ID の生成方法について説明し、プレフィックスの生成方法については後述する。なお、候補アドレス生成部２０２０が生成するインタフェース ID は上述した候補アドレスの概念に当てはまるものであればよく、その生成方法は下記で示す方法に限定されない。
【００６０】
実施形態１の候補アドレス生成部２０２０は、０を所定個以上含むインタフェース ID を生成する。その具体的な方法には、様々な方法がある。例えば候補アドレス生成部２０２０は、インタフェース ID の各桁の内、値が０の桁を決定する。その後候補アドレス生成部２０２０は、０以外の値を持つ桁の値を決定していく。
【００６１】
例えばノード検出装置２０００は、値が０の桁をランダムに決定する。また例えば、候補アドレス生成部２０２０は、値が０の桁の位置を規則的に決定してもよい。図８は、値が０の桁の位置を規則的に決める場合に生成されるインタフェース ID を、生成順に例示する図である。図８において、インタフェース ID は０を３つ含む。ただし、値が０の桁の位置の決め方は、図８に示される方法に限定されない。
【００６２】
０以外の値を持つ各桁の値の決め方は様々である。例えば候補アドレス生成部２０２０は、０以外の値を持つ各桁を結合した１６進数を、０から順にインクリメントしていくことで、０以外の値を持つ各桁を決定する。例えば０が４つ含まれるインタフェース ID である「0XXX:0XXX:0XXX:0XXX（X は任意の１６進数）」を生成する場合、候補アドレス生成部２０２０は、X を結合した１２桁の１６進数「XXXXXXXXXXXX」を、「000000000000」、「000000000001」、「000000000002」、という順に生成していく。この場合、この１２桁の１６進数が探索空間となる。例えば X を結合した１６進数が「123493382331」の場合、候補 IPv6 アドレスのインタフェース ID は「0123:0493:0382:0331」となる。また候補アドレス生成部２０２０は、この例における X を結合した１６進数を「ffffffffffff」からデクリメントしていくことで、０以外の値を持つ各桁を決定してもよい。
【００６３】
＜＜候補アドレスの生成順序について＞＞
例えば候補アドレス生成部２０２０は、インタフェース ID に含まれる０の数が多い候補アドレスから順に生成する。これは、０の数が多いインタフェース ID ほど、人手で生成された蓋然性が高いと考えられるためである。ただし、候補アドレス生成部２０２０は、インタフェース ID に含まれる０の数が少ない候補アドレスから順に生成してもよいし、インタフェース ID に含まれる０の個数についてランダムな順番で候補アドレスを生成してもよい。
【００６４】
＜＜プレフィックスの決定方法＞＞
例えばノード検出装置２０００は、ルータから受信するプレフィックスの通知を利用して、候補アドレスのプレフィックスを決定する。具体的な方法は、例えば以下のようになる。
【００６５】
まずノード検出装置２０００は、IPv6 で規定されている RS（Router Solicitation）メッセージを利用し、各ルータから、各ルータが管理しているサブネットワークのプレフィックスを取得する。ここで、RS メッセージを利用して、各ルータが管理しているプレフィックスを取得する方法は、既知の方法であるため、説明を省略する。
【００６６】
プレフィックスを取得したノード検出装置２０００は、取得したプレフィックスを記憶する記憶部に、このプレフィックスを記憶する。そして、候補アドレス生成部２０２０は、この記憶部に記憶されているプレフィックスを持つ候補アドレスを生成する。なお、この記憶部に複数のプレフィックスが記憶されている場合、候補アドレス生成部２０２０は、各プレフィックスについてそれぞれ候補アドレスを生成してもよいし、一部のプレフィックスについてのみ候補アドレスを生成してもよい。
【００６７】
その他にも例えば、ノード検出装置２０００は、手動で入力されたプレフィックスを上記記憶部に記憶しておいてもよい。また、ノード検出装置２０００は、ノード３０００の検出を行う際に、ノード検出装置２０００に対するプレフィックスの入力を受け付けてもよい。
【００６８】
＜送信部２０４０の詳細＞
送信部２０４０は、候補アドレス生成部２０２０によって生成された IPv6 アドレスを対象としてメッセージを送信する。ここで、検出部２０６０はこのメッセージに対する応答に基づいてノード３０００の検出を行うため、送信部２０４０によって送信するメッセージは、「そのメッセージの対象とした IPv6 アドレスを持つノード３０００が存在した場合、そのノード３０００から応答が送信される」という要件を満たすメッセージである必要がある。例えばこの要件を満たすメッセージとして、以下の例が挙げられる。
【００６９】
＜＜Echo Request メッセージ＞＞
例えば送信部２０４０は、候補アドレスを宛先とする Echo Request メッセージを送信する。Echo Request メッセージは、RFC4443（非特許文献３）に規定されている ICMPv6（Internet Control Message Protocol version 6）プロトコルのメッセージの１つである。Echo Request メッセージを受信したノードは、その Echo Request メッセージの送信元に対して、Echo Reply メッセージを送信する。よって、送信部２０４０がある IPv6 アドレスを宛先として Echo Request メッセージを送信した場合に、その IPv6 アドレスを持つノード３０００が存在すると、そのノード３０００は、ノード検出装置２０００に対して Echo Reply メッセージを送信する。よって、検出部２０６０は、ノード３０００からの応答として、この Echo Reply メッセージを受信する。
【００７０】
ICMPv6 はレイヤ３のプロトコルであるため、ノード検出装置２０００が所属するサブネットワーク以外のサブネットワークに属する候補アドレスを宛先とすることもできる。そのため、Echo Request メッセージを利用することで、ノード検出装置２０００は、ノード検出装置２０００とは異なるサブネットワークに所属するノード３０００も検出することができる。
【００７１】
図９は、ネットワーク４０００が２つのサブネットワークを含む様子を例示する図である。ノード検出装置２０００は、ノード A 及びノード B と共に、ルータ X の配下にある。一方、ノード C 及びノード D は、ルータ Y の配下にある。送信部２０４０から送信される Echo Request メッセージは、ルータ X の配下にあるノード A 及び B だけでなく、ルータ Y の配下にあるノード C やノード D にも到達することができる。よって、ノード検出装置２０００は、ノード検出装置２０００とは異なるサブネットワークに属するノード C や D の IPv6 アドレスが手動設定されている場合でも、これらのノードを「手動設定された IPv6 アドレスを持つノード３０００」として検出することができる。
【００７２】
＜＜NS（Neighbor Solicitation）メッセージ＞＞
また例えば、送信部２０４０は、候補アドレスをターゲットアドレスとする NS メッセージを送信する。NS メッセージは、RFC4861（非特許文献４）に規定されている。具体的にはまず、送信部２０４０は、NS メッセージが示すターゲットアドレスに候補アドレスを格納する。そして送信部２０４０は、その NS メッセージを送信する。上記候補アドレスを保持するノード３０００を有する計算機は、この NS メッセージを受信すると、NS メッセージと同様に RFC4861 で規定されている NA（Neighbor Advertisement）メッセージをノード検出装置２０００へ送信する。この際、この計算機は、NA メッセージが示すソースアドレスに、自身のレイヤ２アドレスを格納する。なお、レイヤ２とは、OSI 参照モデルにおけるデータリンク層を意味する。レイヤ２アドレスは、例えば MAC（Media Access Control）アドレスである。
【００７３】
ここで、スケジュール情報取得部２０４０は、上記 NS メッセージをレイヤ２レベルでブロードキャストしてもよいし、対象の候補アドレスを持つノードへユニキャストしてもよい。対象の候補アドレスを持つノードへユニキャストする場合、送信部２０４０が、その候補アドレスを持つノードのレイヤ２アドレス（MAC アドレスなど）を把握している必要がある。このように NS メッセージをユニキャストしてノード３０００を検出する処理は、例えば、既に検出されているノード３０００が現在も存在しているか否かを確認するために行われる。
【００７４】
一般に、NS メッセージを受信した場合に NA メッセージを返信する機能は、OS カーネルに含まれる IPv6 のプロトコルスタックで実装されている。そのため、NS メッセージを受信したにも関わらず NA メッセージを返さないというノード３０００は、実質的に存在しない。一方、Echo Request メッセージを利用する方法の場合、セキュリティの観点などから、「Echo Request メッセージに対して Echo Reply メッセージを返さない」という設定がなされている計算機もある。そのため、NS メッセージを使う方法には、Echo Request メッセージを使う方法と比較し、宛先とした候補アドレスを持つノード３０００が存在する場合にそのノード３０００を確実に検出できるという利点がある。
【００７５】
＜検出部２０６０の詳細＞
検出部２０６０が受信するノード３０００からの応答は、送信部２０４０が送信するメッセージに依存する。例えば送信部２０４０が Echo Request メッセージを送信する場合、検出部２０６０が受信する応答は Echo Reply メッセージである。また例えば、送信部２０４０が NS メッセージを送信する場合、検出部２０６０が受信するメッセージは NA メッセージである。なお、検出部２０６０は、例えばある候補アドレスを対象とする Echo request メッセージ又は NS メッセージを送信してから所定の長さ以上の期間経過しても応答を受信しない場合に、その候補アドレスを持つノード３０００が存在しないと判定する。
【００７６】
検出部２０６０は、受信した応答の送信元であるノード３０００（候補アドレスを持つノード３０００）を特定する。例えばこのノード３０００は、レイヤ２アドレスによって特定することができる。
【００７７】
例えば検出部２０６０は、ノード３０００から受信した応答メッセージに含まれるレイヤ２アドレスを抽出することで、そのノード３０００のレイヤ２アドレスを割り出す。具体的には、応答メッセージから X というレイヤ２アドレスが抽出された場合、検出部２０６０は、X というレイヤ２アドレスを持つノード３０００を検出したこととなる。これにより、ネットワーク４０００上に X というレイヤ２アドレスを持つノード３０００が存在するということが分かる。検出部２０６０は、この「X というレイヤ２アドレスを持つノード３０００」を、手動設定された IPv6 アドレスを持つノード３０００として検出する。
【００７８】
［実施形態２］
実施形態２のノード検出装置２０００の構成は、実施形態１と同様に例えば図１で表される。実施形態２のノード検出装置２０００は、下記で説明する点を除き、実施形態１のノード検出装置２０００と同様の機能を有する。
【００７９】
実施形態２の候補アドレス生成部２０２０は、IPv6 アドレスのリテラル表記で表したインタフェース ID が０を所定個以上連続して含む候補アドレスを生成する。上記所定個が６の場合、例えば「0000:0011:1111:1111」というインタフェース ID を持つ候補アドレスが生成される。
【００８０】
以下、候補アドレス生成部２０２０が、０を所定個以上連続して含む候補 IPv6 アドレスを生成する方法を具体的に説明する。なお、プレフィックスを決定する方法は実施形態１と同様である。
【００８１】
まず候補アドレス生成部２０２０は、インタフェース ID の１６桁の中から、値を０とする連続する桁を決定する。例えば候補アドレス生成部２０２０は、この連続する桁を先頭から末尾の方向へずらしながら、インタフェース ID を生成していく。具体的には、候補アドレス生成部２０２０は、「0000:00XX:XXXX:XXXX」、「X000:000X:XXXX:XXXX」、「XX00:0000:XXXX:XXXX」という順に候補アドレスを生成していく。なお、X は任意の１６進数である。ただし、候補アドレス生成部２０２０は、値を０とする連続する桁を末尾から先頭の方向へずらしながらインタフェース ID を生成してもよいし、値を０とする連続する桁をランダムに決定してインタフェース ID を生成してもよい。
【００８２】
なお、０以外の値を持つ各桁の値を決定する方法は、実施形態１で説明した方法と同様である。
【００８３】
＜作用・効果＞
前述した通り、インタフェース ID は長い文字列であり、手動で入力される場合はインタフェース ID に０が多く含まれる蓋然性が高い。特に、０を連続させると入力が楽になるため、手動で設定されたインタフェース ID には連続する０が含まれる蓋然性が高い。
【００８４】
例えばインタフェース ID を１６桁の１６進数である X とおき、「X に含まれる０の個数 m、X に m 個の０が含まれる確率 Y」について考える。この確率 Y の分布は、「値が０になる」を成功とし、「値が０にならない」を失敗とする試行を１６回行った場合における成功数の分布を表す二項分布 B(16, p) で表すことができる。ここで、p は成功する確率（値が０になる確率）であり、1/16 である。
【００８５】
図１０は、二項分布 B を表すグラフである。実線のグラフは０の個数 m に対応する確率 Y を表す。また、点線のグラフは積算確率 U を表す。例えば、０の個数が３個以下である X の数がインタフェース ID の総数に占める割合（m = 3 における積算確率）は、約 98.5% となる。つまり、X に０が４個以上含まれる確率は 1.5% 以下である。このように、１６桁あるインタフェース ID の内、99 % 以上のインタフェース ID は、０が連続する桁数が３以下である。よって、コンピュータによって自動生成される場合、インタフェース ID において多くの０が連続する蓋然性は小さいと考えられる。
【００８６】
そこで、本実施形態のノード検出装置２０００は、所定個以上連続して０が含まれるインタフェース ID を持つ候補 IPv6 アドレスを生成する。こうすることで、手動で生成された蓋然性が高い IPv6 アドレスを持つノード３０００を現実的に実行可能な短い時間で検出することができる。
【００８７】
［実施形態３］
実施形態３のノード検出装置２０００の構成は、実施形態１や実施形態２のノード検出装置２０００と同様に例えば図１で表される。実施形態３のノード検出装置２０００は、下記で説明する点を除き、実施形態２のノード検出装置２０００と同様の機能を有する。
【００８８】
実施形態３の候補アドレス生成部２０２０は、IPv6 アドレスのリテラル表記で表す場合にインタフェース ID の一部が省略できる候補アドレスを生成する。以下、IPv6 アドレスのリテラル表記における表記省略のルールについて説明する。
【００８９】
＜表記の省略ルール＞
まず、１つのセクションに含まれる４つの１６進数のうち、先頭の０及び先頭から連続している０を省略することができる。例えば、「0111」、「0011」、「0001」というセクションはそれぞれ、「111」、「11」、「1」と表せる。
【００９０】
セクションの値が「0000」である場合は「0」と表記する。ただし、２つの隣接するセクションの値が双方とも「0000」である場合、つまり、「:0000:0000:」という部分がある場合、この部分を「::」と表せる。そのため、例えば「1111:0000:0000:1111」というインタフェース ID は、「1111::1111」と表すことができる。
【００９１】
前述のように、インタフェース ID を IPv6 アドレスのリテラル表記で表した場合、１６個の１６進数で表される。そして、表記の一部が省略できるインタフェース ID は、IPv6 アドレスのリテラル表記で表した場合に、１６個未満の１６進数で表すことができる。よって、実施形態３の候補アドレス生成部２０２０によって生成される IPv6 アドレスは、IPv6 アドレスのリテラル表記で表した場合に、インタフェース ID を１６個未満の１６進数で表すことができる IPv6 アドレスとなる。言い換えれば、実施形態３の候補アドレス生成部２０２０によって生成されるIPv6アドレスは、インタフェース ID に、少なくとも４個の連続する０が含まれるものとなる。
【００９２】
＜候補アドレスの生成方法＞
実施形態３の候補アドレス生成部２０２０が候補アドレスを生成する方法は様々である。以下、候補アドレス生成部２０２０が候補アドレスを生成する方法として、２つの方法を例示する。なお、プレフィックスを決定する方法は実施形態１と同様である。
【００９３】
＜＜方法１＞＞
例えば候補アドレス生成部２０２０は、「インタフェース ID のうち、１つのセクションのみに０以外の文字を含む」という候補アドレスを生成する。図１１は、インタフェース ID において０以外の文字を含むセクションが１つである候補アドレスを概念的に示す図である。このようなインタフェース ID は、図１１に示すように、（１）第１セクション以外が全て０である（0000:0000:0000:XXXX）、（２）第２セクション以外が全て０である（0000:0000:XXXX:0000）、（３）第３セクション以外が全て０である（0000:XXXX:0000:0000）、及び（４）第４セクション以外が全て０である（XXXX:0000:0000:0000）という４パターンの IPv6 アドレスが考えられる。ここで、X は任意の１６進数である。言い換えれば、（１）では第１セクションが、（２）では第２セクションが、（３）では第３セクションが、（４）では第４セクションがそれぞれ探索空間となる。候補アドレス生成部２０２０は、これら４パターンそれぞれについて候補アドレスを生成してもよいし、これら４パターンの内の一部だけ（例えば（１）だけ）について候補アドレスを生成してもよい。
【００９４】
ここで、０以外の文字を含むセクションの各桁の値の決め方は様々である。例えば候補アドレス生成部２０２０は、このセクションを表す４桁の１６進数を、0000 から順に１ずつインクリメントすることで、このセクションを生成する。具体的には、0000、0001、0002、...、000f、0010、0011、...という順にこのセクションを生成していく。図１２は、候補アドレス生成部２０２０によって生成される候補アドレスを生成される順に例示する第１の図である。なお、この例では候補アドレスのプレフィックスを「2001:0db8:0000:0001」としている。
【００９５】
また、候補アドレス生成部２０２０は、０以外の文字を含むセクションを「ffff」から順に１つずつデクリメントすることで生成してもよい。また、候補アドレス生成部２０２０は、０以外の文字を含むセクションの各桁の値をランダムに決定してもよい。
【００９６】
＜＜方法２＞＞
また例えば、候補アドレス生成部２０２０は、「インタフェース ID に含まれる連続する２つのセクションの各桁の値が全て０である」という条件を満たす候補アドレスを生成する。例えば「XXXX:0000:0000:XXXX」のように、連続する２つのセクションの各桁が全て０である場合、これら２つのセクションを「::」と省略表記する（インタフェース ID を「XXXX::XXXX」と省略表記する）ことが可能である。このようなインタフェース ID には、図１３に示すように、（１）第３セクション及び第４セクションの値が全て０である（0000:0000:XXXX:XXXX）、（２）第３セクション及び第２セクションの値が全て０である（XXXX:0000:0000:XXXX）、及び（３）第２セクション及び第１セクションの値が全て０である（XXX:XXXX:0000:0000）という３つのパターンが考えられる。候補アドレス生成部２０２０は、これら３つパターンそれぞれについて候補アドレスを生成してもよいし、いずれか一部のパターン（例えば（１）だけ）について候補アドレスのみを生成してもよい。ここで、X は任意の１６進数である。
【００９７】
例えば候補アドレス生成部２０２０は、インタフェース ID を表す１６桁の１６進数の値が大きくなっていくように、順次候補アドレスを生成していく。図１４は、候補アドレス生成部２０２０によって生成される候補アドレスを生成される順に例示する第２の図である。
【００９８】
＜＜複数の候補アドレスを生成する場合における生成の順序について＞＞
例えば候補アドレス生成部２０２０は、表記を省略できる部分が多いインタフェース ID を持つ IPv6 から順に候補アドレスを生成する。これは、表記を省略できる部分が多いインタフェース ID ほど、人手で生成された蓋然性が高いと考えられるためである。例えば候補アドレス生成部２０２０が、方法１と方法２の双方を用いて候補アドレスを生成するとする。この場合、例えば候補アドレス生成部２０２０は、方法１を用いて生成した候補アドレスを持つノード３０００の検出を試みた後、方法２を用いて生成した候補アドレスを持つノード３０００の検出を試みる。なお、方法１を用いて生成される候補アドレスの生成順、及び方法２を用いて生成される候補アドレスの生成順についてはそれぞれ、＜＜方法１＞＞及び＜＜方法２＞＞で述べた通りである。
【００９９】
＜作用・効果＞
IPv6 アドレスの一部が省略できる場合、手動による入力の手間が少なくなる。人が手動で IPv6 アドレスを生成する場合、表記の一部が省略できる IPv6 アドレスを生成する蓋然性は高いといえる。
【０１００】
一方、コンピュータによって IPv6 アドレスを自動生成する場合、このような入力の手間を考慮する必要がないため、表記の一部が省略できる IPv6 アドレスを意図的に生成する蓋然性は低い。また、表記の一部が省略できる IPv6 アドレスは０を多く含むこととなる。そのため、実施形態２で説明したように、このような IPv6 アドレスが意図せずに生成される蓋然性は低い。
【０１０１】
以上のことから、表記の一部が省略できる IPv6 アドレスは、人手で生成されたものである蓋然性が高いと考えられる。
【０１０２】
本実施形態のノード検出装置２０００によれば、このように表記の一部が省略できる IPv6 アドレスを候補 IPv6 アドレスとしてノード３０００の検出を行う。そのため、手動設定された蓋然性が高い IPv6 アドレスを持つノード３０００を現実的に実行可能な短い時間で検出できる確率が高くなる。
【０１０３】
［実施形態４］
図１５は、実施形態４に係るノード検出装置２０００をその使用環境と共に例示するブロック図である。図１５において、矢印は情報の流れを表している。さらに、図１５において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を表している。
【０１０４】
実施形態４のノード検出装置２０００は、アドレス取得部２０８０及び判定部２１００を有する。アドレス取得部２０８０は、判定対象の IPv6 アドレス（以下、対象アドレス）を取得する。判定部２１００は、対象アドレスが手動で設定された IPv6 アドレスであるか否かを判定する。ここで、手動設定された IPv6 アドレスには、実施形態１から実施形態３のいずれかの候補アドレス生成部２０２０によって生成される候補アドレスと同様の特徴がある。この特徴とは、図６や図７を用いて説明したように、「インタフェース ID の一部のみが有効空間（任意の１６進数）であり、残りの部分は０で埋められているという特徴である。そこで判定部２１００は、対象アドレスがこのような特徴を持つ場合に、対象アドレスが手動設定されたものであると判定する。
【０１０５】
例えば候補アドレスの具体的な特徴は、IPv6 アドレスのリテラル表記で表したインタフェース ID に、（１）所定個以上の０が含まれる、（２）所定個以上連続して０が含まれる、又は（３）一部が省略可能である、といった特徴である。そこで判定部２１００は、対象アドレスが上記（１）から（３）のいずれかの特徴を有している場合に、その対象アドレスは手動で設定されたアドレスであると判定する。なお、判定部２１００が行う判定は、上記（１）から（３）の特徴のいずれか１つについての判定であってもよいし、いずれか２つ以上についての判定であってもよい。
【０１０６】
「インタフェース ID に所定個以上の０が含まれるか否か」を判定する方法や、「インタフェース ID に所定個以上連続して０が含まれるか否か」を判定する方法については、既存の文字列処理を利用できる。そのため、これらの具体的な方法については省略する。
【０１０７】
以下、「インタフェース ID の一部が省略可能であるか否か」という判定の具体的方法を以下に例示する。
【０１０８】
＜方法１＞
判定部２１００は、対象アドレスが、「１つのセクションのみが０でない値を含み、その他のセクションは全ての桁が０である」という条件を満たす場合に、その対象アドレスは手動設定されたアドレスであると判定する。
【０１０９】
＜方法２＞
判定部２１００は、対象アドレスが、「連続する２つのセクションの各桁が全て０である」という条件を満たす場合に、その対象アドレスは手動設定されたアドレスであると判定する。
【０１１０】
＜対象アドレスの取得方法＞
アドレス取得部２０８０が対象アドレスを取得する方法は様々である。例えばアドレス取得部２０８０は、対象アドレスが記憶されている記憶部から対象アドレスを取得する。この記憶部は、ノード検出装置２０００の内部に設けられていてもよいし、外部に設けられていてもよい。また例えばアドレス取得部２０８０は、手動で入力される対象アドレスや、外部装置から入力される対象アドレスを取得してもよい。
【０１１１】
＜処理の流れ＞
図１６は、実施形態４のノード検出装置２０００によって実行される処理の流れを例示するフローチャートである。アドレス取得部２０８０は、対象アドレスのリスト L を取得する（ステップＳ２０２）。ステップＳ２０４からＳ２１２は、リスト L に含まれる対象アドレスそれぞれについて実行されるループ処理 B である。リスト L に含まれる全てのアドレスについてループ処理 B が実行された場合、図１６の処理は終了する。一方、リスト L の中にまだループ処理 B の対象となっていない対象アドレスが存在する場合、図１６の処理はステップＳ２０６に進む。なお、ノード検出装置２０００は、まだループ処理 B の対象とされていない対象アドレスの中から１つを選択する。この対象アドレスを、対象アドレス i とする。
【０１１２】
判定部２１００は、対象アドレス i のインタフェース ID が手動設定の特徴を有するか否かを判定する（ステップＳ２０６）。有する場合（ステップＳ２０６：ＹＥＳ）、図１６の処理はステップＳ２０８に進む。一方、有さない場合（ステップＳ２０６：ＮＯ）、図１６の処理はステップＳ２１０に進む。
【０１１３】
ステップＳ２０８において、判定部２１００は、対象アドレス i は手動設定された IPv6 アドレスであると判定する。一方、ステップＳ２１０において、判定部２１００は、対象アドレス i は自動設定された IPv6 アドレスであると判定する。
【０１１４】
ステップＳ２１２はループ処理Ｂの終端であるため、図１６の処理はステップＳ２０４に進む。
【０１１５】
＜利用方法と作用・効果＞
実施形態４のノード検出装置２０００の利用方法として、以下に挙げるものが考えられる。
【０１１６】
まずアドレス取得部２０８０は、ネットワーク４０００上に存在するノード３０００の IPv6 アドレスのリストを取得する。例えばこのリストは、ネットワーク４０００の管理者などによって作成される。
【０１１７】
次に判定部２１００は、上記リストに示されている各 IPv6 アドレスについて判定を行う。これにより、ネットワーク４０００上に存在する各ノード３０００について、そのノード３０００の IPv6 アドレスが手動設定されたものであるか否かが判定される。
【０１１８】
そして、ノード検出装置２０００は、各ノード３０００について、IPv6 アドレスが手動設定されたものか否かを示すリストを出力する。このリストを見ることにより、ネットワーク４０００の管理者などは、ネットワーク４０００上に存在する各ノード３０００について、そのノード３０００の IPv6 アドレスが手動設定されたものであるか否かを把握することができる。
【０１１９】
以上、図面を参照して本発明の実施形態について述べたが、これらは本発明の例示であり、上記以外の様々な構成を採用することもできる。
【０１２０】
以下、参考形態の例を付記する。
１．  IPv6 (Internet Protocol version 6) アドレスのリテラル表記で表したインタフェース ID に第１所定個以上の０が含まれる複数の候補 IPv6 アドレスを生成する候補アドレス生成手段と、
各前記候補 IPv6 アドレスを対象としてメッセージを送信する送信手段と、
ある候補 IPv6 アドレスを対象として送信したメッセージに対する応答を受信した場合に、その候補 IPv6 アドレスを持つノードを、手動設定された IPv6 アドレスを持つノードとして検出する検出手段と、
を有するノード検出装置。
２．  前記候補アドレス生成手段は、IPv6 アドレスのリテラル表記で表したインタフェース ID が０を第２所定個以上連続して含む前記候補 IPv6 アドレスを生成する１．に記載のノード検出装置。
３．  前記候補アドレス生成手段は、IPv6 アドレスのリテラル表記で表したインタフェース ID の一部が省略できる前記候補 IPv6 アドレスを生成する２．に記載のノード検出装置。
４．  前記アドレス生成手段は、
インタフェースＩＤに含まれる４つのセクションのうち、３つのセクションの各桁の値が全て０であり、残りの１つのセクションが０でない値を含む候補 IPv6 アドレスを生成するか、又は、
インタフェースＩＤに含まれる４つのセクションのうち、隣接する２つのセクションの各桁の値が全て０であり、残りの２つのセクションがそれぞれ０でない値を含む候補 IPv6 アドレスを生成する、
３．に記載のノード検出装置。
５．  前記アドレス生成手段は、IPv6 アドレスのリテラル表記で表したインタフェース ID に含まれる０の個数が多い候補 IPv6 アドレスほど優先的に生成する１．乃至４．いずれか一つに記載のノード検出装置。
６．  前記アドレス生成手段は、IPv6 アドレスのリテラル表記で表したインタフェース ID に含まれる連続する０の個数が多い候補 IPv6 アドレスほど優先的に生成する２．乃至４．いずれか一つに記載のノード検出装置。
７．  前記アドレス生成手段は、IPv6 アドレスのリテラル表記で表す際に省略できる部分が多い候補 IPv6 アドレスほど優先的に生成する３．又は４．に記載のノード検出装置。
８．  前記送信手段が前記候補 IPv6 アドレスを宛先とする Echo Request メッセージを送信し、かつ前記検出手段がその Echo Request メッセージに対する応答である Echo Reply メッセージを受信することで手動設定された IPv6 アドレスを持つノードを検出するか、又は、
前記送信手段が前記候補 IPv6 アドレスをターゲットアドレスとする Neighbor Solicitation メッセージを送信し、かつ前記検出手段がその Neighbor Solicitation メッセージに対する応答である Neighbor Advertisement メッセージを受信することで手動設定された IPv6 アドレスを持つノードを検出する、
１．乃至７．いずれか一つに記載のノード検出装置。
９．  判定対象の IPv6 アドレスを取得するアドレス取得手段と、
IPv6 アドレスのリテラル表記で表した前記判定対象の IPv6 アドレスのインタフェース ID が、第１所定個以上０を含む場合、第２所定個以上連続して０を含む場合、又は一部が省略できる場合に、前記判定対象の IPv6 アドレスは手動で設定された IPv6 アドレスであると判定する判定手段と、
を有する１．乃至８．いずれか一つに記載のノード検出装置。
１０．  コンピュータによって実行される制御方法であって、
IPv6 (Internet Protocol version 6) アドレスのリテラル表記で表したインタフェース ID に第１所定個以上の０が含まれる複数の候補 IPv6 アドレスを生成する候補アドレス生成ステップと、
各前記候補 IPv6 アドレスを対象としてメッセージを送信する送信ステップと、
ある候補 IPv6 アドレスを対象として送信したメッセージに対する応答を受信した場合に、その候補 IPv6 アドレスを持つノードを、手動設定された IPv6 アドレスを持つノードとして検出する検出ステップと、
を有する制御方法。
１１．  前記候補アドレス生成ステップは、IPv6 アドレスのリテラル表記で表したインタフェース ID が０を第２所定個以上連続して含む前記候補 IPv6 アドレスを生成する１０．に記載の制御方法。
１２．  前記候補アドレス生成ステップは、IPv6 アドレスのリテラル表記で表したインタフェース ID の一部が省略できる前記候補 IPv6 アドレスを生成する１１．に記載の制御方法。
１３．  前記アドレス生成ステップは、
インタフェースＩＤに含まれる４つのセクションのうち、３つのセクションの各桁の値が全て０であり、残りの１つのセクションが０でない値を含む候補 IPv6 アドレスを生成するか、又は、
インタフェースＩＤに含まれる４つのセクションのうち、隣接する２つのセクションの各桁の値が全て０であり、残りの２つのセクションがそれぞれ０でない値を含む候補 IPv6 アドレスを生成する、
１２．に記載の制御方法。
１４．  前記アドレス生成ステップは、IPv6 アドレスのリテラル表記で表したインタフェース ID に含まれる０の個数が多い候補 IPv6 アドレスほど優先的に生成する１０．乃至１３．いずれか一つに記載の制御方法。
１５．  前記アドレス生成ステップは、IPv6 アドレスのリテラル表記で表したインタフェース ID に含まれる連続する０の個数が多い候補 IPv6 アドレスほど優先的に生成する１１．乃至１３．いずれか一つに記載の制御方法。
１６．  前記アドレス生成ステップは、IPv6 アドレスのリテラル表記で表す際に省略できる部分が多い候補 IPv6 アドレスほど優先的に生成する１２．又は１３．に記載の制御方法。
１７．  前記送信ステップが前記候補 IPv6 アドレスを宛先とする Echo Request メッセージを送信し、かつ前記検出ステップがその Echo Request メッセージに対する応答である Echo Reply メッセージを受信することで手動設定された IPv6 アドレスを持つノードを検出するか、又は、
前記送信ステップが前記候補 IPv6 アドレスをターゲットアドレスとする Neighbor Solicitation メッセージを送信し、かつ前記検出ステップがその Neighbor Solicitation メッセージに対する応答である Neighbor Advertisement メッセージを受信することで手動設定された IPv6 アドレスを持つノードを検出する、
１０．乃至１６．いずれか一つに記載の制御方法。
１８．  判定対象の IPv6 アドレスを取得するアドレス取得ステップと、
IPv6 アドレスのリテラル表記で表した前記判定対象の IPv6 アドレスのインタフェース ID が、第１所定個以上０を含む場合、第２所定個以上連続して０を含む場合、又は一部が省略できる場合に、前記判定対象の IPv6 アドレスは手動で設定された IPv6 アドレスであると判定する判定ステップと、
を有する１０．乃至１７．いずれか一つに記載の制御方法。
１９．  コンピュータを１．乃至９．いずれか一つに記載のノード検出装置として動作させるプログラム。
【符号の説明】
【０１２１】
１０２０  バス
１０４０  プロセッサ
１０６０  メモリ
１０８０  ストレージ
１１００  入出力インタフェース
１１２０  ネットワークインタフェース
２０００  ノード検出装置
２０２０  候補アドレス生成部
２０４０  送信部
２０６０  検出部
２０８０  アドレス取得部
２１００  判定部
３０００  ノード
４０００  ネットワーク
【図１】
2016134895.tif 000003
【図２】
2016134895.tif 000004
【図３】
2016134895.tif 000005
【図４】
2016134895.tif 000006
【図５】
2016134895.tif 000007
【図６】
2016134895.tif 000008
【図７】
2016134895.tif 000009
【図８】
2016134895.tif 000010
【図９】
2016134895.tif 000011
【図１０】
2016134895.tif 000012
【図１１】
2016134895.tif 000013
【図１２】
2016134895.tif 000014
【図１３】
2016134895.tif 000015
【図１４】
2016134895.tif 000016
【図１５】
2016134895.tif 000017
【図１６】
2016134895.tif 000018