
我想在 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
這表示您的本機網路是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
查看與目標的連線可能在哪裡失敗。
然而,在谷歌快速檢查了growl
實際情況後,我感覺到其他問題。您能否擴展您的問題,為我們提供更多關於您想要做什麼、如何嘗試以及完整錯誤輸出的詳細資訊?您目前給我們的線路突然被切斷...
答案2
一個非常簡單快速的方法是使用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
答案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
}