【问题标题】:Send an IP packet with Packet.Net and SharpPcap but generate ethernet frame使用 Packet.Net 和 SharpPcap 发送 IP 数据包,但生成以太网帧
【发布时间】:2012-02-21 22:27:43
【问题描述】:

我正在尝试使用 Packet.Net 发送原始 UDP 数据包,但 device.SendPacket() 函数似乎只接受链路级 PDU,这意味着我必须自己找出源 MAC 地址和目标 MAC 地址。 (使用ARP什么的)

如何使用 Packet.Net 创建一个 IP 数据包,同时为我生成正确的以太网帧?

【问题讨论】:

  • 既然你使用的是UDP,你有什么理由不想简单地像往常一样发送它,让低层为你处理一切?
  • @Brad 我目前的原因是我需要从当前计算机上已经绑定的端口发送数据,而我找不到使用 .Net 的方法来执行此操作而不会引发异常。以后我可能还需要更多的控制权。
  • @takteek - 有一个套接字选项允许多个绑定到同一个端口。您应该可以设置 socket.ExclusiveAddressUse = false; 来执行此操作。
  • @takteek - 另外,如果您要经历使用 Packet.NET 或 SharpPCAP 来管理它的痛苦,那么为什么还要首先绑定端口呢?

标签: c# ethernet sharppcap packet.net


【解决方案1】:

您必须知道目标 MAC 地址。正如您所建议的,最好的方法是使用 arp 来发现 mac 地址。您可以从适配器本身获得的源地址。 Sharppcap 和 packet.net 的源代码版本中有 arp 和构建数据包的示例。

克里斯

sharpcap/packet.net 的作者

【讨论】:

  • 好的,那么考虑这是一个功能请求。 :P device.SendPacket 毫无怨言地接受网络层数据包但随后无法发送它们,这有点令人困惑。也许它应该被称为 SendFrame 什么的。
  • 哦,我明白你的意思了。如果将 SendPacket() 修改为只接收 InternetLinkLayerPacket 类型的数据包会怎样?这将包括以太网、LinuxSLL 和 ieee80211.RadioPacket 和 ieee80211.PpiPacket。这至少可以明确必须传入什么类型的数据包并避免这种情况。
  • 如果您可以从 IpPacket 生成 EthernetPacket 也会有帮助吗?这将是可以执行 Arp 等的东西。它必须是 SharpPcap 而不是 Packet.Net 的一部分,因为 SharpPcap 处理设备,Packet.Net 处理数据包解析等。也许一些实用功能会接受 IpPacket 并执行Arp,然后返回构建的EthernetPacket?不确定它是否过于专业,因为 ARP.Resolve() 方法非常简单,EthernetPacket 中实际上只有三个字段需要填写,src、dest 和 PayloadPacket。
猜你喜欢
  • 2015-03-18
  • 2012-12-16
  • 2011-12-02
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
相关资源
最近更新 更多