将UDP封装在TCP协议中

本文关键字:协议 TCP UDP 封装 | 更新日期: 2023-09-27 17:50:29

我不太确定从哪里开始,但我假设我需要某种网络驱动程序来捕获所有UDP流量。(请告诉我哪一个是最好的文档和工作)

在c#中成功捕获UDP数据包后,我将通过TCP连接将它们发送到我的服务器,在此我需要将UDP发送到目的地,然后将响应发送回客户端机器(即捕获数据包),然后将响应发送到程序,就好像它直接来自有问题的服务器一样。

所以基本上我的连接在下面:

Client running UDP program <<==TCP connection==>> Conversion Server <<==UDP connection==>> UDP Server 

我需要帮助的点:

  • 从程序捕获UDP数据包(使用网络驱动程序)
  • 将我从服务器获得的响应发送回程序(使用相同的网络驱动程序????)

编辑# 1

好吧,让我澄清一下。我的电脑上有一个程序,我无法控制。我没有它的源代码,没有办法修改源代码,我不能用注入技术告诉它做一些不同的事情。当然,它使用UDP与服务器连接,我需要它工作。

现在,我需要让该程序工作,但我背后是一个安全的网络,不允许UDP流量(不要问)。我需要创建一个网络驱动程序,捕获我计算机上所有程序生成的所有UDP流量,将其发送到专用服务器(其中我将编码一个服务器守护进程将TCP转换为UDP并将其发送到原始目的地)。

将UDP封装在TCP协议中

需要编写LSP (Layered Service Provider)并安装。在实现LSP时,您的代码将获得从UDP端口接收到的实际数据包,然后将其发送到TCP服务器,该服务器将进行一些修改。这样就可以将修改后的报文从LSP码发送给应用程序,而不是发送给应用程序。你可以在这里找到一些细节。

资源:

  • WinSock LSP样本
  • 分层服务提供商(LSP)最佳实践白皮书

您需要将网卡设置为混杂模式(如Ethereal/Wireshark)。您需要通过某种模式过滤所有UDP数据包,以确定它是正在发送这些数据包的应用程序(可能通过目的地址,也可能通过有效负载)。这样就能处理好抓鱼的问题了。

然后你创建一个服务器,一边是UDP服务器(在防火墙内),另一边是TCP客户端,它将UDP流量封装在TCP中,并将其发送到你的另一个服务器(在防火墙外),将做相反的事情。

总的来说,这是可行的,不是火箭科学,只需要对网络有很好的理解。

注:这让我想起了一个家伙是如何进入银行系统的,而它只有ICPM (ping)。因此,他编写了TCP-over-PING,并能够以这种方式远程登录。有趣。