WinDivert - 需要加密和解密网络数据包

时间:2014-06-10 09:14:17

标签: c++ sockets networking encryption

我需要加密和解密两台计算机之间的所有网络数据包。例如,使用WinDivert,我们可以捕获,修改和重新注入数据包。我只看到两种方式:

  1. WAY:捕获出站数据包,加密有效负载并重新注入数据包 - >捕获入站数据包,解密有效负载并重新注入数据包。
  2. WAY:捕获出站数据包,加密数据包并通过套接字发送 - >通过套接字接收它,解密数据包并重新注入它。
  3. 我不确定他们的可行性。

    • 是否可以加密有效负载?
    • 如何通过套接字发送WinDivert数据包?

    如果您有任何建议或示例,这将非常有用。

1 个答案:

答案 0 :(得分:0)

加密并非易事。这可能是一个非常复杂的项目,具体取决于您的想法。

在数据包捕获和重新注入方面,两种“方式”都是可行的。方式1.如果您对加密IP标头不感兴趣,那么这是一个好主意,而如果您想加密整个数据包,WAY 2非常有用。

对于WAY 2.,您需要注意不要创建循环。例如。 WinDivert重新捕获加密数据包。这取决于你的过滤字符串是什么。

对于WAY 1和2.,另一个问题是加密通常会增加数据包的大小。对于WAY 2.,您还要添加IP / UDP标头,从而进一步增加大小。问题是原始捕获的数据包可能已经是最大MTU大小,因此不能增加大小。这些解决方案非常重要,无论是数据包碎片还是注入PMTU ICMP消息。

我不确定我是否理解您的具体问题:WinDivert会将数据包捕获到缓冲区中,您可以对此缓冲区执行任何操作。这包括加密(使用任何方法),重新注入或将其发送到套接字等。

相关问题