我需要开发显示类似内容的路由器软件(注意:这篇文章与网络编程有关):
我通过Wireshark捕获了DHCP数据包,发现它包含了我需要显示的所有细节。数据如下所示:
我用dhcpdump和tcpdump工具检查了它。
me@linux:$ sudo dhcpdump -i wlp6s0
我感兴趣的部分输出是:
TIME: 2016-06-23 12:20:50.976
IP: 10.42.0.1 (b0:c0:90:69:72:57) > 10.42.0.99 (fc:64:ba:1b:40:e5)
OP: 2 (BOOTPREPLY)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: e277d896
SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.42.0.99
SIADDR: 10.42.0.1
GIADDR: 0.0.0.0
CHADDR: fc:64:ba:1b:40:e5:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 5 (DHCPACK)
OPTION: 54 ( 4) Server identifier 10.42.0.1
OPTION: 51 ( 4) IP address leasetime 3600 (60m)
OPTION: 58 ( 4) T1 1800 (30m)
OPTION: 59 ( 4) T2 3150 (52m30s)
OPTION: 1 ( 4) Subnet mask 255.255.255.0
OPTION: 28 ( 4) Broadcast address 10.42.0.255
OPTION: 6 ( 4) DNS server 10.42.0.1
OPTION: 3 ( 4) Routers 10.42.0.1
---------------------------------------------------------------------------
但是如果不使用这些工具(这些工具无法添加到路由器板上),如何以编程方式从dhcp数据包(或这些工具如何提取信息)中提取客户端数据,如MAC地址,IP地址和其他信息(如果可能在C)?
答案 0 :(得分:0)
假设您的DHCP服务器没有提供任何获取所需信息的方法,您可以使用以下类型的套接字:
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
有了它,您将能够看到所有ETH数据包,并像wireshark一样处理它们。您将需要一些OSI层(ETH2,IP,UDP和DHCP)的知识,以便处理数据包中的标头和内容。