1

Недавно я прослушал с помощью Tcpdump пакет «ARP, Request who-has 192.168.2.3 скажи 192.168.2.2, длина 28».

Я хотел бы воспроизвести это сообщение и отправить запрос ARP со своего ноутбука на любой IP-адрес, который я выберу. Как я могу это сделать ?

Я также был бы заинтересован в принудительном обновлении всей таблицы ARP. Я знаю, что удаление таблицы обновит ее, но только на ноутбуке эта операция действительно медленная, и восстановление таблицы ARP может занять до 1/2/5 минут. Есть ли способ принудительно перестроить таблицу, отправив широковещательный ARP-запрос?

Я использую Mac с последней версией ОС Yosemite 10.10.4

Спасибо.

3 ответа3

3

Существует инструмент с открытым исходным кодом, называемый arping который позволяет отправлять пользовательские запросы ARP. Вы можете получить его из вашего любимого менеджера пакетов OS X с открытым исходным кодом, такого как Homebrew или MacPorts.

ARP-запросы обычно передаются (потому что вы не знаете, на какой MAC-адрес их отправлять, иначе вам не нужно отправлять один). Однако они не подстановочные ; то есть вы не можете отправить один запрос, который просит все хосты в сети отправить вам ARP-ответы. Протокол не предоставляет способ указать подстановочный знак вместо целевого IP-адреса.

3

nmap - это инструмент общего назначения для сканирования сетей, который можно использовать только для сканирования arp:

nmap -PR 10.0.1.0/24 -sn

-sn отключает сканирование портов, поэтому выполняет только запросы arp, а -PR - сканирование arp.

1

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

Обновление записей для IP-адресов, которые в данный момент находятся в таблице, не так уж сложно. Просто создайте список текущих записей, используйте sudo arp -da чтобы удалить все текущие записи, а затем используйте что-то вроде ping чтобы заставить ОС перезаписать ARP для каждой из удаленных записей:

ip_addresses=$(arp -an | grep -Ev '\(incomplete\)|ff:ff:ff:ff:ff:ff'| sed -n 's/? (\([0-9.]*\)) at .*$/\1/p')
sudo arp -da
for ip in $ip_addresses; do ping -c1 -t1 $ip & disown; done &>/dev/null

Обратите внимание, что последняя команда запускает все ping ы в фоновом режиме, поэтому все они запускаются одновременно, и таблица должна быть перестроена довольно быстро.

Если вы хотите удалить & повторно ARP только одну запись, сделайте это вместо этого:

sudo arp -d 10.0.0.1
ping -c1 -t1 10.0.0.1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .