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

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

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

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


решение1

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 

Это означает, что ваша локальная сеть представляет собой Ethernet-подключение ( 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на самом деле должно быть, у меня возникло ощущение, что что-то еще идет не так. Можете ли вы расширить свой вопрос, чтобы дать нам немного больше подробностей о том, что вы пытаетесь сделать, как вы это делаете, и полный вывод ошибки? Строка, которую вы нам сейчас даете, резко обрывается...

решение2

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

Вы можете просто ввести

 $ ping yahoo.com

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

Вотстраница руководства ping.

Обновлять:

В качестве быстрого примера вы можете проверитьвозвращаемое значение(например, с "echo $?") из , 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

решение3

Я бы воспользовался netcatжелаемой услугой.

Например, тестирование порта IP, успешное

> nc -zv 192.168.1.1 80
Connection to 172.26.0.1 80 port [tcp/http] succeeded!

...и неудача

> nc -zv 192.168.1.1 22
netcat: connect to 172.26.0.1 port 22 (tcp) failed: Connection refused

с тайм-аутом 10 с

> nc -zv -w 10 10.0.0.1 80
netcat: connect to 10.0.0.1 port 80 (tcp) timed out: Operation now in progress

решение4

Я использую следующую функцию... По умолчанию это quad9, но вы можете указать другой домен. Он будет заблокирован после 15 минут попыток

wait_for_dns() {

   local fqhn="quad9.net"
   fqhn=${1:-$fqhn}

   printf "waiting"
   for i in {1..15}; do
      local a_record=$(dig +short +time=2 $fqhn)

      if [[ $a_record != '' ]]; then
         printf "\n"
         return 0
      fi

      printf '.'
      sleep 60
   done

   printf "\n"
   return 1
}

Связанный контент