从文件系统读取当前 IP 地址?

Cru*_*hex 7 networking

我正在编写一个程序,它需要知道系统的当前 IPv4 地址(通过 DHCP 接收),如果它已连接并且有一个。为了论证起见,语言无关紧要,我必须从磁盘上的文件中读取。有没有这样一个文件总是存储当前的IPv4地址?

Ram*_*esh 6

有一个文件/proc/net/tcp以 little-endian 四字节十六进制数字格式存储 IP 地址。但是,这假设会话已打开以查找 IP 地址。除此之外,您也可以使用ip addr show命令。

您需要反转字符串以获取 IP 地址。请参阅回答关于如何从文件输出/proc/net/tcp

  • `/proc/net/tcp` 只会显示 TCP 连接和侦听 TCP 套接字。如果您有一个没有直接绑定套接字且当前未被 TCP 连接使用的 IP 地址,则它将不会显示在“/proc/net/tcp”中。 (2认同)

lin*_*fan 1

所有 DHCP 租约信息都保存在/var/lib/dhcp/dhclient.eth0.leases

# tail -14 /var/lib/dhcp/dhclient.eth0.leases 
lease {
  interface "eth0";
  fixed-address 192.168.0.13;
  option subnet-mask 255.255.255.0;
  option routers 192.168.0.1;
  option dhcp-lease-time 604800;
  option dhcp-message-type 5;
  option domain-name-servers 75.75.75.75,75.75.76.76;
  option dhcp-server-identifier 192.168.0.1;
  option domain-name "hsd1.ca.comcast.net.";
  renew 6 2015/01/10 10:38:07;
  rebind 2 2015/01/13 16:19:22;
  expire 3 2015/01/14 13:19:22;
}
Run Code Online (Sandbox Code Playgroud)

话虽如此,解析以下输出也没什么坏处ifconfig

  • 我的 `/var/lib/dh​​cp/dhclient.leases` 是空的,没有其他文件(Linux Mint 连接在 eth0 上) (4认同)
  • `ifconfig` 并不总是存在,例如在 CentOS 7.0 上不存在 (2认同)