Bash Linux:检查是否在同一网络中
我想在bash脚本中测试两个ip是否在同一网络上 我有一个IPBash Linux:检查是否在同一网络中,bash,ip,substring,Bash,Ip,Substring,我想在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。基于此,我想给ps1提示符涂上颜色(绿色=无ssh,黄色
$remoteIP
,我想测试它是否与我当前的机器在同一个网络(局域网)上(例如$remoteIP
=192.168.2.200
和hostname-I
=192.168.2.13
子网掩码为例如255.255.255.0
的主机位于同一网络上。具有192.168.1.32的主机将不在同一网络上。)
我想这样做是因为我想检查我是在本地网络上的计算机上还是在具有直接IP的服务器上进行了ssh。基于此,我想给ps1提示符涂上颜色(绿色=无ssh,黄色=本地网络,红色=在线服务器)
首先,我只需要支持大的子网掩码(255.0.0.0、255.255.0.0、255.255.255.0)
因此,我需要以下步骤:
在第1点、第3点和第5点,我不知道如何做到这一点。另一种策略是使用Linux的
ip
命令来确定默认网关是什么,以及给定的ip地址是否将通过所述网关路由
默认网关可以在ip路由的输出中看到
:
$ 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
另一种策略是使用Linux的
ip
命令来确定默认网关是什么,以及给定的ip地址是否将通过所述网关路由
默认网关可以在ip路由的输出中看到
:
$ 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
我知道这不是你的答案,bug
ping-t 1$remoteIP
如果不在同一个网络中应该会失败,但如果它不失败,如果它在同一个网络中就不是舒尔;-)我只是舒尔,我可以通过其他一些新作品访问服务器。我知道这不是你的答案,bugping-t 1$remoteIP
在不在同一网络中时应失败,但如果不失败,则在同一网络中就不是舒尔;-)我只是舒尔,我可以通过其他一些NewWorks连接到服务器。这是一个很好的起点,但我的服务器没有打印“via”,这是一个很好的起点,但我的服务器没有打印“via”