Bash 如何对公司网络可用性进行通用测试?

Bash 如何对公司网络可用性进行通用测试?,bash,intranet,Bash,Intranet,当我远程工作时,我经常需要运行只有在内联网上才有意义的脚本 但我并不总是连接到内部网,我更愿意定义一种更通用的测试连接的方法,这样当我不处于“工作模式”时我就可以绕过它了。) 我希望将其实现为一个简单的bash命令或脚本,以便执行以下操作: #!/bin/bash is-intranet-on || echo "Yeah, time to do something!" is_intranet_on() { [[ $(dig example.intra +short) == "10.1.

当我远程工作时,我经常需要运行只有在内联网上才有意义的脚本

但我并不总是连接到内部网,我更愿意定义一种更通用的测试连接的方法,这样当我不处于“工作模式”时我就可以绕过它了。)

我希望将其实现为一个简单的bash命令或脚本,以便执行以下操作:

#!/bin/bash
is-intranet-on || echo "Yeah, time to do something!"
is_intranet_on() {
    [[ $(dig example.intra +short) == "10.1.1.3" ]] && ping -c 1 example.intra &> /dev/null
}
openssl s_client -showcerts -servername example.intra -connect example.intra:443 > cacert.pem
如果我这样做,我甚至会在
crontab
上包含这些内容,这样我就可以安排只在连接到intranet时运行的任务

我需要在MacOS和Linux上都能做到这一点。目前我使用OpenVPN,但我认为测试网络接口的方法是错误的,因为:我可以在路由器上配置VPN,或者我可以在办公室


我的印象是,最终的解决方案必须涉及某种DNS检查,但我需要确保它的安全性,因为我不希望被捕获的门户网站吓到,因为它们可能会为DNS条目返回假IP。

例如,如果您知道您有一个名为
example.intra
的服务器,并且该名称只能在内部网或VPN上解析,假设名称解析为
10.1.1.3
,并且机器可以ping,那么代码就是这样的:

#!/bin/bash
is-intranet-on || echo "Yeah, time to do something!"
is_intranet_on() {
    [[ $(dig example.intra +short) == "10.1.1.3" ]] && ping -c 1 example.intra &> /dev/null
}
openssl s_client -showcerts -servername example.intra -connect example.intra:443 > cacert.pem
检查dns名称是否解析为特定ip,然后ping该ip以确保至少存在某种网络连接

有连接时,输出将返回代码0,无连接时返回代码1。您可以将此函数放入脚本中,也可以将其作为源代码

您可以将其修改为使用curl来检查https站点,方法是首先从服务器获取证书链,如下所示:

#!/bin/bash
is-intranet-on || echo "Yeah, time to do something!"
is_intranet_on() {
    [[ $(dig example.intra +short) == "10.1.1.3" ]] && ping -c 1 example.intra &> /dev/null
}
openssl s_client -showcerts -servername example.intra -connect example.intra:443 > cacert.pem
此命令将证书保存到名为
cacert.pem

然后使用curl使用证书检查服务器是否正常:

[[ $(curl -s -I -L -m 4 --cacert cacert.pem https://example.intra | head -n 1) == "HTTP/1.1 200 OK" ]]

如果需要,将字符串
HTTP/1.1 200 OK
更改为您的服务器响应的任何内容(例如
204
状态或任何内容)

可能比这里更适合?@Inian我正在寻找一些代码,因此看起来更适合。。。我确信这不能通过配置一些东西来解决。可能我会在几个小时内自己发布解决方案,这就是我在“外包”给客户时所做的,因此不会给出快速的解决方案;)主要问题是:您如何知道您已连接到intranet。这可能是对特定服务器的ping、wget/curl和输出验证等。此后的代码是琐碎的;例如:
ping-c110.10.10.10&&echo“我在内部网上”
我认为最好的办法是检查DNS地址是否正在解析,或者更好的办法是查看HTTPS头请求是否成功。HTTPS将解决捕获门户的问题。对只有在内部网启动时才能访问的主机使用
ping
。Cron命令,每分钟运行一次,并在成功的
ping
回复后向自己发送电子邮件。如果你想更进一步,那么在你的手机上为过滤过的电子邮件创建一个合适的音频提醒。