在做一个LicheePI Zero(荔枝派)的项目中需要在本机为DHCP状态下,拿到本机当前的 IP 地址、子网掩码、默认网关和 DNS。在处于静态 IP 设置下,可以通过 ifconfig 指令获得本机的 IP 地址,也可以通过解析 /etc/network/interfaces 文件获得本机的当前 IP 地址,而 DNS 地址是存放在 /etc/resolv.conf 中的,也可以解析出来。但是,当处于 DHCP 设置下, IP 地址、子网掩码可以通ifconfig 指令的解析获得,但默认网关和 DNS 的信息就不能通过解析配置文件获得了。虽然在 /etc/resolv.conf 中可以存储静态设置下的 nameserver,但这并不通用。
经过查询,可以通过 udhcpc (DHCP Client)程序获得本机的 IP 地址和 DNS,记录如下。但是默认网关仍不能确定。
# which udhcpc
/sbin/udhcpc
#
# /etc/init.d/S40network restart
Stopping network: OK
Starting network: udhcpc: started, v1.27.1
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 192.168.0.100
udhcpc: lease of 192.168.0.100 obtained, lease time 7200
deleting routers
adding dns 58.20.127.170
adding dns 58.20.127.238
OK
#
在程序中,可以通过截取 /etc/init.d/S40network restart 指令的应答,把当前获取的 IP 地址、两个DNS解析出来。