PythonでデフォルトゲートウェイのMACアドレスを取得する簡単な方法はありますか?
コードを実行しているLinuxマシンからARP要求を行うことができないため、 ARPテーブルから直接取得する必要があります。
PythonでデフォルトゲートウェイのMACアドレスを取得する簡単な方法はありますか?
コードを実行しているLinuxマシンからARP要求を行うことができないため、 ARPテーブルから直接取得する必要があります。
Linuxを使用していますか?ファイルを解析でき/proc/net/arp
ます。ゲートウェイのハードウェアアドレスが含まれています。
コンテンツを読み取って/proc/net/arp
解析することができます。これにより、既知のIP-MACアドレスがいくつか提供されます。
ゲートウェイはおそらく常に認識されていますが、そうでない場合はpingを実行する必要があり、ARP要求が自動的に生成されます。
デフォルトのgwはで見つけることができます/proc/net/route
次のDevFSファイルは、この情報を提供します。
/proc/net/arp
/proc/net/route
ホスト/マスクとして0/0を使用するルートエントリを検索します。
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
eth0 00000000 B91A210A 0003 0 0 100 00000000 0 0 0
ゲートウェイフィールドを変換します(リトルエンディアンの16進数です... grr):
import struct
from IPy import IP
address = IP(struct.unpack('<I', struct.pack('>I', int(i, 16)))[0])
#Converts 'B91A210A' to IP('10.33.26.185')
そこから、arpテーブルでデフォルトゲートウェイを見つけることができます。
IP address HW type Flags HW address Mask Device
10.33.26.185 0x1 0x2 e6:92:ec:f5:af:f7 * eth0
表示されない場合は、pingを1回発行してから、もう一度確認してから失敗します。