如果两个IP在同一网络上,我想在bash脚本中进行测试。
我有一个IP $remoteIP
,我想测试它是否与我当前的机器在同一网络(局域网)上(例如$remoteIP
= 192.168.2.200
和{具有子网掩码的{1}} = hostname -I
例如192.168.2.13
这些主机位于同一网络上。具有192.168.1.32的主机不在同一网络上。)
我想这样做是因为我想检查我是在本地网络上的计算机上还是在直接IP的某台服务器上进行ssh。基于此我想为ps1提示颜色(绿色=没有ssh,黄色=本地网络,红色=在线服务器)
首先,我只需要支持大的子网掩码(255.0.0.0,255.255.0.0,255.255.255.0)。
所以我需要以下步骤:
在第1,3和5点,我不知道如何做到这一点。
答案 0 :(得分:6)
另一种策略是使用Linux的ip
命令来确定您的默认网关是什么,以及是否将通过所述网关路由给定的IP地址。
默认网关可以在ip route
:
$ ip route
default via 192.168.1.1 dev eth0 metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2
获取默认网关的IP地址:
$ ip route | awk '/default/ {print $3}'
192.168.1.1
要确定如何路由指定的IP地址,请使用ip route get
:
$ ip route get 4.2.2.2
4.2.2.2 via 192.168.1.1 dev eth0 src 192.168.1.2
$ ip route get 192.168.1.10
192.168.1.10 dev eth0 src 192.168.1.2
(请注意,第一个命令显示“via 192.168.1.1
”表示它将通过默认网关路由)
将所有内容整合到一个函数中:
is_remote_ip() {
ip route get $1 | grep -q "via $(ip route | awk '/default/ {print $3}') "
}
演示:
$ is_remote_ip 4.2.2.2 && echo yes || echo no
yes
$ is_remote_ip 192.168.1.10 && echo yes || echo no
no