使用Shell脚本检查是否连接到Internet
在本文中,我将分享多个命令和示例,以检查Linux计算机是否已连接到Internet。
在本文的结尾,我还将分享一些示例,以使用Shell脚本测试从Linux到外部网络的Internet连接。
但是在我们这样做之前,我们必须先做好某些事情,例如
我们已将IP地址分配给网络接口(静态或者dhcp)
网关可以从Linux系统访问
如果我们在虚拟机上,请确保将VM配置为能够连接外部网络
DNS已正确配置
现在,Linux中提供了多个命令,可用于"检查是否已连接到互联网",我们将在此处尝试简要讨论其中的一些命令。
1. Ping测试
我用来检查是否已连接到Internet的第一个工具是通过ping实用程序。
但是我们知道如何检查ping或者执行ping检查以检查是否已连接到Internet吗? Ping是iputils rpm的一部分,因此请确保在设置中安装了iputils。
要执行ping检查,请尝试ping互联网上的任何页面,例如" google.com"
# ping -c 1 google.com PING google.com (172.217.166.110) 56(84) bytes of data. 64 bytes from maa05s09-in-f14.1e100.net (172.217.166.110): icmp_seq=1 ttl=49 time=46.9 ms --- google.com ping statistics -- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 46.923/46.923/46.923/0.000 ms
其中我们将-c 1与ping工具一起使用,仅发送一个数据包。现在检查统计信息部分,我们看到发送和接收了1个数据包,并且有" 0%数据包丢失",这意味着我们已连接到Internet。
说明:
如果执行不带-c参数的ping检查,则ping将继续传输数据包,按Ctrl + C可以随时停止传输并观察"数据包丢失"的统计信息
如果我们打算检查是否通过Shell脚本连接到Internet,则可以在下面使用,输出中除" 0"以外的任何内容均表示未连接到Internet。
# ping -c 1 -q google.com >&/dev/null; echo $? 0
重要的提示:
如果系统正在使用代理服务器连接到Internet,则无法执行ping检查。我们可以使用本文中的其他命令来检查是否已连接到Internet
2.使用cat,echo。检查端口可用性。
有多种工具可用于检查端口可用性,我将在本文中分享这些工具。但是默认情况下,其中许多未安装,因此我们可能必须手动安装它们。或者,我们可以使用以下命令检查是否已连接到互联网,而无需安装任何其他转速
# cat < /dev/null > /dev/tcp/8.8.8.8/53; echo $? 0
如果输出为0,则表示我们已连接到Internet,但是如果输出如下所示
# cat < /dev/null > /dev/tcp/8.8.8.8/53; echo $? -bash: connect: Network is unreachable -bash: /dev/tcp/8.8.8.8/53: Network is unreachable 1
然后,linux节点未连接到Internet。
或者,我们也可以使用
# echo -n >/dev/tcp/8.8.8.8/53; echo $? 0
3.使用nslookup,主机等进行DNS查找。
我们可以在任何网页地址上执行DNS查找,以检查是否已连接到Internet。通过成功的DNS查找,我们应该会收到类似以下的响应。
# nslookup google.com Server: 192.168.0.10 Address: 192.168.0.10#53 Non-authoritative answer: Name: google.com Address: 172.217.166.110 Name: google.com Address: 2404:6800:4007:811::200e
如果DNS查找失败,我们应该得到类似以下内容的信息
# nslookup google.com1 Server: 8.8.8.8 Address: 8.8.8.8#53 ** server can't find google.com1: NXDOMAIN
说明:
现在,出现此错误服务器找不到XXXX:NXDOMAIN并不特别意味着该节点未连接到Internet,也可能意味着所提供的服务器XXX无效。因此,请尝试查找一个已知为UP的域,以免出现误报。
还有许多其他命令可以执行DNS查找,例如主机,挖掘等
# host www.google.com www.google.com has address 216.58.196.164 www.google.com has IPv6 address 2404:6800:4007:812::2004
4.卷曲
curl是使用许多受支持的协议之一(例如HTTP,FTP等)从服务器传输数据或者向服务器传输数据的工具。我们还可以使用此工具在Linux中查询网页并测试Internet连接。
# curl -Is http://www.google.com | head -n 1 HTTP/1.1 200 OK
其中如果我们收到的不是" 200 OK",则表示服务器无法连接到提供的页面。因此,除非我们提供无效的网页,否则节点已连接到Internet
说明:
确保我们是否卷曲了Linux节点上安装的rpm,以检查是否已连接到Internet
5. Telnet
Telnet是另一个检查端口连接性的工具,因此我们可以从Linux节点检查任何网页的端口可用性,以检查是否已连接到Internet。
我们可以尝试连接Google DNS的端口53来检查互联网连接。
# telnet 8.8.8.8 53 Trying 8.8.8.8... Connected to 8.8.8.8. Escape character is '^]'. Connection closed by foreign host.
如我们所见,会话已连接。如果我们得到如下输出
# telnet 8.8.8.8 53 Trying 8.8.8.8... telnet: connect to address 8.8.8.8: Network is unreachable
则表示互联网连接存在问题。
6. Nmap
nmap通常是一个端口扫描程序,用于检查系统上打开的端口列表。我们将使用它来连接到外部网络以扫描端口。如果它能够连接到外部网络进行端口扫描,那么我们可以检查是否连接到互联网。
# nmap -p 443 google.com Starting Nmap 7.70 ( https://nmap.org ) at 2019-11-19 07:40 IST Nmap scan report for google.com (172.217.166.110) Host is up (0.054s latency). Other addresses for google.com (not scanned): 2404:6800:4007:811::200e DNS record for 172.217.166.110: maa05s09-in-f14.1e100.net PORT STATE SERVICE 443/tcp open https Nmap done: 1 IP address (1 host up) scanned in 0.77 seconds
其中我正在端口443上扫描google.com。如我们所看到的突出显示的部分所示,nmap能够与google.com建立连接
7. netcat或者nc
在某些Linux变体中,我们会发现netcat
,而在其他nc
中,则可以使用这两种工具进行端口扫描。 nc或者ncat是nmap-ncat rpm的一部分。其中我们使用" nc"命令检查端口443上google.com的连接
# nc -vz google.com 443 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 172.217.166.110:443. Ncat: 0 bytes sent, 0 bytes received in 0.07 seconds.
8. wget
GNU Wget是一个免费实用程序,用于从Web上非交互式下载文件。但是我们也可以使用它来检查是否已连接到互联网。
# wget -q --spider http://google.com ; echo $? 0
其中使用--spider命令,Wget会像一个Web蜘蛛一样工作,这意味着它不会下载页面,只需检查它们是否在页面中即可。使用echo $?
命令,我们检查退出状态,而不是0
。输出表明系统未连接到互联网
9. Traceroute
traceroute命令显示从机器到指定主机的路由所采取的每个步骤。假设我们在连接到www.google.com时遇到问题,因此可以使用traceroute检查所有到达目标服务器的集线器。这还将测试互联网连接。
# traceroute www.google.com traceroute to www.google.com (216.58.196.164), 30 hops max, 60 byte packets 1 _gateway (192.168.0.1) 3.046 ms 2.873 ms 3.291 ms 2 10.249.0.1 (10.249.0.1) 4.148 ms 4.676 ms 4.678 ms 3 broadband.actcorp.in (202.83.20.173) 5.153 ms 5.445 ms 6.305 ms 4 broadband.actcorp.in (202.83.20.181) 4.952 ms 6.212 ms 6.195 ms 5 * * * 6 72.14.194.18 (72.14.194.18) 48.202 ms 49.669 ms 49.504 ms 7 108.170.253.113 (108.170.253.113) 50.061 ms 108.170.253.97 (108.170.253.97) 48.480 ms 48.512 ms 8 216.239.43.239 (216.239.43.239) 49.911 ms 56.915 ms 216.239.43.235 (216.239.43.235) 57.610 ms 9 * * * 10 * * * 11 * * * 12 * * *
其中我们可以一直追踪到google.com的路线。
"那些* * *是什么意思?"?
每一跳表示该跳的五秒钟超时。有时,这可能表示机器由于错误而根本不了解如何处理该跟踪路由数据包,但是一致的*表示216.239.43.239传递数据包的路由器存在问题。
在没有互联网连接的Linux系统上,我们将面临DNS解析本身的问题
# traceroute www.google.com www.google.com: Name or service not known Cannot handle "host" cmdline arg `www.google.com' on position 1 (argc 1)
提示:
我们必须安装traceroute
rpm才能使用此工具
如何使用Shell脚本检查是否已连接到Internet?
我们可以轻松地使用上述任何或者所有命令/方法来检查是否已使用bash/shell脚本连接到Internet。
例如,使用wget
,我们可以在下面的shell脚本中测试Internet连接:
#!/bin/bash wget -q --spider https://google.com if [ $? -eq 0 ]; then echo "Online" else echo "Offline" fi
其中此脚本将打印Internet的状态,对于其他脚本,我们可以检查退出状态并相应地执行任务。