我正在用 c++ 学习低级套接字。我做了一个简单的程序来发送一个 ARP 请求。套接字似乎发送了数据包,但我无法用 Wireshark 捕获它。我有另一个小程序,它也发送 ARP 数据包,这些数据包被 Wireshark 捕获(我下面的程序受到该程序的启发)。
我做错了什么吗?
删除代码
编辑
删除代码
编辑 2
似乎我还需要在数据包中包含以太网头数据,所以我现在制作一个包含以太网头和 ARP 头数据的数据包。现在数据包消失并被 Wireshark 捕获。但 Wireshark 说这是免费的。如您所见,发送方和接收方的 IP 或 MAC 地址似乎都没有正确设置。
36 13.318179 Cimsys_33:44:55 Broadcast ARP 42 Gratuitous ARP for <No address> (Request)
编辑 3
/*Fill arp header data*/
p.arp.ea_hdr.ar_hrd = htons(ARPHRD_ETHER);
p.arp.ea_hdr.ar_pro = htons(ETH_P_IP);
p.arp.ea_hdr.ar_hln = ETH_ALEN; // Must be pure INTEGER, not called with htons(), as I did
p.arp.ea_hdr.ar_pln = 4; // Must be pure INTEGER, not called with htons(), as I did
p.arp.ea_hdr.ar_op = htons(ETH_P_ARP);