あんまり時間無いけど

まだ、ARPingの件、引きずってます。。。



そもそも、ARPingってarpの応答をベースにしてるから、同一ブロードキャストドメインの範囲しか効力無いのですよ。それを解決するには、ARPingを実装したエージェントを各ブロードキャストドメインに設置して、集中的にマネージャから操作する&情報を収集するという方法しか思いつかない訳で。

仮にルータ越えの環境で(単一のホストで)同じ事をやろうとすると、セグメントを越えた先にあるネットワークに関してはルータがその機能を有しているかだけが、ポイントになります。
(通常のARPテーブルでは、1つのIPアドレスに対して1つのMACアドレスを保持するので、ARPingのような事は出来ない・・・ので、ARPテーブルをそのまま使うという訳にいかない)

やはり、現実的にはセグメント毎にエージェントを設置して、ARPテーブルを取得・・・(あくまで1IPに対して複数MACアドレスを保持できるという機能を持った)・・・するしか方法は無いように思えます。その他の方法としても、エージェントが極短周期のARPテーブルの更新を検出するという条件でMACアドレスの変更を検出するほか無いように思えます。


結局、IPアドレスの重複をうまく検出するためには、私が行ったようにARPリクエストを頻繁に出して、ARPリプライを監視するか、逆に何も送信しないのであればプロミスキャスモードでARPリプライやGratuitous ARPを受信しまくって、矛盾を検出する・・・の2者1択になるような・・・。
そうすると、プロミスキャスモードのNICが存在する事を検知(※B47)されると、それ自身が不正なスニファとして認知される事を考えると、結果として自身が存在するブロードキャストドメインにARPリクエストを出しまくるという方法にしか行き着かない気がするのですが。。。



で、IPアドレスの表記として、、、
192.168.1.1のようなIPアドレスと、192.168.1.1,192.168.1.2,192.168.1,3のようなカンマ区切りのIPアドレスリストと、192.168.1.0/24とか192.168.1.0/255.255.255.0のようなCIDR表記に対応するようにしてみました。

arping.20090223.exe.zip

arping.jpg

こんな感じでいちおう実行できます。
D:\>arping.exe 192.168.4.0/24 -p -d -w 80 -c 3 -t 1 -q
オプションの意味を簡単に。

IPアドレスの検査範囲は192.168.4.0/24
IPアドレスを表示する(-p)
IPアドレスの重複を検出する(-d)
1つのIPアドレスを検査する時間は80ミリ秒(-w 80)
1つのIPアドレスを検査するときにARPを3回送信する(-c 3)
1つのIPアドレスを検査するときARPの送信間隔を1ミリ秒にする(-t 1)
表示を少し抑止する(-q)

実際には1回のARP送信で20〜30ミリ秒掛かりますから、80ミリ秒ではギリギリ3回送信出来るかどうか・・・といったところです(※前述の通り、厳密な時間管理も行っていませんから)。さらに実際のネットワークではもっとホストも居るでしょうし、ネットワークも混んでいるでしょうから、現実解としては、-w 300 -t 10 -c 3程度ではないかと予測しています。
あと、1つのIPアドレスを検査するだけであれば、-pは必要ありません。別のバッチファイルやプログラムから利用できるように、それなりに戻り値(ERRORLEVEL)も返すようにしてますので。。。


ホント、誰か作ってないんですかね??ネイティブなWindowsで動くARPing。