ARPリクエストを手動で送信する方法

ARPリクエストを手動で送信する方法

最近、Tcpdump を使用して、「ARP、Request who-has 192.168.2.3 tell 192.168.2.2、長さ 28」というパケットをスニッフィングしました。

このメッセージを再現し、ラップトップから任意の IP に ARP 要求を送信したいと思います。どうすればいいでしょうか?

ARP テーブル全体を強制的に更新することにも興味があります。テーブルを削除するとテーブルが更新されることはわかっていますが、ラップトップの場合、この操作は非常に遅く、完全な ARP テーブルを再構築するのに 1/2/5 分かかることがあります。ブロードキャストされた ARP 要求を送信して、テーブルを強制的に再構築する方法はありますか?

私は最新のOS Yosemite 10.10.4を搭載したMacを使用しています

ありがとう。

答え1

nmapはネットワークをスキャンするための汎用ツールであり、ARP スキャンのみを実行するために使用できます。

nmap -PR 10.0.1.0/24 -sn

-snポート スキャンを無効にするため、ARP 要求のみを実行し、-PRARP スキャンを実行します。

答え2

カスタム ARP 要求を送信できる というオープンソース ツールがありますarping。Homebrew や MacPorts などのお気に入りの OS X オープンソース パッケージ マネージャーから入手できます。

ARPリクエストは通常​​ブロードキャストされます(どのMACアドレスに送信すればよいかわからないため、送信する必要はありません)。ただし、ワイルドカードつまり、ネットワーク上のすべてのホストに ARP 応答を送信するように要求する単一の要求を送信することはできません。プロトコルでは、ターゲット IP アドレスの代わりにワイルドカードを指定する方法が提供されていません。

答え3

ARP パケットは、OS によってオンデマンドで送信されます。つまり、同じサブネット上の別の IP アドレスと通信する必要があり、そのホストの MAC アドレスをまだ知らない場合に、ARP 要求が送信されます。つまり、テーブルの再構築は、実際には明確に定義されたプロセスではありません。これは、コンピューターが最初に通信を試みるまで、他のホストがどのようなものなのかが実際にはわからないためです。

現在テーブルにある IP アドレスのエントリを更新するのはそれほど難しくありません。現在のエントリのリストを作成し、 を使用してsudo arp -da現在のすべてのエントリを削除し、次のようなものを使用してpingOS に削除された各エントリの再 ARP を強制します。

ip_addresses=$(arp -an | grep -Ev '\(incomplete\)|ff:ff:ff:ff:ff:ff'| sed -n 's/? (\([0-9.]*\)) at .*$/\1/p')
sudo arp -da
for ip in $ip_addresses; do ping -c1 -t1 $ip & disown; done &>/dev/null

最後のコマンドはバックグラウンドですべての を実行するpingので、ほぼすべてが一度に実行され、テーブルがかなり速く再構築されることに注意してください。

単一のエントリのみを削除して再 ARP する場合は、代わりに次の操作を実行します。

sudo arp -d 10.0.0.1
ping -c1 -t1 10.0.0.1

関連情報