ルーターのMACアドレスを取得できるLinuxコマンドはありますか?
私はワンライナーが好きです:
arping -f -I $(ip route show match 0/0 | awk '{print $5, $3}')
arping
は、awk
で解析されたip route show match 0/0
の出力からのデフォルトゲートウェイIPアドレスに関連付けられたMACを示します。
廃止されたコマンドifconfig
(8)、arp
(8)、またはroute
(8)は使用しないでください。それらを置き換える新しいコマンドを使用して、さらに多くのことを行うことができます、ip
(8)。
ip route list
を使用して、マシンにあるdefault
ルーターを確認します。これは、default
(または0.0.0.0
)で始まる行で、その後のルーターへのIPアドレスが必要です。 IPv6を使用する場合は、-6
スイッチ、ip -6 route list
を追加するだけです。
default via 192.168.11.1 dev eth0 proto static
default
ルーターのIPアドレスのMACアドレスを確認するには、ip neigh
を使用し、lladdr
の後にIPアドレスとMACアドレスを持つ行を検索します。
192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE
ルーターのIPがわからない場合は、おそらくゲートウェイである可能性があります route
コマンドから :
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
フラグUG
のある行に注意してください。その行のGateway
列のアドレスは、探しているものです。次に 2707974の提案 にarp -n
を付けて(最初に表示されない場合はIPにpingを実行)、一致する行を見つけます。
$ arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.0.1 ether 00:11:22:33:44:55 C eth0
192.168.0.2 ether 66:77:88:99:aa:bb C eth0
ここでは、ルーターのMACは00:11:22:33:44:55
になります。
dash
、bash
、およびzsh
で機能するワンライナーは次のとおりです。
ip neigh|grep "$(ip -4 route list 0/0|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
ip -4 route list 0/0
は次のようなものを返します。
192.168.0.1を介したデフォルトdev eth1 proto static metric 100
cut
の3番目のフィールドとしてその行からIPを取得し、そのIPとネットワーク近傍の出力からその直後のスペースを含むgrep行を取得します。 (192.168.0.1
と192.168.0.10
の一致を回避するにはスペースが必要です)、一致した行は次のようになります。
192.168.0.1 dev eth1 lladdr ca:fe:ba:be:be:af REACHABLE
CA:FE:BA:BE:BE:AF
完全な解決策ではありませんが、arp -nを確認します。
ddd@mmm ~ $ arp -n
Address HWtype HWaddress Flags Mask Iface
xxx.xxx.xxx.xxx ether 00:e0:1e:b4:12:42 C eth0
yyy.yyy.yyy.yyy ether 00:14:78:52:28:d2 C wlan0
これは、Griefの回答の改良版です。 ip -4ルートリスト0/0が複数の行(IP)を返す可能性があります。この場合、完全な1つのライナーは機能しません。したがって、次の変更されたバージョンは、ip -4ルートリスト0/0が返す最初の行のみを使用します。
ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'