微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Linux中只使用fs和bash来从IPv4地址获取接口名称?

如何使用像/ proc,/ dev,/ sys和bash这样的文件系统从IPv4 IP地址获取接口名称? 这可能不使用命令(如ip,ifconfig等)? 我也无法使用任何软件包或安装任何工具。

编辑:原因是我试图从一个Docker容器中获取主机的接口名称和IP地址。 容器以主机的根目录进行安装,可以访问主机的文件系统。 但是,由于容器位于单独的命名空间中,因此ip命令(以及其他类似命令,如ifconfig)将仅返回容器的networking。 因此,我相信获取主机的接口名称和IP地址的唯一方法是通过主机的根(/ hostroot / proc,/ hostroot / sys等)。 请注意,当启动容器(告诉容器使用主机的networking名称空间)时,我不能拥有–net = host标志。

我尝试从/ proc / net / fib_trie文件中find所有的networking接口IP地址(IPv4)。 我阅读在https://regexit.com/3-ways-to-get-your-ip-on-a-linux-system/基本上说,我可以做cat / proc / net / fib_trie | grep -B 1“32本地主机”查找IP地址。 我也在https://stackoverflow.com/a/42082822中看到,我们可以通过匹配string“32 host”的模式来过滤fib_trie以获取本地networking接口地址。 从上述方法(使用/ proc / net / fib_trie)获取IP地址后,我尝试将这些IP地址与/ proc / net / route中的“目标”IP地址进行匹配以获取networking接口名称。 但是,我的/ proc / net / route包含一些接口的多个条目(如enp0s3)。 例如,有两个IP地址不同的enp0s3条目(“目标列”),而且路由文件中的networking接口的ip接近ip命令指示的地址,但不完全匹配。

从fib_trie获取IP地址后,有没有更好的方法获取networking接口名称

join多播群组时只需要一个PORT还是IP?

在Windows Server,Java中监视UDP数据包丢失

智能的方法快速比较IP地址?

从/ proc / net / sockstat获取networking连接

如何杀死Linux中的TCP连接

输出我需要的将是所有主机的networking接口名称和相应的IPv4 IP地址。

在weblogic 11g中设置优先的监听地址

捕获VPN使用情况统计信息

如何强制Windows重新连接到networking驱动器

确定TCP有效负载活动/统计信息

如何使用无需路由器/ DNS的以太网快速连接2台PC

我想你在那里有足够的信息。 /proc/net/route文件并不真正列出地址。 它应该告诉你如何路由数据包。 但是您可以从中收集有关接口的信息。 在我的系统上(ubuntu 14如此不同的接口名称格式,但应该是相似的),它显示了这一点:

Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT eth0 00000000 0100A8C0 0003 0 0 0 00000000 0 0 0 eth0 0000A8C0 00000000 0001 0 0 1 00FFFFFF 0 0 0 eth1 0028A8C0 00000000 0001 0 0 1 00FFFFFF 0 0 0

目的地和掩码字段是十六进制的 – 在小端机器上是字节翻转的 – 并给你网络的范围。 解释是:

任何发往192.168.0.0/24网络(0000A8C0 + 00FFFFFF)的东西都会转到eth0,不需要网关(换句话说,它与本机在同一个子网上)。

任何发往192.168.40.0/24(0028A8C0 + 00FFFFFF)的东西都转到eth1,不需要网关。

发往任何其他地址(00000000 + 00000000)的数据包将转到认网关192.168.0.1。

(不确定;可能是这个额外的标志位或者是这个行中的“metric”值将它标记认网关,但是在任何情况下,如果它没有非零掩码或者在0.0.0.0地址范围,这对现实世界中的路由不会有用。)

从这我可以推断,我的系统在192.168.0.0/24和192.168.40.0/24网络中有IP地址。 /proc/net/fib_trie上的grep命令的输出显示在我的系统上:

|-- 127.0.0.1 /32 host LOCAL |-- 192.168.0.104 /32 host LOCAL |-- 192.168.40.129 /32 host LOCAL

所以这就说明我的本地IP地址是192.168.0.104(eth0)和192.168.40.129(eth1)。 (我们可以忽略127.0.0.1;它总是回送接口。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐