Как проверить из командной строки, что сеть достижима?

12

Я хочу послать себе рычание после того, как сервер SuSE завершит процесс загрузки. Я получил это сообщение socket_sendto(): unable to write to socket [101]: Network is unreachable in.

Как я могу проверить из командной строки, доступна ли сеть, и ждать, если это не так?


Радек
источник
Linux один-лайнер , чтобы ответить да или нет, мы подключены к Интернету: ping -c 1 www.yourtrustedserver.com | grep " 0% packet loss". Это пингует сервер одним пакетом и выводит строку «0% потери пакетов». (пробел перед 0% важен) Если команда возвращает строку, вы подключены, иначе не подключены.
Эрик Лещинский

Ответы:

13

ping для внешнего хоста может произойти сбой по множеству причин, лишь немногие из которых действительно говорят что-либо полезное о состоянии вашей собственной сети.

В качестве первого шага откройте окно терминала и введите ip route ls

Вы должны увидеть вывод по линии

shadur@equinox:~$ ip route ls
192.168.15.0/24 dev eth0  proto kernel  scope link  src 192.168.15.102 
default via 192.168.15.1 dev eth0 

Это указывает на то, что ваша локальная сеть является сетевым соединением ( eth0) с адресом 192.168.15.0и что ее шлюз по умолчанию, через который он получает доступ к остальной части Интернета, можно найти по адресу 192.168.15.1.

Далее вы можете попробовать по pingэтому адресу:

shadur@equinox:~$ ping 192.168.15.1
PING 192.168.15.1 (192.168.15.1) 56(84) bytes of data.
64 bytes from 192.168.15.1: icmp_req=1 ttl=255 time=0.352 ms
64 bytes from 192.168.15.1: icmp_req=2 ttl=255 time=0.269 ms
^C
--- 192.168.15.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.269/0.310/0.352/0.045 ms

Если вы видите что-то похожее на вышесказанное, ваша локальная сеть, по крайней мере, в порядке. На этом этапе вы можете начать поиск с более продвинутыми инструментами, например, tracerouteувидеть, где может произойти сбой вашего соединения с пунктом назначения.

Однако после быстрой проверки Google того, что growlна самом деле должно быть, у меня возникает ощущение, что что-то не так. Можете ли вы расширить свой вопрос, чтобы дать нам несколько более подробную информацию о том, что вы пытаетесь сделать, как вы пытаетесь это сделать, и полный вывод ошибок? Линия, которую вы сейчас нам даете, резко обрывается ...

Shadur
источник
3
ip route get 1.2.3.4Надежнее, чем просто делать ip route ls. В первом будут применяться любые правила, действующие в дополнение к маршрутам. Это также устраняет возможность неправильного прочтения таблиц маршрутизации.
Патрик
3

Очень простой и быстрый способ - использовать pingкоманду.

Вы можете просто напечатать

 $ ping yahoo.com

(или cnn.com или любой другой хост) и посмотрите, вернетесь ли вы обратно. Это предполагает, что имена хостов могут быть разрешены (т.е. работает DNS). Если нет, то вы можете указать действительный IP-адрес / номер удаленной системы и посмотреть, можно ли его получить.

Вот страница справочника ping .

Обновление :

В качестве быстрого примера вы можете проверить возвращаемое значение (например, с помощью "echo $?") from, pingчтобы увидеть, была ли команда выполнена успешно (вы всегда можете перенаправить вывод команды > /dev/nul). Обратите внимание, я использую -c 1здесь, но вы могли бы использовать больше.

$ ping -c 1 yahoo.com
PING yahoo.com (72.30.38.140) 56(84) bytes of data.
64 bytes from ir1.fp.vip.sp2.yahoo.com (72.30.38.140): icmp_seq=1 ttl=52 time=83.5 ms

--- yahoo.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 83.593/83.593/83.593/0.000 ms

echo $?
0


$ ping -c 1 unicorns.are.here
ping: unknown host unicorns.are.here

$ echo $?
2
Левон
источник
Но как я могу понять с помощью пинга, что все в порядке?
Радек
1
@Radek Вы уже пробовали запустить его? Пинг говорит вам, если он получает ответы.
jw013
Что если сервер находится только в интрасети и не имеет доступа к внешнему миру?
Радек
@ jw013: я не пробовал ... я не знаю, чтобы использовать ping из сценария без присмотра.
Радек
3
@Radek это довольно просто. Я предполагаю, что под «связностью» вы подразумеваете, что он может общаться с другим хостом в интрасети. Так что запустите ping -c 2 -n <other host's IP>и работайте с кодом возврата: если true (0), то у него есть подключение; если false (1), он не может общаться с этой машиной.
lxop
2

mtr - это инструмент, который похож на ping, но дает вам больше информации, такой как потеря пакетов, статистика времени прохождения пакетов и т. д.

Сардатрион - против злоупотребления SE
источник