【问题标题】:Linux ioctl -> how to tell if current IP was obtained by dhcpLinux ioctl -> 如何判断当前 IP 是否由 dhcp 获取
【发布时间】:2009-10-06 10:55:52
【问题描述】:

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

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

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

有人对此有任何见解吗?

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

干杯

【问题讨论】:

  • 我想了这么多...没有 ioctl 或任何类似的事情...同时我已经通过解析文件做到了...所以 ;) 感谢输入的家伙!
  • 抱歉迟到的问题:/etc/network/interfaces 是否总是出现在所有 linux 上?

标签: c++ c linux dhcp ioctl


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-08-09
        • 2011-03-09
        • 1970-01-01
        • 2011-09-13
        • 1970-01-01
        • 2012-01-19
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多