无法使用PF_PACKET将原始数据包发送到本地mac?

时间:2012-08-24 05:23:00

标签: linux sockets raw-sockets

我一直在使用

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

套接字(PF_PACKET,SOCK_RAW,ether_type)

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

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

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

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

你能把包发给自己吗?

网卡不能环回吗? linux内核是否在IP级别上做了一些特殊的环回,因为我低于那个,不理我?

1 个答案:

答案 0 :(得分:1)

是的,IP“环回”数据包,如你所说,是专门处理的。它们在内部循环,而不是通过界面发送出去。因此,在这个意义上,以太网级环回是一种通常不需要支持的特殊情况。一些旧的10Mbit以太网卡甚至是半双工的,因此无法在该硬件上运行:)。

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

我想下一个问题是您的开关是否支持此功能。一个愚蠢的枢纽必须支持它,但现代转换的空间让人感到困惑。或者可能因担心无限循环数据包而不允许它。