我正在写我的硕士论文,我的实现有一个小问题。
论文的一部分,是在PC A上加密一个网络数据包,并将其发送到PC B。接收者现在应该解密它,并将其重新注入到网络堆栈中,以便其他应用程序可以使用该数据包。
对于第一个测试用例,我使用了ICMP (request)。在系统A上,Nftables用于过滤传出数据包的流量。如果有匹配的传出包,我会使用nft将其排队到用户空间。我的C应用程序对其进行加密,并通过原始套接字将其发送出去。这个包是从PC B接收的。在PC B上,我有一个基于原始套接字的过滤器应用程序。此应用程序会看到传入的帧并对其进行解密。当我用wireshark检查结果时,似乎一切正常。解密帧的每个比特等于原始帧的比特。现在应该将解密的数据包重新注入到网络堆栈中。正如我之前提到的,这是由RAW-Sockets完成的。现在,我期望这个重新注入的包应该像普通的ICMP-Request包一样被处理。但事实并非如此。系统接收到解密的数据包,但没有发送响应。
你知道发生了什么事吗?是否可以将带有原始套接字的数据包注入到自己的网络堆栈中?
在过去的几天里,我读到了一些关于TUN/TAP的东西。这是重新注入我的包的正确方式吗?
谢谢你的帮忙!
致以良好的问候,安德烈亚斯
发布于 2016-06-24 21:12:56
我让它起作用了。
我在这里找到了一个解决方案:How to inject a raw L2 packet as an incoming packet to an interface on Linux?
在我第一次尝试搜索答案时,我没有找到这个帖子。但现在它工作得很好!
解决方案非常简单。我需要一个虚拟接口通过网桥连接到我的物理接口eth0。因此,我将数据包发送到虚拟接口,我喜欢将其重新注入堆栈。通过网桥,它们被转发到eth0,并作为传入帧进行处理。
致以良好的问候,安德烈亚斯
https://stackoverflow.com/questions/38012513
复制相似问题