В моей сети у меня есть один хост 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 и запускаете его в цикле?
Я предполагаю, что проблема в на основе ifup - медленный или что-то в этом роде (DHCP, ...).
Почему не «cron», «at» или «смотреть»?