Возврат MAC-адреса активных интерфейсов в локальной сети с помощью Bash-скрипта - PullRequest
0 голосов
/ 06 июля 2011

У меня есть сервер Ubuntu в локальной сети, в котором есть ряд других устройств, как локальных, так и беспроводных. Я хотел бы запустить скрипт Bash , чтобы узнать MAC-адрес (только один на машину) интерфейса, который используется на всех машинах в локальной сети. Это означает, что в зависимости от того, какой ноутбук кто-то использовал (ЛВС, беспроводной или другой), он будет возвращать только адрес активного интерфейса.

Я не уверен, какую команду использовать (может быть, arp?). ifconfig работает только для моей локальной машины, но я хотел бы сделать что-то подобное регулярное выражение из вопроса переполнения стека Лучший способ извлечь MAC-адрес из вывода ifconfig? .

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 06 июля 2011

Это легко сделать с помощью команды arps UNIX, но вы увидите только MAC-адреса хостов, которые находятся в вашей таблице ARP.Лучший способ заполнить таблицу каждым хостом в вашей подсети - использовать nmap с аргументом -sP.

Короче:

netstat -rn (local subnet/mask)

затем

/sbin/arp -n 
0 голосов
/ 06 июля 2011

Большинство юниксов предоставляют флаг "UP" в строке флагов вывода ifconfig (8) для включенных интерфейсов, которые вы можете сопоставить с этим.

eth0      Link encap:Ethernet  HWaddr 00:01:29:a3:f6:1d  
          inet addr:192.168.0.254  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::201:29ff:fea3:f61d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:35163720 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36652372 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:32425323589 (32.4 GB)  TX bytes:4255769808 (4.2 GB)
          Interrupt:17 

(обратите внимание на UP в 4-й строке)

Однако вы можете включить более одного интерфейса, и в этом случае вам, возможно, придется посмотреть на маршрутизацию, чтобы выяснить, какиеинтерфейс будет использоваться для пути к маршруту по умолчанию (если в этом поможет ifconfig -rn)

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
.
.
.
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 eth0

здесь запись 0.0.0.0 является маршрутом по умолчанию, 192.168.0.1 будет хостом, который будетиспользуется в качестве маршрута по умолчанию, а eth0 - интерфейс, по которому будет передаваться трафик.

...