none
指定したIPアドレスが重複しているか検出したい RRS feed

  • 質問

  • お世話になります。
    表題の件につきまして、質問させてください。

    ネットワーク上のPC(Windows2000、XP、Vista、7)であらかじめ設定した共有フォルダに
    ファイルをコピーするプログラムを作成しております。

    PCはIPアドレスもしくはホスト名で指定するのですが、指定したIPアドレスのネットワーク機器(PCに限定しない)が
    同一サブネット上に複数存在するかどうかを判別し、存在する場合はその内容をユーザーに通知したいと考えております。

    考えている実装はARPを送信し、複数機器からARP応答が来たら重複しているとみなす方法です。
    しかし、ARPフレームを送信する方法をweb検索しましたが、見つかりませんでした。

    IP helper APIのSendARP()では、
    ARPフレームを投げて、最初に応答が来た機器のMACアドレスを返すようになっていました。
    2番目以降に来た応答は無視する仕様となっていたため、やりたいことを実現できないと判断しました。

    あとはpingをブロードキャストパケットで送信する方法も思いついたのですが、
    pingをブロードキャストすることはイレギュラーとwebで見たので、躊躇しております。

    Windows上のアプリでIPアドレスの重複を検出するよい方法がありましたらお教えください。
    2009年10月27日 13:28

回答

  • やったことありませんが案だけ、、、
    ・ARPキャッシュを監視して、IPアドレス+MACアドレスの組み合わせに
     変更があったら“怪しい”とみなして通知。
     ときどき通信させることが前提。
    重複しても即座にはわからないですね。。
    • 回答としてマーク ヤッチ 2009年11月5日 23:56
    2009年10月29日 1:10
  • もし実現しようとするなら、自身でRAWソケットを使ってARP相当の機能を実装する以外に無いと思います。

    対象サーバーはWindowsですか?もともとWindowsにはローカルネットワーク上でIPアドレスの重複を検出する機能があり、重複するIPアドレスを設定することはできなかった気がします。
    甕星
    • 回答としてマーク ヤッチ 2009年11月5日 23:56
    2009年10月29日 14:42

すべての返信

  • やったことありませんが案だけ、、、
    ・ARPキャッシュを監視して、IPアドレス+MACアドレスの組み合わせに
     変更があったら“怪しい”とみなして通知。
     ときどき通信させることが前提。
    重複しても即座にはわからないですね。。
    • 回答としてマーク ヤッチ 2009年11月5日 23:56
    2009年10月29日 1:10
  • もし実現しようとするなら、自身でRAWソケットを使ってARP相当の機能を実装する以外に無いと思います。

    対象サーバーはWindowsですか?もともとWindowsにはローカルネットワーク上でIPアドレスの重複を検出する機能があり、重複するIPアドレスを設定することはできなかった気がします。
    甕星
    • 回答としてマーク ヤッチ 2009年11月5日 23:56
    2009年10月29日 14:42
  • 返信ありがとうございます。

    その方法も考えたのですが、ご指摘の通りリアルタイム性は厳しいと判断しました。
    今回仕様(使用?)上の注意事項とする方向で持っていきたいと思います。

    ありがとうございました。

    2009年10月29日 23:42
  • 返信ありがとうございます。

    RAWソケットだと、ヘッダ含めてIPパケットを手で作れるということなのですが、
    ARPはブロードキャストフレーム(あて先がFF-FF-FF-FF-FF-FF)を送信しなければなりません。

    ※あて先が255.255.255.255であるブロードキャストパケットだと、IP上のプロトコルに限られるので、
    無難なプロトコルとしてpingしかないかな。。。と。

    もう少し調べたところによると、ユーザー定義のMACフレームを送受信するには、
    NDISといったフィルタドライバを入れる等しないと無理っぽい感触を受けました。

    今回は仕様(使用?)上の注意事項とする方向で持っていきたいと思います。

    ありがとうございました。
    2009年10月30日 1:44
  • 上記書き込みに追記します。

    >対象サーバーはWindowsですか?もともとWindowsにはローカルネットワーク上でIPアドレスの重複を検出する機能があり、重複するIPアドレスを設定することはできなかった気がします。

    ネットワークにつながった状態でWindowsマシンに重複したIPアドレスを設定すると、ご指摘の通り「このIPアドレスはすでに使用されています」と表示されます。
    ですが、Windowsマシンが無人状態での稼働を考えると、メッセージボックスが出たまま何も対応されない という事態が発生する可能性があるため、
    アプリにて重複を把握し、適切な処置を取ることができる のが理想です。

    しかし甕星さんのご指摘(WindowsのIP重複自動検出に任せる方法)も理解できますので、 今回はこれと絡めて仕様を検討したいと思います。

    ありがとうございました。
    2009年10月30日 5:46