我想创建一个从数据链路层访问IPv4数据包的套接字。来自unix网络编程V1,
socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))
1)我正在实现一个dhcp客户端,这是正确的做法吗? (意味着没有访问数据链路层,我无法接收来自dhcp服务器的回复)或者还有其他更简单的方法吗? 此外,由于此套接字将接收发往我系统的所有IPv4数据包,我应该如何区分dhcp回复数据包与其他数据包?
2)请为使用数据链接层访问的网络编程建议一个很好的链接/课程。在上面的书中,没有详细说明。
这是my code
答案 0 :(得分:2)
您是否尝试过查看PCAP库? 它在IP,端口和其他东西上提供了很好的过滤功能。
答案 1 :(得分:1)
您是否也需要链接层标题?如果是这样,您需要使用SOCK_RAW
- SOCK_DGRAM
删除链接层标题,然后再将其提交给您的应用。
您可以识别源端口和目标端口的DHCP请求,因为DHCP会在UDP端口67和68上生成流量。