Как получить MAC-адрес моего маршрутизатора?

Есть ли команда Linux, которая позволяет мне получить MAC-адрес моего маршрутизатора?

1
задан 5 April 2015 в 01:46

5 ответов

Не используйте устаревшие команды 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
5
ответ дан 23 May 2018 в 21:44

Если вы не знаете 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.

4
ответ дан 23 May 2018 в 21:44
  • 1
    Соответствующий однострочный: arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}' – Falko 9 January 2016 в 18:57

Не является полным решением, но вы проверяете 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
2
ответ дан 23 May 2018 в 21:44
  • 1
    Разве это не получает MAC-адрес интерфейсов на компьютере, а не маршрутизатор? – Wilf 4 April 2015 в 19:52
  • 2
    Если вы ping ваш маршрутизатор (скажем ping 192.168.0.1), вы должны иметь свой MAC-адрес в кэше arp ... – Rmano 4 April 2015 в 19:59
  • 3
    спасибо @ 2707974, но я не знаю, нет ли адреса mac без адреса ip, и я хочу иметь команду, которая дает мне только адрес или адрес ip моего маршрутизатора, потому что я хочу использовать эту команду в скрипте python, для которого показано все arp таблица мне не полезна. – user4650183 4 April 2015 в 20:29

Вот однострочный, который работает в 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
2
ответ дан 23 May 2018 в 21:44
  • 1
    Немного больше объяснений поможет остальным понять ваш скрипт! – George Udosen 22 March 2017 в 16:26
  • 2
    Для последней строки есть функция Bash, которая расширяет переменную до верхнего регистра: echo ${info[5]^^} – David Foerster 22 March 2017 в 16:54
  • 3
    @DavidFoerster Я хотел написать переносную команду, но исходный вариант опирался на индексирование массива, специфичное для zsh (от одного), поэтому я обновил ответ с помощью переносного варианта между тремя наиболее популярными оболочками – Grief 22 March 2017 в 17:12

Это улучшенная версия ответа Горе. Возможно, что список маршрутов 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]'
1
ответ дан 23 May 2018 в 21:44

Другие вопросы по тегам:

Похожие вопросы: