Вы видите в роутере незнакомое устройство — но не понимаете что это. Или нужно инвентаризировать все машины в сети перед обслуживанием. Или просто хочется убедиться, что к корпоративной сети никто лишний не подключён. Во всех этих случаях ARP-сканирование даёт ответ быстрее и надёжнее чем ping — потому что устройства могут блокировать ICMP, но скрыться от ARP практически невозможно.
Как работает ARP и почему его нельзя обмануть
ARP (Address Resolution Protocol) — механизм, который позволяет устройствам в локальной сети находить друг друга по MAC-адресу, зная только IP. Когда компьютер хочет отправить пакет на IP-адрес в той же подсети, он сначала спрашивает у всей сети: «У кого адрес 192.168.0.50?» Это широковещательный запрос, его слышат все устройства. Владелец адреса отвечает: «У меня, мой MAC — xx:xx:xx:xx:xx:xx». Ответ кешируется в ARP-таблице.
Принципиальная особенность ARP: протокол работает на канальном уровне и не использует маршрутизацию. Это значит, что arp-scan обнаружит только устройства в той же подсети — но зато все, включая те, что настроены блокировать ping или не отвечают на TCP-соединения.
Посмотреть текущую ARP-таблицу системы:
arp -a
Или через более современную команду:
ip neigh show
Установка arp-scan
arp-scan — специализированная утилита для ARP-сканирования, работает на уровне сырых сокетов и требует прав суперпользователя.
Установка на Debian/Ubuntu:
sudo apt install arp-scan
Установка на Fedora/RHEL:
sudo dnf install arp-scan
Установка на Arch Linux:
sudo pacman -S arp-scan
Определить сетевой интерфейс перед сканированием
Перед сканированием нужно знать имя активного сетевого интерфейса. Посмотреть список всех интерфейсов:
ip addr list

В выводе нужно найти интерфейс с присвоенным IP-адресом и статусом UP. Типичные имена: eth0, enp24s0, ens3 для проводных; wlan0, wlp3s0 для беспроводных. На VPS это чаще eth0 или ens3.
Сканировать всю локальную сеть
Запустить сканирование с автоматическим определением диапазона IP для текущей подсети:
sudo arp-scan --interface=enp24s0 --localnet

--localnet автоматически вычисляет диапазон сканирования на основе IP и маски интерфейса. Если интерфейс имеет адрес 192.168.0.102/24 — будет просканирован весь диапазон 192.168.0.0–192.168.0.255.
Если параметр --interface не указан, arp-scan выберет интерфейс с наименьшим номером в системе самостоятельно.
Задать диапазон вручную через маску подсети
Вместо --localnet можно указать конкретную подсеть в нотации CIDR:
sudo arp-scan --interface=enp24s0 192.168.0.0/24
Для подсети /16 (65534 хоста):
sudo arp-scan --interface=enp24s0 10.0.0.0/16
Для сканирования конкретного диапазона:
sudo arp-scan --interface=enp24s0 192.168.1.1-192.168.1.50
Что показывает вывод arp-scan
Типичный вывод:
Interface: enp24s0, type: EN10MB, MAC: 00:d8:61:16:a5:a5, IPv4: 192.168.0.102
Starting arp-scan 1.9.7 with 256 hosts
192.168.0.1 b0:be:76:43:21:41 TP-LINK TECHNOLOGIES CO.,LTD.
192.168.0.101 74:d4:35:00:b1:ef GIGA-BYTE TECHNOLOGY CO.,LTD.
2 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.989 seconds. 2 responded
Три столбца: IP-адрес, MAC-адрес, производитель (определяется по первым 3 байтам MAC из базы IEEE OUI). Производитель помогает быстро идентифицировать устройство: роутер, ноутбук, принтер, умный дом и т.д.
Если одно и то же устройство отвечает с двух разных MAC-адресов — возможен ARP-спуфинг.
Полезные флаги arp-scan
Увеличить задержку между пакетами (для нестабильных сетей):
sudo arp-scan --interface=enp24s0 --localnet --bandwidth=1000000
Повторить каждый запрос N раз (снижает шанс пропустить устройство):
sudo arp-scan --interface=enp24s0 --localnet --retry=3
Сохранить результат в файл для последующего сравнения:
sudo arp-scan --interface=enp24s0 --localnet > scan_$(date +%Y%m%d).txt
Альтернатива: nmap с ARP-обнаружением
nmap умеет делать ARP-сканирование через флаг -PR:
sudo nmap -sn -PR 192.168.0.0/24
-sn отключает сканирование портов, -PR использует ARP для обнаружения. На выходе — список активных хостов с их именами (если резолвится DNS).
Почему ARP не работает: типичные проблемы
Конфликт IP-адресов. Два устройства с одним IP создают непредсказуемую ситуацию: arp-scan может показать оба MAC-адреса для одного IP, или видеть только один из них. Признак в выводе — DUP напротив IP.
ARP-спуфинг (отравление ARP). Атакующий рассылает поддельные ARP-ответы, привязывая свой MAC к чужому IP. В выводе arp-scan это видно как дублирующиеся записи. Для детектирования использовать arpwatch:
sudo apt install arpwatch
sudo systemctl enable --now arpwatch
arpwatch мониторит ARP-таблицу и отправляет уведомление при каждом изменении пары IP/MAC.
Неправильная маска подсети. Если интерфейс настроен с маской /32 — --localnet не просканирует ничего. Проверить маску:
ip addr show enp24s0
Блокировка на коммутаторе. Некоторые управляемые коммутаторы фильтруют ARP между VLAN. В таком случае сканирование даст результаты только в рамках одного VLAN.
Шпаргалка
| Задача | Команда |
|---|---|
| Установить arp-scan | sudo apt install arp-scan |
| Посмотреть интерфейсы | ip addr list |
| Сканировать всю подсеть | sudo arp-scan --interface=eth0 --localnet |
| Сканировать конкретный диапазон | sudo arp-scan --interface=eth0 192.168.0.0/24 |
| Посмотреть ARP-таблицу | arp -a или ip neigh show |
| Сохранить результат | sudo arp-scan --localnet > scan.txt |
| ARP-сканирование через nmap | sudo nmap -sn -PR 192.168.0.0/24 |
| Мониторинг изменений ARP | sudo systemctl enable --now arpwatch |