Аналог команды Cisco IOS "show mac-address-table" в Linux

Аналог команды Cisco IOS "show mac-address-table" в Linux
Пару дней назад я увидел в Интернете вопрос о том, какой в Linux существует аналог команды Cisco IOS "show mac-address-table". При этом пользователь категорически не хотел пользоваться командой "arp" либо "arp -a". То ли с целью парсинга и вывода на третьи системы, то ли еще из каких побуждений. Естестенно, мне стало интересно, и свой вариант я опишу в этой, так сказать, "статье".

name='more'>
Команда 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


Полагаю, таким образом ответ на вопрос можно считать если не исчерпывающим, то, как минимум, содержащим приемлемые варианты.
Alt text

Цифровые следы - ваша слабость, и хакеры это знают.

Подпишитесь и узнайте, как их замести!

Андрей Дугин

Практическая информационная безопасность и защита информации | Information Security and Cyber Defense in Deed