0

我正在摆弄套接字 ioctl 以获取当前接口设置,并且我已经可以获取 IP、接口名称、网络掩码并检查接口是启动还是关闭(我只是对 SIOCGIFCONF、SIOCGIFNETMASK 和 SIOCGIFFLAGS 执行 IOCTl)。

我正在寻找一种方法来判断我当前的 IP 地址是通过 dhcp 获得还是静态的。

我可以检查 /etc/network/interfaces 以获取我想要的所有内容,但我正在寻找一种以编程方式执行此操作的方法(这个词是否存在?)。

有没有人对此有任何见解?

还有一件事,我正在使用 Linux(目前)。

干杯

4

3 回答 3

3

Linux 上有各种各样的 DHCP 客户端—— pumpdhcpcddhclientudhcpc,很可能还有我不知道的其他客户端——这在一般意义上是不可能的。

但是,如果您的目标是特定的发行版——比如,“Ubuntu 的默认安装”——那么您可以研究诸如 Stefan 之类的解决方案。请注意,此处列出的所有四个 DHCP 客户端都可以安装在 Ubuntu 上,并且可以替换默认的 DHCP 客户端 dhclient。

于 2009-10-06T17:20:13.867 回答
2

如果您运行的是 Ubuntu,则租约存储在 /var/lib/dh​​cp3/dhclient-[interface_name].lease 中,也许这是一个开始。

于 2009-10-06T11:16:54.907 回答
0

我认为不可能通过内核接口 (ioctl) 判断 IP 地址是否是通过 DHCP 分配的,因为在大多数发行版中 DHCP 是一个用户级应用程序,它只是使用远程源提供的数据配置内核,就好像用户有手动完成。事实上,如果您查看 ISC dhclient,它只是将从 DHCP 服务器接收到的数据传递给简单的 shell 脚本,这些脚本执行 ifconfig、route 和您可以作为用户键入的各种其他命令。

因此,您可能必须按照 Stefan 的建议查看特定于您的 DHCP 客户端和分发的方法。

于 2009-10-27T06:24:06.063 回答