lau*_*iys 98 connection bash ping
如何在不ping某些网站的情况下测试互联网连接?我的意思是,如果有连接但网站已关闭怎么办?有检查与世界的联系吗?
use*_*968 118
没有ping
#!/bin/bash
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi
Run Code Online (Sandbox Code Playgroud)
-q:静音模式
- 蜘蛛:不要,只检查页面可用性
$?:shell返回代码
0:shell"一切OK"代码
没有wget
#!/bin/bash
echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi
Run Code Online (Sandbox Code Playgroud)
mat*_*sza 90
Ping您的默认网关:
#!/bin/bash
ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error
Run Code Online (Sandbox Code Playgroud)
小智 28
超级感谢用户somedrew他们张贴在这里:https://bbs.archlinux.org/viewtopic.php?id=55485于2008-09-20 2时09分48秒
在/ sys/class/net中查找应该是一种方式
这是我的脚本,用于测试除回送之外的网络连接.我使用下面的另一个脚本来定期测试我的网站是否可访问.如果无法访问,弹出窗口会提醒我一个问题.
下面的脚本阻止我每当我的笔记本电脑没有连接到网络时每五分钟接收一次弹出消息.
#!/usr/bin/bash
# Test for network conection
for interface in $(ls /sys/class/net/ | grep -v lo);
do
if [[ $(cat /sys/class/net/$interface/carrier) = 1 ]]; then OnLine=1; fi
done
if ! [ $OnLine ]; then echo "Not Online" > /dev/stderr; exit; fi
Run Code Online (Sandbox Code Playgroud)
注意那些对bash不熟悉的人:最后的'if'语句测试是否[!]在线并且如果是这种情况则退出.有关详细信息,请参阅man bash并搜索"表达式可能合并".
PS我觉得ping不是在这里使用的最好的东西因为它的目的是测试与特定主机的连接而不是测试是否存在与任何类型的网络的连接.
PPS以上适用于Ubuntu 12.04/sys可能不存在于其他一些发行版中.见下文:
现代Linux发行版包括一个/ sys目录作为虚拟文件系统(sysfs,类似于/ proc,它是一个procfs),它存储并允许修改连接到系统的设备,而许多传统的UNIX和类Unix操作系统使用/ sys作为内核源代码树的符号链接.[引证需要]
来自维基百科https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
leg*_*gel 22
这适用于MacOSX和Linux:
#!/bin/bash
ping -q -w1 -c1 google.com &>/dev/null && echo online || echo offline
Run Code Online (Sandbox Code Playgroud)
Luc*_*ein 11
在 Bash 中,通过/dev/ { udp , tcp } / host / port使用它的网络包装器:
if : >/dev/tcp/8.8.8.8/53; then
echo 'Internet available.'
else
echo 'Offline.'
fi
Run Code Online (Sandbox Code Playgroud)
(:是 Bash 无操作,因为您只想测试连接,而不是处理。)
之前我编写过脚本只需使用telnet连接到端口80,然后传输文本:
HTTP/1.0 GET /index.html
Run Code Online (Sandbox Code Playgroud)
然后是两个CR/LF序列.
如果您返回某种形式的HTTP响应,通常可以假设该站点正在运行.
最佳答案错过了这样一个事实,即你可以与你的默认网关建立一个非常稳定的连接,但这并不意味着你可以在互联网上实际获得一些东西.OP询问他/她如何测试与世界的联系.所以我建议通过将网关IP更改为局域网外的已知IP(xyzw)来改变最佳答案.
所以答案会变成:
ping -q -w 1 -c 1 x.y.z.w > /dev/null && echo ok || echo error
Run Code Online (Sandbox Code Playgroud)
同时删除命令替换的不受欢迎的反引号[1].
如果您只是想在执行某些代码之前确保连接到世界,您还可以使用:
if ping -q -w 1 -c 1 x.y.z.w > /dev/null; then
# more code
fi
Run Code Online (Sandbox Code Playgroud)
执行以下命令以检查网站是否已启动以及该Web服务器显示的状态消息:
$ curl -Is http://www.google.com | head -1 HTTP/1.1 200 OK
状态码“ 200 OK”表示请求成功,并且可以访问网站。
该顶部投票答案因此对于那些在Mac上,我已经成功地测试了这并不适用于MacOS的工作:
GATEWAY=`route -n get default | grep gateway`
if [ -z "$GATEWAY" ]
then
echo error
else
ping -q -t 1 -c 1 `echo $GATEWAY | cut -d ':' -f 2` > /dev/null && echo ok || echo error
fi
Run Code Online (Sandbox Code Playgroud)
在 MacOS High Sierra 10.12.6 上测试