2

Macでのプログラミングは初めてです。プログラムによって管理されるすべてのネットワーク インターフェイスが、ARP キャッシュに GW の MAC アドレスを持っていることを常に保証したいと考えています。これを行うには、MAC アドレスが欠落していることを検出した場合に、プログラムで ARP 要求を GW に送信したいと考えています。

AF_PACKET/PF_PACKET アドレス ファミリとプロトコルの raw ソケットは、Mac OS X ではサポートされていないようです。C++ でこれを行う別の方法はありますか? たとえば、ARP 要求を送信するために使用できる API はありますか?

4

1 に答える 1

1

各ホストがデフォルト ゲートウェイに関連付けられた正しい ARP エントリを持っていることを確認する必要がある場合は、静的 ARP エントリを設定できます。静的 ARP エントリは ARP テーブルに永久に残るため、定期的に ARP 要求を送信する必要はありません。

arp -s "IP_GW" "MAC_GW" -i "DEVICE YOU WANT TO SET, E.G: en0"

とにかく、C ライブラリ "libnet" (Windows と Linux でも利用可能) を使用して ARP 要求を送信できます。これは下位レベルのライブラリであり、バイト レベルのパケットとそのヘッダーを処理する必要があります。ARP リクエストを作成するには、以下を使用する必要があります。

libnet_autobuild_arp()
libnet_autobuild_ethernet()

ここにlibnet のチュートリアルがあります。

于 2013-11-10T09:22:24.550 に答える