【问题标题】:Given an IP address, find interface on same subnet给定一个IP地址,在同一子网上找到接口
【发布时间】: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 的路由决策?

标签: linux bash ethernet


【解决方案1】:

不,名称eth0 不会以任何方式广播,因此无法远程获取。它只是一个仅供内部使用的名称。 您必须登录远程机器 (ssh) 并使用例如ifconfig 获取信息。

如果您需要远程机器的 MAC 地址(在您的网络上),请使用 arp:

arp 192.168.0.101

【讨论】:

  • 当然有办法,你计算每个接口的IP Addr & netmask 并检查它是否等于192.168.0.101 & netmask
  • @nos 不,这无助于确定它是否是 eth0、eth1、wlan0、... 如原始问题所述。
  • 确实没有办法发现主机如何调用配置有特定 IP 的接口,另一个类似的选项是使用一些库存服务,所有主机都注册它们的接口和 IP,您可以查询此服务用于此信息。但是如果你无权访问远程主机,那就没有办法了。
  • 我相信你误解了我的问题。我想问“给定一个随机 IP 地址,我的计算机是否有一个 IP 地址分配给同一子网的 NIC?”
  • @lxer 当然,如果您在同一子网上有多个网卡,则需要注意。但是比较网络地址是检查一个 IP 地址是否属于特定子网的规范方法,并且是(不包括您添加的任何奇怪的 iptables 或路由规则)IP 堆栈将做什么来确定在发送时使用哪个接口到目的IP。 e.在这种情况下eth0: 192.168.0.100 & 255.255.255.0 == 192.168.0.0,wlan0: 192.168.5.100&255.255.255.0 == 192.168.5.0。根据每个网络掩码计算 192.168.0.101 的子网,您会发现网络地址与 eth0 匹配
猜你喜欢
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2015-10-04
  • 2011-11-09
相关资源
最近更新 更多