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

13

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

user4650183
источник
1
который из? Ваш маршрутизатор должен иметь несколько mac-адресов для обеих сторон связи (входящей / исходящей).
mchid
Это должно пойти в супер пользователя?

Ответы:

6

Мне нравятся однострочники:

arping -f -I $(ip route show match 0/0 | awk '{print $5, $3}')

arpingпоказывает MAC, связанный с IP-адресом шлюза по умолчанию с выхода ip route show match 0/0, проанализированного awk.

Эрик Карвалью
источник
Я попробовал это (и другие ответы). Они дают хорошую информацию, но показанный MAC-адрес был отклонен на две цифры от того, что я искал. Мой принтер перечисляет два маршрутизатора с одинаковым SSID (вероятно, гостевой и обычный) и хочет, чтобы я выбирал по MAC-адресу. Этот ответ askubuntu.com/a/222553 дает мне один из двух перечисленных, с iwconfig | grep "Access Point"командой. Я думаю, что один, который был отключен двумя, был кэшированной версией проводного соединения, которое я отключил, чтобы убедиться, что я получаю беспроводной маршрут.
Хлонгмор
10

Не используйте устаревшие команды 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-адрес defaultIP-адреса маршрутизатора, используйте ip neighи найдите строку с IP-адресом и MAC-адресом после lladdr.

192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE
Андерс
источник
4

Если вы не знаете 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, если он сначала не появляется) и найдите подходящую строку:

$ 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.

glibdud
источник
2
Соответствующий однострочник:arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Фалько
3

Вот один вкладыш, который работает в dash, bashи zsh:

ip neigh|grep "$(ip -4 route list 0/0|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
  1. ip -4 route list 0/0 возвращает что-то вроде:

    по умолчанию через 192.168.0.1 dev eth1 протостатическая метрика 100

  2. мы получаем 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 ДОСТУПНО

  3. Теперь мы получаем пятое поле и делаем его заглавным:

    CA: FE: BA: BE: BE: AF

огорчение
источник
2
Еще немного объяснений поможет остальным понять ваш сценарий!
Джордж Удосен
1
В последней строке есть функция Bash, которая переводит переменную в верхний регистр:echo ${info[5]^^}
Дэвид Фёрстер,
1
@DavidFoerster Я хотел написать переносимую команду, но исходный вариант опирался на индексирование массива, специфичное для zsh (из одного), поэтому я обновил ответ с помощью переносимого варианта между тремя самыми популярными оболочками
Grief
2

Это не полное решение, но вы проверяете 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
2707974
источник
Разве это не получает MAC-адрес интерфейсов на компьютере, а не маршрутизатор?
Уилф
2
Если вы пингуете свой маршрутизатор (скажем ping 192.168.0.1), у вас должен быть MAC-адрес в кеше arp ...
Rmano
спасибо @ 2707974, но я не знаю ни MAC-адреса, ни IP-адреса, и я хочу иметь команду, которая дает мне только IP-адрес или MAC-адрес моего маршрутизатора, потому что я хочу использовать команду в скрипте Python для этого показать все ARP таблица не полезна для меня.
user4650183
2

Это улучшенная версия ответа Горе. Для списка маршрутов ip -4 0/0 возможно возвращение более одной строки (IP), и в этом случае полный один вкладыш не работает. Поэтому следующая модифицированная версия использует только первую строку, которую возвращает список маршрутов 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]'
Schtibb
источник