Пару
дней назад я увидел в Интернете вопрос о том, какой в Linux существует
аналог команды Cisco IOS "show mac-address-table". При этом пользователь
категорически не хотел пользоваться командой "arp" либо "arp -a". То ли
с целью парсинга и вывода на третьи системы, то ли еще из каких
побуждений. Естестенно, мне стало интересно, и свой вариант я опишу в
этой, так сказать, "статье".
Команда
Linux CLI "arp" либо "arp -a" показывает по принципу "два в одном": и
ARP-таблицу (соответствие MAC и IP-адресов), так и часть таблицы
MAC-адресов (соответствие MAC-адреса интерфейсу, на котором он виден).
Естественно, Cisco, как сетевое устройство, имеет чуть больше функций и
содержит тип записи в таблице MAC-адресов (static, dynamic) и номер
VLAN.
Так показывает Cisco:
#sh mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
All 0100.0ccc.cccc STATIC CPU
All 0100.0ccc.cccd STATIC CPU
<skipped>
All ffff.ffff.ffff STATIC CPU
10 0000.0c07.abcd DYNAMIC Gi0/1
20 000b.be68.bcde DYNAMIC Gi0/2
30 0013.6016.cdef DYNAMIC Gi0/3
<skipped>
Total Mac Addresses for this criterion: 67
#sh ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.100.10.11 0 3c4a.92b2.abcd ARPA Vlan10
Internet 10.100.20.28 162 b4b5.2fab.bcde ARPA Vlan20
Вот таким образом выглядит вывод команд "arp" и 'arp -a" в Linux:
# arp
Address HWtype HWaddress Flags Mask Iface
192.168.10.1 ether 00:50:56:c0:00:08 C eth0
192.168.10.2 ether 00:50:56:f2:83:0a C eth0
# arp -a
? (192.168.10.1) at 00:50:56:c0:00:08 [ether] on eth0
? (192.168.10.2) at 00:50:56:f2:83:0a [ether] on eth0
То есть, как бы и ARP-таблица, и таблица MAC-адресов одновременно. Не столь богато, как в Cisco, но все же.
Если
же подобный вывод является избыточным, можно довольно просто распарсить
его, оставив только интерфейс и MAC, перенаправив вывод в awk:
# arp | grep -v Address | awk ' { print $3,$5 } '
00:50:56:c0:00:08 eth0
00:50:56:f2:83:0a eth0
В случае ненависти или индивидуальной непереносимости команд "arp" и/или "awk", можно пойти другим путем:
- установить bridge-utils;
- создать бридж;
- добавить на бридж интерфейс;
- использовать команду "brctl showmacs"
# brctl addbr 1
# brctl addif 1 eth0
# brctl showmacs 1
port no mac addr is local? ageing timer
1 00:0c:29:1f:cf:5a yes 0.00
1 00:50:56:c0:00:08 no 0.00
Полагаю, таким образом ответ на вопрос можно считать если не исчерпывающим, то, как минимум, содержащим приемлемые варианты.
Комментариев нет:
Отправить комментарий