如何从命令行检查网络是否可达?

Rad*_*dek 14 command-line networking opensuse

在 SuSE 服务器完成启动过程后,我想向自己发出咆哮。我收到了这条消息socket_sendto(): unable to write to socket [101]: Network is unreachable in

如何从命令行检查网络是否可访问并等待,以防万一?


Sha*_*dur 14

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 
Run Code Online (Sandbox Code Playgroud)

这表明您的本地网络是一个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
Run Code Online (Sandbox Code Playgroud)

如果您看到与上述类似的内容,则您自己的本地网络至少还不错。在这一点上,您可以开始使用更高级的工具traceroute来查看与目标的连接可能失败的地方。

然而,在快速谷歌检查growl实际应该是什么之后,我觉得还有其他问题。您能否扩展您的问题,为我们提供更多有关您尝试做什么、如何尝试以及完整错误输出的详细信息?你现在给我们的线路突然被切断了......

  • `ip route get 1.2.3.4` 比仅仅执行 `ip route ls` 更可靠。前者将使除路线之外的任何规则生效。它还消除了误读路由表的可能性。 (3认同)

Lev*_*von 5

一个非常简单快捷的方法是使用ping命令。

你可以简单地输入

 $ ping yahoo.com
Run Code Online (Sandbox Code Playgroud)

(或 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
Run Code Online (Sandbox Code Playgroud)

  • @Radek 很简单。我假设“连接性”是指它可以与 Intranet 上的其他主机通信。所以运行`ping -c 2 -n <other host's IP>`并对返回码进行操作:如果为真(0),则它具有连通性;如果为 false (1),则它无法与该机器通话。 (3认同)

Mui*_*inn 5

我会使用netcat所需的服务。

例如测试IP端口,成功

> nc -zv 192.168.1.1 80
Connection to 172.26.0.1 80 port [tcp/http] succeeded!
Run Code Online (Sandbox Code Playgroud)

...并且失败了

> nc -zv 192.168.1.1 22
netcat: connect to 172.26.0.1 port 22 (tcp) failed: Connection refused
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)