Назад | Перейти на главную страницу

Арпинг не работает в скрипте

В моей сети в качестве шлюза по умолчанию используется один Linux-хост, расположенный по адресу 192.168.150.1. На другом хосте с адресом 192.168.150.4 у меня есть этот скрипт для измерения времени между отправкой запроса arp и его получением:

#!/usr/bin/env bash

for i in $(seq 30 $END); do
        sudo ifconfig enp3s0 up
        sleep 5s;
        arping -I enp3s0 -c 1 192.168.150.1
        echo $(date +%s.%5N) | tee -a ./ifuptimes.txt;
        sleep 55s;
        sudo ifconfig enp3s0 down;
        sleep 1m;
done;

Как ни странно, при отправке arping в скрипте цель по адресу 192.168.150.1 отвечает на него только изредка, тогда как при ручном запуске в терминале каждый раз получает ответ. Почему это происходит и как это исправить?

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

У меня есть этот скрипт для измерения времени между отправкой запроса arp и его получением

Может быть, было бы лучше запустить wirehark (или tcpdump), отбросить arp-table и запустить arping. В wirehark вы можете увидеть запрос arp и ответ arp, включая время.

Я надеюсь, это поможет вам.

Почему вы отключаете интерфейс Ethernet и запускаете его в цикле?

Я предполагаю, что проблема основана на медленном или чем-то подобном (DHCP, ...).

Почему не «cron», «at» или «смотреть»?