Использование команды arping в Linux для проверки связи с локальными системами.
Команда arping может проверять доступность локальных систем, а также и с помощью скриптов может проверять доступность определенного диапазона IP-адресов.
Команда arping – одна из малоизвестных команд, которая работает так же, как команда ping.
Название команды расшифровывается как «arp ping», и это инструмент, который позволяет выполнять ограниченные запросы ping, поскольку он собирает информацию только о локальных системах. Причина состоит в том, что он использует сетевой протокол уровня 2 и, следовательно, не поддерживает маршрутизацию. Команда arping используется для обнаружения и проверки хостов в вашей локальной сети.
Если в вашей системе не установлен arping, то ее можно установить с помощью одной из следующих команд:
$ sudo apt install arping -y
$ sudo yum install arping –y
Вы можете использовать эту команду так же, как ping, и, как и в случае с ping, вы можете установить количество пакетов, которые будут отправлены с помощью параметра –c (например, arping –c 2 hostone) или разрешить ей продолжать отправлять запросы, пока вы не наберете ^c (CTRL+C). В этом первом примере мы отправляем в систему два запроса:
$ arping -c 2 172.16.20.17
ARPING 172.16.20.17 from 172.16.20.10 eth0
Unicast reply from 172.16.20.17 [20:EA:16:01:55:EB] 64.895ms
Unicast reply from 172.16.20.17 [20:EA:16:01:55:EB] 5.423ms
Sent 2 probes (1 broadcast(s))
Received 2 response(s)
Обратите внимание, что выходные данные показывают время, необходимое для получения ответов, и MAC-адрес исследуемой системы.
Если вы используете опцию -f, arping завершится, как только он убедиться, что система отвечает. Это может показаться эффективным, но никогда не завершиться, если система – возможно, несуществующая или отключенная – не ответит. Как правило, лучше использовать небольшое значение. В следующем примере команда 83 раза пыталась связаться с удаленной системой, прежде чем я прервал ее с помощью ^ c, а затем она предоставила отчет.
$ arping -f 172.16.20.30
ARPING 172.16.20.30 from 172.16.20.10 eth0
^C Sent 83 probes (83 broadcast(s))
Received 0 response(s)
Для системы, которая работает и готова к ответу, ответ будет быстрым.
$ arping -f 172.16.20.17
ARPING 172.16.20.17 from 172.16.20.10 eth0
Unicast reply from 172.16.20.17 [20:EA:16:01:55:EB] 82.963ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
Broadcast – send out for all to receive
Команда ping может легко достичь удаленных систем, в то же время команда arping пытается, но не получает никаких ответов. Сравните выводы ниже.
$ arping -c 2 teacherbox.ru
ARPING 172.17.137.25 from 172.16.20.10 eth0
Sent 2 probes (2 broadcast(s))
Received 0 response(s)
$ ping -c 2 teacherbox.ru
PING teacherbox.ru (172.17.137.25) 56(84) bytes of data.
64 bytes from teacherbox.ru (172.17.137.25): icmp_seq=1 ttl=48 time=321 ms
64 bytes from teacherbox.ru (172.17.137.25): icmp_seq=2 ttl=48 time=331 ms
—- teacherbox.ru ping statistics —-
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 321.451/326.068/330.685/4.617 ms
Очевидно, что arping не может собирать информацию на удаленном сервере.
Если вы хотите использовать arping для ряда систем, вы можете использовать команду, подобную следующей, которая будет довольно быстрой, потому что она только один раз пытается достичь каждого хоста в указанном диапазоне.
$ for num in {1..100}; do arping -c 1 172.16.20.$num; done
ARPING 172.16.20.1 from 172.16.20.10 eth0
Unicast reply from 172.16.20.1 [F8:8E:85:35:7F:B9] 5.530ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
ARPING 172.16.20.2 from 172.16.20.10 eth0
Sent 1 probes (1 broadcast(s))
Received 0 response(s)
ARPING 172.16.20.3 from 172.162.0.10 eth0
Unicast reply from 172.16.20.3 [02:0F:B5:22:E5:90] 76.856ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
ARPING 172.16.20.4 from 172.16.20.10 eth0
Unicast reply from 172.16.20.4 [02:0F:B5:5B:D9:66] 83.000ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
Обратите внимание, что некоторые ответы показывают, что один ответ был получен, а другие – нет.
Вот простой сценарий, который предоставит список того, какие системы в диапазоне сети отвечают, а какие нет:
#!/bin/bash
for num in {1..255}; do
echo -n “172.16.20.$num “
arping -c 1 172.16.20.$num | grep “1 response”
if [ $? != 0 ]; then
echo “”
fi
done
Измените диапазон IP-адресов в скрипте, чтобы он соответствовал вашей локальной сети. Результат должен выглядеть примерно так:
$ ./detectIPs
172.16.20.1 Received 1 response(s)
172.16.20.2 Received 1 response(s)
172.16.20.3 Received 1 response(s)
172.16.20.4 Received 1 response(s)
172.16.20.5
172.16.20.6 Received 1 response(s)
172.16.20.7 Received 1 response(s)
172.16.20.8
172.16.20.9 Received 1 response(s)
172.16.20.10
172.16.20.11 Received 1 response(s)
Если вы хотите отобразить только отвечающие системы, упростите скрипт следующим образом:
#!/bin/bash
for num in {1..30}; do
arping -c 1 172.16.20.$num | grep “1 response” > /dev/null
if [ $? == 0 ]; then
echo “172.16.20.$num “
fi
done
Ниже показано, как будет выглядеть результат выполнения второго скрипта. В нем перечислены только отвечающие системы.
$ ./detectIPs
172.16.20.1
172.16.20.2
172.16.20.3
172.16.20.4
172.16.20.6
172.16.20.7
Команда arping позволяет быстро и легко проверить ряд систем в сети и может быть полезна, когда вы хотите создать карту своей сети.