【问题标题】:Accessing data link layer packets访问数据链路层数据包
【发布时间】:2009-11-25 03:25:34
【问题描述】:

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

socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))

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

2)请给我一个好的链接/教程,用于具有数据链路层访问权限的网络编程。在上面的书中,没有详细描述。

这是my code

【问题讨论】:

  • 我知道 ETH_IP 在哪里。所以我改变了这个问题。我为此道歉。请回答上述新问题

标签: c unix network-programming raw-sockets data-link-layer


【解决方案1】:

您是否尝试过查看 PCAP 库? 它提供了很好的IP、端口和其他东西的过滤功能。

【讨论】:

  • pcap 不解析 IP 标头或 DHCP 数据包。正如 Jack 所说,它只允许您在内核中 过滤,因此您的应用程序不会被您不想要的数据包所淹没。
【解决方案2】:

您也需要链接层标头吗?如果是这样,您需要使用SOCK_RAWSOCK_DGRAM 将在将链接层标头提供给您的应用程序之前将其删除。

您可以通过源端口和目标端口来识别 DHCP 请求,因为 DHCP 在 UDP 端口 67 和 68 上生成流量。

【讨论】:

  • 我认为我不需要链路层标头,因为我正在实现 DHCP 客户端,所以我只需要 IPv4 标头。
猜你喜欢
  • 2021-05-05
  • 1970-01-01
  • 2016-02-25
  • 2011-10-20
  • 1970-01-01
  • 2010-12-20
  • 2012-05-08
  • 2011-11-11
相关资源
最近更新 更多