如何对企业网络可用性进行通用测试?

时间:2017-04-22 09:04:43

标签: bash intranet

当我远程工作时,我经常需要运行仅在我在Intranet上时才有意义的脚本。

但我并不总是连接到内部网,我宁愿定义一种更通用的测试连接方式,所以当我不处于“工作模式”时我会绕过;)

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

#!/bin/bash
is-intranet-on || echo "Yeah, time to do something!"

如果我这样做,我将在crontab上包含此内容,这样我就可以安排仅在连接到Intranet时运行的任务。

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

我的印象是,最终的解决方案必须涉及某种DNS检查,但我需要使它有点安全,因为我不希望因为可能为DNS条目返回虚假IP的强制网络门户感到惊讶。 / p>

1 个答案:

答案 0 :(得分:0)

例如,如果您知道有一个名为example.intra的服务器,并且该名称只能在Intranet或VPN上解析,并且可以说该名称解析为10.1.1.3并且该计算机可以ping通,代码就像是:

is_intranet_on() {
    [[ $(dig example.intra +short) == "10.1.1.3" ]] && ping -c 1 example.intra &> /dev/null
}

检查dns名称是否解析为特定IP,然后ping ip以确保至少存在某种网络连接。

当存在连接时,输出将返回代码0,当没有连接时返回代码1。您可以将此功能放在脚本中,也可以将其输入。

您可以修改此项以使用curl来检查https站点,方法是首先从服务器获取证书链,例如:

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状态或其他)