【问题标题】:Encapsulating UDP in a TCP protocol在 TCP 协议中封装 UDP
【发布时间】:2011-04-15 15:57:38
【问题描述】:

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

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

所以基本上我的连接如下:

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

我需要帮助的要点:

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

编辑#1

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

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

【问题讨论】:

  • 您可以将您的程序指向任何 IP 地址还是硬编码?原因是,如果您可以将其作为服务器,您可以创建代理服务器,这会使事情变得更容易。
  • 运行 UDP 的程序是硬编码的,我不能使用注入 - 这就是为什么我说我需要一个网络驱动程序来拦截数据包。
  • 我很好奇,为什么您的应用程序会桥接 UDP 和 TCP 流量?
  • @MikePennington 它在不允许 UDP 连接的受限网络环境中运行。 VPN 太昂贵了——它会重定向所有流量。由于 TCP 连接很好(而且更常见),它会减慢整个系统的速度。这就是为什么要创建类似 VPN 的设置,但仅适用于 UDP 数据包。

标签: c# tcp udp encapsulation


【解决方案1】:

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

资源:

【讨论】:

    【解决方案2】:

    您需要将网卡设置为混杂模式(如 Ethereal/Wireshark)。您需要按特定模式过滤所有 UDP 数据包,以识别正在发送这些数据包的应用程序(可能是目标地址,也可能是有效负载)。这样就可以解决问题了。

    然后,您创建一个服务器,一侧带有 UDP 服务器(防火墙内),另一侧带有 TCP 客户端,它将 UDP 流量封装在 TCP 中并将其发送到您的另一台服务器(防火墙外)将执行对面。

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

    附:它让我想起了一个人是如何访问银行系统的,而它只有 ICPM(ping)。所以他写了 TCP-over-PING 并且能够以这种方式远程登录。好笑。

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2017-01-05
      • 2013-10-05
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2022-01-20
      • 2020-07-31
      相关资源
      最近更新 更多