Есть ли команда Linux, которая позволяет мне получить 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
Чтобы увидеть MAC-адрес IP-адреса маршрутизатора default, используйте ip neigh и найдите линию с IP-адресом и MAC-адресом после lladdr.
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 этой строки - это то, что вы ищете. Затем следуйте из команды route с помощью arp -n (пинг IP, если он не отображается сначала), и найдите соответствующую строку:
$ 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.
Не является полным решением, но вы проверяете 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
Вот однострочный, который работает в 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 мы получаем IP из этой строки в качестве третьего поля с cut и grep-линией, содержащей этот IP-адрес и непосредственное пространство после выхода из сетевого окружения. (требуется пространство, чтобы избежать совпадения 192.168.0.1 с 192.168.0.10), совпадающая строка будет выглядеть примерно так: 192.168.0.1 dev eth1 lladdr ca: fe: ba: be: be: af REACHABLE Теперь мы получаем поле fifth и делаем это В верхнем регистре: CA: FE: BA: BE: BE: AF Это улучшенная версия ответа Горе. Возможно, что список маршрутов ip -4 0/0 возвращает более одной строки (IP), и в этом случае полный один лайнер не работает. Таким образом, следующая модифицированная версия использует только первую строку, возвращаемую списком маршрутов ip -4 route 0/0.
ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'