将网络数据包重新注入网络堆栈(RAW-Sockets)

时间:2016-06-24 11:36:37

标签: c network-programming raw-sockets

我正在写我的硕士论文,我的实施方面遇到了一个小问题。

论文的一部分是加密PC A上的网络数据包并将其发送到PC B.收件人现在应解密它并将其重新注入网络堆栈,以便其他应用程序可以使用该包。 / p>

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

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

在最后几天,我读到了一些关于TUN / TAP的内容。这是重新注入我的包裹的正确方法吗?

感谢您的帮助!

亲切的问候, 安德烈亚斯

1 个答案:

答案 0 :(得分:0)

我得到了它的工作。

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

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

解决方案非常简单。我需要一个通过网桥连接到我的物理接口eth0的虚拟接口。所以我将我喜欢重新注入堆栈的数据包发送到虚拟接口。在桥上,他们被转发到eth0并被处理为incomming框架。

亲切的问候, 安德烈亚斯