это своего рода продолжение этой вопрос.
моя цель в конце концов, чтобы использовать мой Raspberry Pi 1 модель B войти всякий раз, когда подключение к интернету идет вниз, и как долго.
я попытался сделать это с помощью следующей команды:
ping 8.8.8.8 | while read line; do echo "$(date): $line"; done | grep --line-buffered time= | tee -a googleping
приведенная выше команда работает на сервере Ubuntu 15.10, а также мой MacBook Air с OS X 10.11.2. Так что я подумал, что могу использовать то же самое на Pi. Но тогда первая ошибка показала вверх.
$ ping 8.8.8.8
ping: icmp open socket: Operation not permitted
чтобы обойти это, я тогда начал пинг как супер пользователь:
$ sudo ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=58 time=12.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=58 time=12.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=58 time=13.0 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=58 time=12.6 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 12.640/12.787/13.002/0.171 ms
теперь можно подумать это решает мою проблему, но нет, после этого есть еще одна проблема, которую я заметил. The ping
команда на Pi не выводит таймауты запроса. Поэтому, когда пакет истекает, Pi просто повторно отправляет его, где я ожидал бы такого сообщения:
Request timeout for icmp_seq 39
но то, что я получаю просто ничего, он, по-видимому, просто пересылает пакет, пока он не получит ответ, но потерянные пакеты появляются в резюме в конце:
--- 8.8.8.8 ping statistics ---
168 packets transmitted, 131 received, 22% packet loss, time 167191ms
rtt min/avg/max/mdev = 12.082/13.099/32.888/2.322 ms
последний вывод перед сводкой следующий:
64 bytes from 8.8.8.8: icmp_seq=150 ttl=58 time=12.5 ms
, который показывает, что только 151 разное icmp_sequences
были посланы, и упаденные одни как раз resend снова и снова.
добавлю, что пингую мой локальный роутер 192.168.2.1
в дополнение к google 8.8.8.8
чтобы увидеть, если это подключение к маршрутизатору, или действительно подключение к google.
в следующие результаты в том же выводе на обеих системах:
$ ping -V
ping utility, iputils-s20121221
после некоторого оглядываясь вокруг я нашел вариант в справочной странице для пинг на Пи, что несколько делает то, что я хочу:
$ man ping
[...]
-O Report outstanding ICMP ECHO reply before sending next packet.
This is useful together with the timestamp -D to log output to a
diagnostic file and search for missing answers.
[...]
, который выдает следующий вывод, если пакет слишком медленный:
no answer yet for icmp_seq=499
но если мое понимание правильно, то это отличается в том, что ping
команда на ubuntu выводит сообщение только в том случае, если ответ не получен до истечения тайм-аута, даже если другой ping-пакет был отправлен до получения ответа. The ping
команда на моем Pi выводит сообщение также, когда ответ будет возрожден после получения сообщения.
так почему же это отличается на Pi, чем на сервере Ubuntu?
Как я могу достичь своей цели?
вопрос также размещен наraspberrypi.stackexchange.com.