コマンドラインからネットワークに到達可能かどうかを確認するにはどうすればよいですか?

コマンドラインからネットワークに到達可能かどうかを確認するにはどうすればよいですか?

SuSE サーバーの起動プロセスが完了したら、自分自身に growl を送信したいのですが、このメッセージが表示されました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 

これは、ローカル ネットワークが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
}

関連情報