2009-11-25 110 views
0

我想创建一个用于从数据链路层访问IPv4数据包的套接字。来自unix网络编程V1,访问数据链路层数据包

socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP)) 

1)我正在实现一个DHCP客户端,这是做到这一点的正确方法? (意味着不访问数据链路层,我无法从DHCP服务器收到回复)还是还有其他更简单的方法? 此外,由于此套接字将接收所有发往我系统的IPv4数据包,我应该如何区分dhcp答复数据包与其他数据包?

2)请建议我一个很好的链接/ tuorial 网络编程与数据链路层访问。在上面的书中,它不是详细的描述。

这是my code

+0

我得到了ETH_IP的位置。所以我改变了这个问题。我为此道歉。请回答上述新问题 – avd 2009-11-25 03:39:12

回答

1

你需要在链路层报头呢?如果是这样,您需要使用SOCK_RAW - SOCK_DGRAM会在将链接层标题提供给应用程序之前删除链接层标题。

可以识别由源端口和目的端口的DHCP请求,因为DHCP生成的UDP端口67和68

+0

我想我不需要链接层标题bcoz我正在实现DHCP客户端,所以我只需要IPv4标头。 – avd 2009-11-25 04:58:26

2

你试图寻找在PCAP库流量? 它提供了很好的IP,端口和其他东西的过滤功能。

+0

我想自己解析IP帧,以便我可以学习。 – avd 2009-11-25 05:31:14

+0

pcap不解析IP头或DHCP数据包。正如Jack提到的那样,它只允许你在内核中过滤*,这样你的应用程序就不会被不需要的数据包所淹没。 – bortzmeyer 2009-11-25 20:28:20