как обнаружить, что указанная машина присутствует в локальной сети

Как я могу обнаружить - используя bash, если это возможно, - что конкретная машина (то есть имя или MAC-адрес) появилась в локальной сети? IP-адреса назначаются динамически, поэтому я не могу полагаться на «традиционный» пинг.

1
задан 18 February 2013 в 23:23

3 ответа

Если вы знаете MAC-адрес, вы можете пропинговать его с помощью arping

0
ответ дан 18 February 2013 в 23:23

Вам нужно активно отслеживать трафик, чтобы сделать это. Посмотрите на arpalert или arpwatch. Арпинг также является опцией, но он не будет работать в этом случае, потому что ему нужен целевой IP-адрес.

0
ответ дан 18 February 2013 в 23:23

Самое простое решение - проверить журналы сервера DHCP, если у вас есть к ним доступ.

В противном случае вы можете использовать традиционную команду ping для широковещательного пинга локальной сети и посмотреть в локальной таблице ARP вашей системы, чтобы узнать, ответил ли целевой хост. Это не требует знания IP-адреса цели, только ее MAC. Пример:

ping=`which ping`
iface=eth0 # MAYBE CHANGE THIS
bcast=`ip a ls $iface | awk '/inet? /{ print $4 ; exit }'`
cmd="$ping -bnrc1 $bcast"
target_mac='00:11:22:33:44:55' # DEFINITELY CHANGE THIS
if [[ -u $ping ]] ; then $cmd ; else sudo $cmd ; fi
grep $target_mac /proc/net/arp

Это похоже на «arping» в том, что оно должно вызывать ARP-ответ, только оно более шумное. По этой причине добавьте '-r', чтобы ограничить его локальной сетью, используйте адрес направленного широковещания (который захватывает фрагмент awk, но вам может потребоваться настроить 'iface') вместо '255.255.255.255' и отправлять только один эхо-запрос ICMP с '-c1'. Отключите обратное разрешение DNS с помощью '-n'.

'ping' будет учитывать опцию широковещания '-b', только если это setuid root или у вас есть привилегии root, поэтому я включил его в if / else, чтобы поймать это.

0
ответ дан 18 February 2013 в 23:23

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

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