【发布时间】:2015-04-08 23:54:43
【问题描述】:
我正在尝试创建一个 bash 脚本,其中一小部分需要确定在给定另一台计算机的 IP 地址的情况下,同一网络上的接口是否。
所以如果我的电脑有以下接口(不包括lo):
eth0 Link encap:Ethernet HWaddr XX
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
wlan0 Link encap:Ethernet HWaddr XX
inet addr:192.168.5.100 Bcast:192.168.5.255 Mask:255.255.255.0
我知道在以下地址有一台电脑:
192.168.0.101
有没有简单的方法来提取答案eth0?
附:这个问题NOT询问如何获取给定我自己计算机地址的接口,例如this post is。
【问题讨论】:
-
循环通过接口,并使用接口的子网掩码屏蔽接口 IP 和给定 IP。如果结果相同,则它们位于同一子网上。请展示您尝试过的内容,我们不是来为您完成工作的,只是帮助您修复您写的内容。
-
对于您的情况,路由表不是更可靠吗?您可以使用这个简单的命令查看信息:
ip route get DESTADDR -
这本身就提出了一个很好的观点。如果您正在解析
ifconfig,您可能希望转而解析ip的输出,因为ifconfig将在转换到systemd完成后消失。ifconfig将仅在发行版的基础上可用。它不再存在于Arch。 -
嗯,不幸的是我意识到我骗了你。我要找的电脑还不存在。我实际上正在使用需要为其分配 IP 地址的嵌入式系统。
ip route get DESTADDR不幸地给了我错误的答案(我假设是因为它使用了无线默认网关)。我希望避免使用混乱的子网解析代码,但也许我不能。 -
如果
ip route get给您提供了错误的信息,那么您希望该路线以后如何工作?您是否在(可能是新的)设备上的网络上添加了一个 ip,以便稍后用于该 IP 的路由决策?