我正在摆弄套接字ioctl以获得当前的接口设置,我已经可以获得IP,接口名称,网络掩码并检查接口是启动还是关闭,(我只是做IOCTl到SIOCGIFCONF,SIOCGIFNETMASK和SIOCGIFFLAGS )。
我正在寻找一种方法来判断我当前的IP地址是通过dhcp获得还是静态的。
我可以检查/ etc / network / interfaces以获取我想要的所有内容,但我正在寻找一种以编程方式执行此操作的方法(这个词是否存在?)。
有没有人对此有任何见解?
还有一件事,我正在使用Linux(现在)。
干杯
答案 0 :(得分:3)
Linux上有各种各样的DHCP客户端 - pump,dhcpcd,dhclient,udhcpc,很可能是我不知道的其他客户端 - 这在一般意义上是不可能的。
但是,如果你的目标是特定的发行版 - 比如“Ubuntu的默认安装” - 那么你可以研究一下Stefan这样的解决方案。请注意,此处列出的所有四个DHCP客户端都可以安装在Ubuntu上,并且可以替换默认的DHCP客户端dhclient。
答案 1 :(得分:2)
如果您正在运行Ubuntu,则租约存储在/var/lib/dhcp3/dhclient-[interface_name].lease中,也许这是一个开始。
答案 2 :(得分:0)
我不认为通过内核接口(ioctl)可以通过DHCP分配IP地址,因为在大多数发行版中,DHCP是一个用户空间应用程序,它只使用远程源提供的数据配置内核,就好像用户已手动完成。实际上,如果你查看ISC dhclient,它只是将从DHCP服务器接收的数据传递给简单的shell脚本,这些脚本执行ifconfig,route和你可以输入用户的各种其他命令。
因此,您可能必须按照Stefan的建议查看特定于DHCP客户端和分发的方法。