Поиск по сайту:

Как использовать команду arping в Linux


Команда Linux arping похожа на ping, но только для локальных сетей. Его преимущество в том, что он работает на более низком сетевом уровне, иногда получая ответы, когда ping не может. Вот как это использовать.

ARP-протокол

IP-адрес — это числовое обозначение сетевого устройства. Он используется в качестве адреса, поэтому соответствующий сетевой трафик поступает на нужное устройство. Но большинство устройств в локальных сетях имеют динамические IP-адреса. То есть их IP-адрес вполне может измениться при следующей загрузке.

Чтобы иметь возможность правильно направлять сетевой трафик на соответствующее устройство, необходимо использовать схему, которая сопоставляет IP-адреса с адресами управления доступом к среде (MAC). MAC-адрес — это уникальный идентификатор, установленный в момент изготовления устройства. IP-адрес – это логический адрес. MAC-адрес – это физический адрес.

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

Если маршрутизатору необходимо направить данные на устройство, о котором он не знает, он делает запрос ARP для получения MAC-адреса нового устройства.

Когда новое устройство подключается к вашей сети, ему назначается IP-адрес, но этого недостаточно, чтобы на самом деле направить на него трафик. Маршрутизатору необходимо получить MAC-адрес, который является недостающей частью мозаики. Но поскольку IP-адрес сам по себе не является достаточной информацией для маршрутизации пакетов на устройство, Catch-22 не может использовать IP-адрес для запроса оборудования для получения MAC-адреса.

Модель взаимодействия открытых систем группирует технологии, составляющие работающую сеть, в виде ряда уровней. Высшие слои не могут работать без нижних слоев. Модель OSI состоит из семи уровней.

  • Уровень 7 — это самый верхний уровень, прикладной уровень. Он предоставляет информацию пользователю компьютера и получает от него информацию.
  • Уровень 6 – это уровень представления . Это гарантирует, что данные находятся в правильном формате или состоянии при перемещении в сетевой формат и из него. На этом уровне происходит шифрование и дешифрование.
  • Уровень 5 – это сеансовый уровень. Сеанс — это сетевое соединение между двумя или более устройствами. Этот уровень занимается такими вопросами, как инициация подключения, квитирование, тайм-ауты и разрыв соединений, которые больше не требуются.
  • Уровень 4 – транспортный уровень. Это слой, который скоординированно перемещает данные по сети. Этот уровень связан с такими вещами, как скорость передачи и объемы данных. На этом уровне работает протокол управления передачей — TCP в TCP/IP.
  • Уровень 3 – сетевой уровень. Здесь происходит маршрутизация и пересылка пакетов. Это уровень, на котором работает интернет-протокол — IP в TCP/IP.
  • Уровень 2 – канал передачи данных . Он используется для отправки пакетов между устройствами с прямой адресацией с использованием широковещательной рассылки на каждое устройство или одноадресной рассылки на определенные MAC-адреса.
  • Уровень 1 – это физический уровень. Это касается физической инфраструктуры, включая кабели, маршрутизаторы и сетевые коммутаторы. Радиоволны, используемые в Wi-Fi, также попадают в эту категорию.

Когда маршрутизатор получает пакет для IP-адреса, которого нет в его таблице, он отправляет широковещательный пакет во всю сеть. Он фактически спрашивает: «У кого есть этот IP-адрес?» Это сообщение второго уровня, поэтому оно не зависит от IP-маршрутизации.

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

Команда арпинга

Все умные операции с ARP выполняются автоматически в фоновом режиме, создавая и поддерживая таблицу ARP. Команда arping переносит некоторые функции запроса ARP в окно терминала. Он работает на втором уровне OSI и может запрашивать ответ от устройства, когда ping этого не делает.

В Fedora 36 arping уже был установлен, но нам нужно было установить его в Manjaro 21 и Ubuntu 22.04.

В Ubuntu команда:

sudo apt install arping

На Manjaro вам нужно ввести:

sudo pacman -Sy arping

Самый простой способ использовать arping — использовать IP-адрес. Это должен быть адрес устройства с прямой адресацией, подключенного к локальной сети. Поскольку arping работает на втором уровне, маршрутизация невозможна. Вам нужно будет использовать sudo с arping.

sudo arping 192.168.1.17

Нажмите Ctrl+C, чтобы остановить. Возвращаемая информация представляет собой MAC-адрес отвечающего устройства, порядковый номер запроса arping и время приема-передачи для выполнения запроса arping.

Сравните вывод с выводом команды ping ниже. Команда ping возвращает дополнительную информацию о времени прохождения сетевого пакета туда и обратно. Команда arping предоставляет меньше статистических данных о времени, но включает MAC-адрес устройства.

ping 192.168.1.17

Вы также можете использовать сетевое имя устройства с arping.

sudo arping fedora-36.local

Вы можете использовать параметр -c (количество), чтобы указать arping останавливаться после заданного количества запросов. Эта команда приказывает arping повторить попытку дважды, а затем остановиться.

sudo arping -c 2 192.168.1.18

Если на вашем компьютере несколько сетевых интерфейсов, вы можете использовать параметр -I (интерфейс), чтобы указать arping, какой интерфейс использовать.

Вы можете использовать команду ip link, чтобы получить список сетевых интерфейсов.

ip link

Этот компьютер имеет три интерфейса. Виртуальный интерфейс lo используется как петля для внутренних соединений между программами на одном компьютере. Нам это здесь ни к чему. Мы можем использовать либо Ethernet-соединение enp3s0, либо беспроводной интерфейс wlan0.

Эта команда указывает arping использовать выбранный нами интерфейс, а не делать собственный выбор.

sudo arping -c 2 -I enp3s0 manjaro-21.local

Использование арпинга в скриптах

Заключив arping в цикл скрипта, мы можем заставить его работать с диапазоном IP-адресов. Скопируйте текст из этого сценария и сохраните его в файле с именем «scan-range.sh».

Вам нужно будет отредактировать скрипт и заменить все вхождения 192.168.1 на IP-адрес вашей сети.

#!/bin/bash

for ((device=$1; device<=$2; device++))
do

  arping -c 1 192.168.1.$device | grep -E "1 response|1 packets received" > /dev/null

    if [ $? == 0 ]; then
      echo "192.168.1.$device responded."      
    else
      echo "192.168.1.$device didn't respond."
  fi
  
done

Сценарий принимает два параметра командной строки. Они используются в качестве последнего октета IP-адресов диапазона, для которого вы хотите использовать arping. Таким образом, если вы передадите скрипту 20 и 30, цикл начнется с адреса 192.168.1.20 и завершится после использования IP-адреса 192.168.1.30.

Доступ к параметрам внутри скрипта осуществляется как $1 и $2. Они используются в цикле for в стиле C. При каждом вращении цикла for $device устанавливается на следующий IP-адрес в диапазоне.

Сценарий использует тот же формат arping -c, который мы уже видели, но на этот раз мы просим отправить только один запрос ARP на каждое устройство в диапазоне.

Вывод команды arping передается через grep.

Синтаксис grep можно упростить в вашем скрипте. grep ищет одну из двух строк: «1 ответ» или «1 пакет получен». Это связано с тем, что на тестовых компьютерах были разные версии arping и они использовали разную терминологию. Если grep находит любую из этих фраз, его выходное значение будет равно нулю.

Когда вы знаете, какие фразы использует ваша версия arping, вы можете упростить синтаксис grep, удалив другую фразу.

Оператор if проверяет $? — переменную, содержащую код выхода последнего завершившегося процесса, — чтобы определить, равен ли он нулю. Если это так, он использует echo для вывода сообщения об успехе в окно терминала. Если тест не пройден, то grep не нашел ни одной из строк, что означает, что запрос ARP завершился неудачно.

Сделайте свой скрипт исполняемым с помощью команды chmod и параметра +x.

chmod +x scan-range.sh

Мы запустим его и просканируем диапазон IP-адресов от 15 до 20. К некоторым из этих адресов не подключены устройства, поэтому мы должны увидеть некоторые сбои. Не забудьте использовать sudo . Мы также попробуем выполнить ping устройство по адресу 192.168.1.15.

sudo ./scan-range.sh 15 20
ping 192.168.1.15

Мы получаем смесь успехов и неудач, как и в любой сети. Но обратите внимание: хотя устройство с адресом 192.168.1.15 отвечает на запрос ARP второго уровня, оно не отвечает на запрос ping третьего уровня.

Если вы пропинговали устройство и заметили сбой, вы, вероятно, захотите проверить, подключено ли оно к сети, и можете ли вы пинговать из устройства 192.168.1.1. 1.15.

Но с помощью arping вы можете убедиться, что он подключен, находится в сети и доступен по сети. Это поможет вам при устранении неполадок начать изучение проблем с маршрутизацией и таблицами ARP.

Более глубокое понимание

В сетевом луке много слоев. Если ping ни к чему не приводит, откройте слой и посмотрите, что может сказать arping.