【问题标题】:Can't send raw packets to local mac with PF_PACKET?无法使用 PF_PACKET 将原始数据包发送到本地 mac?
【发布时间】:2012-08-24 05:22:59
【问题描述】:

我一直在玩使用

构建的以太网协议(不是 IP)

socket(PF_PACKET, SOCK_RAW, ether_type)

我有一个小问题。我已经构建了一个数据包,其中源和目标 mac 设置为我的本地卡 mac,我还使用 bind 绑定了套接字。

我可以很好地接收来自网络的数据包。 我能够将数据包发送到我看到它们出现在wireshark中的程度。

但是,我的监听应用看不到这些数据包。但是,它能够看到来自网络上其他来源的数据包。

我应该指出,我的 mac 地址似乎是以正确的字节顺序发送的。

你可以给自己发数据包吗?

网卡不回环吗? linux内核是否在IP级别为环回做了一些特殊的事情,因为我低于此,忽略我?

【问题讨论】:

  • 只是想知道您在运行此程序时是否具有 root 权限,因为 RAW 套接字需要该权限。
  • 另一种选择是使用虚拟以太网“tap”设备,以及像 VDE2 这样的虚拟交换机。这将允许尝试更现实和更复杂的场景。 stackoverflow.com/questions/2082722/…
  • 是的,我有 root 权限。我正在打印所有错误。
  • @MattH : 你能发布你的代码吗?谢谢。

标签: linux sockets raw-sockets


【解决方案1】:

是的,正如您所说,IP“环回”数据包被特殊处理。它们在内部环回,而不是通过接口发送出去。因此,从这个意义上说,以太网级环回是一种通常不需要支持的特殊情况。一些旧的 10Mbit 以太网卡甚至是半双工的,所以它不能在那个硬件上工作:)。

另一方面,您可以购买/制作环回适配器电缆来测试网卡。所以它必须在(希望是所有的)现代硬件上成为可能。人们已经在 linux 下通过 AF_PACKET 使用它们(证据,虽然没有更多细节,here)。

我想下一个问题是你的 switch 是否支持这个。一个愚蠢的集线器必须支持它,但现代交换机有混淆的空间。或者可能因为害怕数据包无限循环而不允许它。

【讨论】:

  • 我想我必须在两台物理计算机之间尝试这个。它实际上是否不以环回方式工作并不重要,我只是想验证代码在同一主机上的两个终端窗口之间工作
  • 它在两台物理计算机之间工作,所以我认为你可能是对的。
猜你喜欢
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多