我想在bash脚本中测试两个IP是否在同一网络上。
我有一个IP $remoteIP
,我想测试它是否与当前计算机位于同一网络(局域网)(例如$remoteIP
=192.168.2.200
和hostname -I
=,192.168.2.13
且其子网掩码为例如,255.255.255.0
这些主机位于同一网络上。 192.168.1.32将不在同一网络上。)
我要这样做是因为我想检查是否在本地网络或具有直接IP的某些服务器上的ssh's ssh's。基于此,我要为ps1提示着色(绿色=否ssh,黄色=本地网络,红色=在线服务器)
首先,我只需要支持大型子网掩码(255.0.0.0、255.255.0.0、255.255.255.0)。
因此,我需要执行以下步骤:
在第1、3和5点,我不知道该怎么做。
另一种策略是使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句