いくつかの IP アドレスに ARP 要求を送信しますが、ご存じのとおり、ホストが常に同じ IP アドレスを持っているとは限りません。最初に ARP 要求を送信し、応答するホストの MAC アドレスを保存してから、MAC アドレスで arp パッケージを送信します。 IP ではなく、すべてのホストに ARP パケットを送信し、応答するホストの MAC アドレスを保存することはできましたが、ターゲット IP アドレスではなくターゲット MAC アドレスを使用して ARP パケットを送信する方法がわかりません。いくつか提案がありますか?コードを入れたい場合は教えてください
4 に答える
ARPは、主にIPアドレスをMACアドレスに変換するために使用され、その逆ではありません。Inverse ARPの仕様(MACアドレスをIPアドレスに変換する)は存在しますが、Linux、FreeBSD、またはWindowsマシンのいずれもデフォルトでそれをサポートしません。
IPアドレスを頻繁に変更するマシンを追跡しようとしていて、そのマシンへの管理アクセス権がある場合は、mDNS(LinuxまたはFreeBSDの場合)またはLLMNR(Windowsの場合)を調べることができます。これらのプロトコルはどちらも、ホスト名を要求することにより、ローカルリンクネットワーク上のマシンにクエリを実行できます。DNSのリンクローカルバージョンを介してIPアドレスを解決し、IPアドレスからMACアドレスを解決して、通信します。
ARPメッセージを送信するための単純なAPIがないため、ARPを介した直接通信は困難です。Linuxでは、rawソケット(を参照man 7 raw
)を使用して、ARPプロトコルを自分で実装する必要があります。
あなたの質問を正しく理解したように、ARP 要求ブロードキャストではなく特定のホストに ARP msg を送信するための簡単なソリューションが必要です。
私の知る限り、それを行うことができる「arping」と呼ばれるツールがありますが、それには2つのバージョンがあります1.arping(iputils libの一部)2.Thomas Habetsのarping(これにより、APRメッセージを宛先に直接送信できます. MAK アドレス)
デフォルトでは、ほとんどの Linux には arping ツールがあります (Thomas Habets の arping ではありません) が、Thomas Habets の arping をインターネットから入手して使用することができます。
したがって、適切に機能させるには、iputils arping が必要なため、以前のものを削除する必要があり、NetworkManager も削除されます。
これがお役に立てば幸いです。
私はあなたが何かを混同していると思います。ARP は OSI レイヤー 3 で動作し、MAC アドレスは OSI レイヤー 2 のイーサネットに関連しています。IP のような OSI レイヤー 3 でパッケージを送信するには、イーサネットの正しい MAC アドレスを知っている必要があります。したがって、すべてのステーションにブロードキャスト (ARP 要求) を行うと、正しい MAC アドレスで (usicast ごとに) 応答が得られます。そのMACアドレスでIPパッケージを送信できます。