使用DHCP获取IP地址,网关,掩码和广播信息

时间:2017-09-12 09:50:42

标签: c++ c ubuntu network-programming dhcp

我想编写一个程序,从具有MAC地址的接口发送DHCP请求,并从DHCP服务器获取IP地址,网关,掩码和广播地址。

我使用了this implementation的DHCP客户端,但它只提供了IP地址和网关地址。

我读到了有关DHCP消息格式的内容,但我没有找到掩码或广播文件。但是,当使用dhcpclient命令行时,我可以看到使用ifconfig接口有掩码和广播地址,如下所示:

arm@arm-desktop:~/dhclient wlp2s0
arm@arm-desktop:~/ifconfig wlp2s0
wlp2s0 Link encap:Ethernet  HWaddr 54:da:d0:15:4b:04  
      inet addr:153.179.154.55  Bcast:153.179.169.255  Mask:255.255.240.0
      inet6 addr: fe80::2037:c031:5db1:445c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:113 errors:0 dropped:0 overruns:0 frame:0
      TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:112130 (112.1 KB)  TX bytes:9520 (9.5 KB)

有人能告诉我这些信息是如何获得的吗?

1 个答案:

答案 0 :(得分:3)

请参阅this question,它可能就是您想要的。

我认为你正在编写自己的DHCP客户端,它使用原始套接字或其他东西将字节直接放在线路上。

如果你谷歌,你可以阅读有关DHCP here或其他地方的更多信息。如您所见,可以从DHCP服务器以及广播地址获取子网掩码。在与DHCP服务器通信时,通过DHCP选项完成此操作。

然后你必须按照正确的顺序在线上放置正确的字节,并读取返回的字节以便能够获得你想要的信息。

使用您链接的客户端,您可以扩展代码以从DHCP服务器请求和处理更多信息,如广播地址和子网掩码。有关如何在DHCP选项字段中询问信息,请参阅DHCP文档。