Команда arp предназначена для задействования одноименной утилиты, осуществляющей манипуляции с ARP-кэшем сетевого стека Linux. ARP (Address Resolution Protocol или протокол разрешения адресов) является протоколом компьютерных сетей, предназначенным для определения MAC-адресов удаленных узлов на основе их известных IP-адресов. Данный протокол реализуется лишь в сетях с IPv4 (в случае IPv6 аналогичный функционал реализован в рамках протокола ICMP) и был стандартизирован в рамках рабочего предложения RFC 826 от ноября 1982 года. Кэш ARP в Linux создается для каждого из сетевых интерфейсов и по сути является ничем иным, как набором пар IP-адрес — MAC-адрес. Утилита arp позволяет просматривать список этих пар, добавлять новые и удалять существующие.
Базовый синтаксис команды выглядит следующим образом:
# arp [параметры] [IP-адрес] [MAC-адрес]
Хотя утилита и может использоваться от лица обычного пользователя для чтения ARP-кэша, любое изменение содержимого этого кэша требует прав суперпользователя. Утилита поддерживает ряд параметров, причем при ее использовании без параметров выводится содержимое ARP-кэша. Параметр -a позволяет вывести содержимое кэша в компактном формате, параметр -n — всегда выводить IP-адреса узлов, даже если известны их имена, параметр -s — добавлять элементы в кэш, параметр -d — удалять элементы из кэша, а параметр -f — добавлять элементы в кэш из файла. Отдельно следует упомянуть о параметре -i, позволяющем указать интересующий сетевой интерфейс. Утилита поддерживает некоторые другие специфические параметры, которые вряд ли понадобятся рядовому пользователю.
Вывод содержимого ARP-кэша реализован в формате таблицы со следующими столбцами:
В первую очередь вам придется установить рассматриваемую утилиту; проще всего это сделать с помощью терминала путем исполнения соответствующей вашему дистрибутиву команды.
Команда для Linux Mint, Ubuntu, Debian:
# apt-get install net-tools
Команда для Fedora Workstation:
# dnf install net-tools
Для вывода содержимого ARP-кэша достаточно использовать утилиту без каких-либо параметров:
$ arp
Адрес HW-тип HW-адрес Флаги Маска Интерфейс
192.168.1.250 ether 00:12:34:56:78:c9 C enp6s0
_gateway ether 00:27:34:56:78:e8 C enp6s0
192.168.1.249 ether 00:12:34:56:78:16 C enp6s0
192.168.1.251 ether 00:12:34:56:78:cd C enp6s0
192.168.1.252 ether 00:12:34:56:78:fd C enp6s0
Как видно, во второй строке выводится имя узла вместо IP-адреса. Если вам нужны лишь IP-адреса, вы можете воспользоваться параметром -n:
$ arp -n
Адрес HW-тип HW-адрес Флаги Маска Интерфейс
192.168.1.250 ether 00:12:34:56:78:c9 C enp6s0
192.168.1.1 ether 00:27:34:56:78:e8 C enp6s0
192.168.1.249 ether 00:12:34:56:78:16 C enp6s0
192.168.1.251 ether 00:12:34:56:78:cd C enp6s0
192.168.1.252 ether 00:12:34:56:78:fd C enp6s0
Если же вас интересует краткий вывод, вы можете использовать параметр -a:
$ arp -a
? (192.168.1.250) в 00:12:34:56:78:c9 [ether] на enp6s0
_gateway (192.168.1.1) в 00:27:34:56:78:e8 [ether] на enp6s0
? (192.168.1.249) в 00:12:34:56:78:16 [ether] на enp6s0
? (192.168.1.251) в 00:12:34:56:78:cd [ether] на enp6s0
? (192.168.1.252) в 00:12:34:56:78:fd [ether] на enp6s0
Очевидно, что во всех случаях выводится аналогичная информация. Основными столбцами являются первый, в котором выводится IP-адрес, третий, в котором выводится MAC-адрес и шестой, в котором выводится имя сетевого интерфейса.
Для добавления записи в ARP-кэш следует использовать параметр -s, указать IP- и MAC-адреса узла. Кроме того, неплохо бы было использовать параметр -i и передать имя сетевого интерфейса. Разумеется, вам потребуются права суперпользователя.
# arp -s 192.168.1.253 00:12:34:56:78:6D -i enp6s0
В случае успешного добавления записи утилита не выведет каких-либо сообщений. Впрочем, факт добавления записи достаточно просто проверить также с помощью рассматриваемой утилиты.
$ arp
Адрес HW-тип HW-адрес Флаги Маска Интерфейс
192.168.1.250 ether 00:12:34:56:78:c9 C enp6s0
_gateway ether 00:27:34:56:78:e8 C enp6s0
192.168.1.249 ether 00:12:34:56:78:16 C enp6s0
192.168.1.251 ether 00:12:34:56:78:cd C enp6s0
192.168.1.252 ether 00:12:34:56:78:fd C enp6s0
192.168.1.253 ether 00:12:34:56:78:6d CM enp6s0
Обратите внимание на то, что последняя добавленная нами запись содержит флаг M, то есть, отмечена как добавленная вручную.
Для удаления записи из ARP-кэша достаточно использовать параметр -d и указать IP-адрес интересующего узла. Как и раньше, следует добавлять параметр -i и имя сетевого интерфейса, а также обладать правами суперпользователя.
Для начала ознакомимся с содержимым ARP-кэша:
$ arp
Адрес HW-тип HW-адрес Флаги Маска Интерфейс
192.168.1.250 ether 00:12:34:56:78:c9 C enp6s0
_gateway ether 00:27:34:56:78:e8 C enp6s0
192.168.1.249 ether 00:12:34:56:78:16 C enp6s0
192.168.1.251 ether 00:12:34:56:78:cd C enp6s0
192.168.1.252 ether 00:12:34:56:78:fd C enp6s0
192.168.1.253 ether 00:12:34:56:78:6d CM enp6s0
Попробуем удалить последнюю добавленную нами запись:
# arp -d 192.168.1.253 -i enp6s0
Утилита также не выведет каких-либо сообщений в случае корректной работы. В результате запись будет удалена:
$ arp
Адрес HW-тип HW-адрес Флаги Маска Интерфейс
192.168.1.250 ether 00:12:34:56:78:c9 C enp6s0
_gateway ether 00:27:34:56:78:e8 C enp6s0
192.168.1.249 ether 00:12:34:56:78:16 C enp6s0
192.168.1.251 ether 00:12:34:56:78:cd C enp6s0
192.168.1.252 ether 00:12:34:56:78:fd C enp6s0
Очевидно, что запись пропала из ARP-кэша.
Для того, чтобы добавить несколько записей в ARP-кэш, следует подготовить текстовый файл с парами IP-адрес — MAC-адрес и использовать параметр -f утилиты с передачей пути к этому файлу. Разумеется, права суперпользователя также необходимы.
Создадим файл arp.txt со следующим содержимым:
192.168.1.253 00:12:34:56:78:6D
192.168.1.4 CC:73:34:56:78:24
Для добавления записей достаточно использовать параметр -f утилиты:
# arp -f ./arp.txt
Утилита ничего не выводит, что говорит о ее корректной работе. Для проверки также достаточно использовать утилиту arp без параметров:
$ arp
Адрес HW-тип HW-адрес Флаги Маска Интерфейс
192.168.1.250 ether 00:12:34:56:78:c9 C enp6s0
_gateway ether 00:27:34:56:78:e8 C enp6s0
192.168.1.249 ether 00:12:34:56:78:16 C enp6s0
192.168.1.4 ether cc:73:34:56:78:24 CM enp6s0
192.168.1.251 ether 00:12:34:56:78:cd C enp6s0
192.168.1.252 ether 00:12:34:56:78:fd C enp6s0
192.168.1.253 ether 00:12:34:56:78:6d CM enp6s0
Две новых записи появились в таблице.