检查住宅的连接是否可以访问互联网

检查住宅的连接是否可以访问互联网

我希望能够测试我是否可以访问互联网。我的电脑已连接到住宅互联网连接。我想ping这样使用:

ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error

但这是行不通的!

正如我所说,连接是由住宅提供的(实际上只是转发大学连接)。要访问互联网,您必须打开一个网络浏览器,要求您提供用户名和密码,然后才授予互联网访问权限。(我真的不知道网络配置等,无论如何我无权了解它的设置方式,所以我可以'在此方面不提供更多信息)

即使我实际上无法访问互联网,上面的代码也会打印“ok”。即使测试www.google.com失败。我相信这是因为它被重定向到登录页面并且它“认为”正确地取回数据包。

如何可靠地检查我是否可以访问互联网?

一些背景

我想ssh周末回家时通过连接到我房间里的电脑。连接有时会失败,所以我想创建一个脚本,每隔一段时间检查一次连接,并最终启动一个网络浏览器并发送用于xdotool登录的击键。如果您知道重新打开连接以允许ssh远程访问的更好方法,请也写下来。

更新:

一些示例输出nslookup

$ nslookup unix.stackexchange.com
Server:         127.0.1.1
Address:        127.0.1.1#53

Non-authoritative answer:
Name:   unix.stackexchange.com
Address: 69.59.197.21

无论有没有互联网接入,结果都是完全相同的。 (我还尝试注销并重新登录,并多次连接和断开连接)。

另外,我想补充一点,这不是ssh连接关闭。在一段时间内,我能够创建连接、执行操作并注销。经过几个小时的尝试后ssh the-IP出现超时错误(我实际上注册了一个无IP帐户,因为IP是动态的,所以我正在这样做ssh mydomain.no-ip.org)。

答案1

你在指挥中犯了一个致命的错误。

ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error

该命令ip r | grep default | cut -d ' ' -f 3返回您的默认网关。因此,ping它不会检查 Google,而是检查您所连接的路由器。路由器将发回一个数据包,这使得整个命令成立。这就是为什么它总是返回“ok”。它根本不检查互联网连接。但是,看看好的一面。它检查您是否连接到 LAN。

无论如何,您可能想要使用ping -q -w 1 -c 1 google.com > /dev/null && echo ok || echo error而不是使用ip r | grep default | cut -d ' ' -f 3

答案2

听起来你需要一个像这样的程序自动无线网络

答案3

如果呢?

if [[ $(ping -c1 -w1 google.com) ]]
then 
    echo "All good in the hood"
else
    echo "Where are my interwebs?"
fi

或作为一行

if [[ $(ping -c1 -w1 google.com) ]]; then  echo "All good in the hood"; else; echo "Where are my interwebs?"; fi

答案4

执行我要求的操作的唯一方法似乎是下载随机网页,然后查看内容是否与登录页面匹配。

例如做:

$ wget www.google.com

如果我可以访问互联网,将下载谷歌页面的 html 内容,而它只包含以下内容:

<!--
**
**  ZEROSHELL Captive Portal Login Page  
**
**          (Native Interface)
**
-->

<html>
<head>
<title>Web Login</title>
    ...
</html>

如果它被重定向到登录页面。尽管我希望找到一个更优雅的解决方案,但它似乎可以很好地检测我想要的内容。

相关内容