Як з командного рядка перевірити, чи доступна мережа?


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 

Це вказує на те, що ваша локальна мережа - це 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насправді повинно бути, я відчуваю, що щось інше відбувається не так. Чи можете ви розширити своє запитання, щоб дати нам ще декілька деталей про те, що ви намагаєтеся зробити, як ви це намагаєтесь та повний висновок про помилку? Лінія, яку ви нам зараз даєте, різко припиняється ...


3
ip route get 1.2.3.4надійніше, ніж просто робити ip route ls. Перші набудуть чинності будь-які правила, які існують на додаток до маршрутів. Він також виключає можливість неправильного читання таблиці (таблиць) маршрутизації.
Патрік

3

Дуже простий і швидкий спосіб - використовувати 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

Але як я можу зрозуміти, використовуючи ping, що все в порядку?
Радек

1
@Radek Ви вже спробували запустити його? ping повідомляє, чи отримує відповіді.
jw013

Що робити, якщо сервер працює лише в інтрамережі і не має доступу до зовнішнього світу?
Радек

@ jw013: Я не намагався ... Я не знаю використовувати пінг із бездоганного сценарію.
Радек

3
@Radek це досить просто. Я маю на увазі, що під "підключенням" ви маєте на увазі, що він може спілкуватися з іншим хостом в інтранеті. Отже, запустіть ping -c 2 -n <other host's IP>і оперуйте кодом повернення: якщо true (0), то він має підключення; якщо false (1), він не може спілкуватися з цією машиною.
lxop

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.