一尘不染

仅使用proc获取本地网络接口地址?

linux

如何仅使用
proc
获得所有网络接口的(IPv4)地址?
经过广泛的调查,我发现了以下内容:

  1. ifconfig使用SIOCGIFADDR,需要打开套接字并充分了解所有接口名称。在Linux上的任何手册页中也没有记录。
  2. proc包含/proc/net/dev,但这是接口统计信息的列表。
  3. proc包含/proc/net/if_inet6,这正是我需要的,但需要IPv6。
  4. 通常,在中很容易找到接口proc,但是很少使用实际地址,除非在某些连接中有明确的一部分。
  5. 有一个名为的系统调用getifaddrs,这是Windows所期望的非常“神奇”的功能。它还在BSD上实现。但是,它不是非常面向文本的,因此很难在非C语言中使用。

阅读 243

收藏
2020-06-03

共1个答案

一尘不染

没有/ proc / net / if_inet6的IPv4类似物

ifconfig可以:

fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)
ioctl(fd, SIOCGIFCONF, ...)

您将获得如下内容:

ioctl(4, SIOCGIFCONF, {120, {{"lo", {AF_INET, inet_addr("127.0.0.1")}}, {"eth0", {AF_INET, inet_addr("10.6.23.69")}}, {"tun0", {AF_INET, inet_addr("10.253.10.151")}}}})
2020-06-03