当我远程工作时,我经常需要运行仅在我在Intranet上时才有意义的脚本。
但我并不总是连接到内部网,我宁愿定义一种更通用的测试连接方式,所以当我不处于“工作模式”时我会绕过;)
我将其实现为一个简单的bash命令或脚本,以便我可以执行以下操作:
#!/bin/bash
is-intranet-on || echo "Yeah, time to do something!"
如果我这样做,我将在crontab
上包含此内容,这样我就可以安排仅在连接到Intranet时运行的任务。
我需要在MacOS和Linux上完成这项工作。目前我使用OpenVPN,但我认为测试网络接口是错误的方法,因为:我可以在我的路由器上配置VPN,或者我可以在办公室。
我的印象是,最终的解决方案必须涉及某种DNS检查,但我需要使它有点安全,因为我不希望因为可能为DNS条目返回虚假IP的强制网络门户感到惊讶。 / p>
答案 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
状态或其他)