
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
}