2017-09-12 127 views
1

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

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

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

[email protected]:~/dhclient wlp2s0 
[email protected]:~/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) 

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

+0

你想获得远程机器或你的信息? – ARG

+0

@ARG:我想获取我的机器的信息,但使用我的程序,而不是使用命令行工具,如dhcpclient – ARM

+0

@ARM,您可以使用像SIOCGIFADDR,http://www.microhowto.info/howto/get_the_ip_address_of_a_network_interface_in_c_using_siocgifaddr.html – ARG

回答

3

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

我想你要编写一个使用原始套接字或别的东西把字节直接上线自己的DHCP客户端。

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

然后你必须把电线上的正确字节按照正确的顺序,并读取字节回来就能得到你想要的信息。

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

相关问题