【问题标题】:Reinjecting network packets into networkstack (RAW-Sockets)将网络数据包重新注入网络堆栈(RAW-Sockets)
【发布时间】:2016-06-24 11:36:36
【问题描述】:

我正在写我的硕士论文,我的实现有一个小问题。

论文的一部分是在 PC A 上加密一个网络数据包并将其发送到 PC B。接收者现在应该对其进行解密并将其重新注入网络堆栈,以便其他应用程序可以使用该包。

对于第一个测试用例,我使用了 ICMP(请求)。 Nftables 用于过滤系统 A 上的传出包的流量。如果有一个匹配的传出包,我将它与 nft 一起排队到用户空间。我的 C-Application 对其进行加密,并使用原始套接字将其发送出去。包裹是从 PC B 收到的。 在 PC B 上,我有一个基于原始套接字的过滤器应用程序。此应用程序看到传入的帧并对其进行解密。当我用wireshark检查结果时,一切似乎都很好。解密帧的每一位等于原始帧的位。现在解密的数据包应该重新注入网络堆栈。正如我之前提到的,这是由 RAW-Sockets 完成的。 我现在希望,这个重新注入的包应该像普通的 ICMP-Request 包一样被处理。但这种情况并非如此。系统收到解密后的包,但没有回复。

有什么想法会发生什么吗?是否可以将带有原始套接字的数据包注入自己的网络堆栈?

最近几天我读到了一些关于 TUN/TAP 的文章。这是重新注入我的包裹的正确方法吗?

感谢您的帮助!

亲切的问候, 安德烈亚斯

【问题讨论】:

    标签: c network-programming raw-sockets


    【解决方案1】:

    我让它工作了。

    我在这里找到了解决方案:How to inject a raw L2 packet as an incoming packet to an interface on Linux?

    在我第一次尝试寻找答案时,我没有找到这个帖子。但现在它工作正常!

    解决方案非常简单。我需要一个通过网桥连接到我的物理接口 eth0 的虚拟接口。因此,我将希望重新注入堆栈的数据包发送到虚拟接口。通过网桥,它们被转发到 eth0 并作为传入帧处理。

    亲切的问候, 安德烈亚斯

    【讨论】:

    • 我正在使用原始套接字构建以太网隧道,但遇到了与 ICMP 完全相同的问题,并且 ping 没有响应,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多