Похожие вопросы

Как приостановить исходный сценарий в bash?
Я добавил новый путь в список путей, но не смог выполнить программу из любого места linux
Bash-хранение значения ключа в переменных, объявленных в ассоциативном массиве
Запуск jpegoptim в cronjob раз в неделю, на CentOS из cPanel, только для файлов, добавленных в течение прошлой недели?
Подсистема Windows для Linux без магазина Windows [дубликат]
Знак процента ( % ) перед командой оболочки
Отправить env в целевой файл makefile
Linux: как убить корневой процесс по имени параметра?
пример cURL для доступа к аутентифицированному API Kraken
CentOS 7: не удается подключиться через WinSCP при выполнении bash
Как использовать команду lastb с терминала Mac?
чтение команды с таймаутом для нетерминального ввода в bash
Как изменить цветовую схему в bash в Ubuntu для Windows?
Как восстановить удаленную историю в терминале с помощью #history-c
Shell-скрипт, чтобы передать аргументы в другой скрипт

Ping не работает должным образом

это своего рода продолжение этой вопрос.

моя цель в конце концов, чтобы использовать мой 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.

5
задан Community
источник

1 ответов

прежде всего, следующая команда

 sudo chmod u+s `which ping`

сделает ping работа также для пользователя не-su.

во-вторых, вы можете вылечить вашу проблему со следующим вариантом,

ping -c 1 -W 1 192.168.0.1

первый параметр отправляет один пакет, второй устанавливает период ожидания, по истечении которого пакет объявляется отсутствующим, и выводится сообщение об ошибке. Например,

$ ping -c1 www.nytimes.com
  PING www.gtm.nytimes.com (170.149.161.130) 56(84) bytes of data.
  ^C
  --- www.gtm.nytimes.com ping statistics ---
  1 packets transmitted, 0 received, 100% packet loss, time 0ms

 $ ping -c1 -W 1 www.nytimes.com
   PING www.gtm.nytimes.com (170.149.161.130) 56(84) bytes of data.

   --- www.gtm.nytimes.com ping statistics ---
   1 packets transmitted, 0 received, 100% packet loss, time 0ms

Как видите, в первом случае (без -W 1 option)ping ждал ответа и только мой Ctrl+C остановил ожидание без вывода данных. Но во втором случае, с -W 1 (=подождите 1 секунду, затем сдавайтесь) сообщение об ошибке было быстро произведено.

а в-третьих, я предлагаю вам использовать mtr (=Мой TraceRoute) из РЕПО. Вы можете использовать что-то вроде

mtr -c 1 -r 8.8.8.8

первый вариант посылает 1 пакет,-r опция печатает a сообщите в конце цикла, и команда попытается связаться со всеми узлами между вашим ПК и DNS Google (8.8.8). Преимущество этого состоит в том, что вы получите трассировку того, где именно ваше соединение ломается, чтобы вы могли знать, происходит ли это внутри вашей локальной сети или за ее пределами, и в этом случае вам, возможно, придется пожаловаться своему интернет-провайдеру.

3
отвечен MariusMatutiae 2015-12-29 19:03:23
источник

Другие вопросы bash linux networking ping raspberry-pi