Linux 将UDP标头转换为TCP标头

Linux 将UDP标头转换为TCP标头,linux,tcp,Linux,Tcp,我有一个典型的需求,我想有一个转换器模块,可以将UDP数据包转换为TCP数据包。 在IP层处理数据包之前,我需要这样做 我将用一个例子来解释这个完整的场景 假设我们有3台机器A、B和C A发送了一个UDP数据包 B接收到UDP数据包 在B,当数据包被发送到IP层(从链路层/MAC层/以太网层)时,我想得到数据包。我想删除数据包中的UDP和IP头。我想添加TCP和IP头(假设C是目标主机) 现在,数据包从B机器发送到C机器 有人能帮我怎么做吗。 我正在使用linux机器 虽然libpcap可以是选

我有一个典型的需求,我想有一个转换器模块,可以将UDP数据包转换为TCP数据包。 在IP层处理数据包之前,我需要这样做

我将用一个例子来解释这个完整的场景

假设我们有3台机器A、B和C

  • A发送了一个UDP数据包
  • B接收到UDP数据包
  • 在B,当数据包被发送到IP层(从链路层/MAC层/以太网层)时,我想得到数据包。我想删除数据包中的UDP和IP头。我想添加TCP和IP头(假设C是目标主机)
  • 现在,数据包从B机器发送到C机器
  • 有人能帮我怎么做吗。 我正在使用linux机器

    虽然libpcap可以是选项之一(来自wireshark),但由于性能原因,它不适合我。
    我想要一个非常轻量级的解决方案来解决这个问题。

    做不到。TCP是一种有状态、可靠、面向连接的字节流协议。UDP是一种无状态、不可靠、未连接的数据包协议


    您所能做的最好的事情是,在机器B上,打开到C的新套接字/TCP连接,接受来自a的套接字/UDP数据包,并将这些数据包的内容写入TCP流。数据向另一个方向流动有点困难,因为您必须创建不大于系统支持的最大UDP数据包大小的UDP数据包。

    您不能直接执行此操作,但如果您使用UDP VPN,则可以非常轻松地执行此操作

    只需将您的系统/PC连接到UDP VPN网络,它就可以按照您的需要工作

    检查下面我的图片了解更多信息,我也使用相同的


    您将从哪里获取序列号?连接呢?那你到底在哪里?您可以打开一个原始套接字来发送和接收数据包。但是你的问题听起来不像你很熟悉UDP和TCP之间的区别。我不确定这样的“转换”是否可能,但如果可能的话,它将需要大量的工作和黑客。用TCP封装UDP会更容易,我不需要这些东西。我想在数据包从以太网层传输到IP层时捕获它。哪些“东西”?请说得更准确些。你为什么要这么做?如果你能解释一下你想要达到的目标,也许你会得到一个答案。简单地更改标题是行不通的。UDP是无连接的,而TCP是面向连接的。例如,您将如何建立TCP连接?在这种情况下,我宁愿编写一个代理来读取UDP数据包并通过已建立的TCP连接转发它们。Umm查找SCTP或甚至IPMost防火墙上的串行也可以做到这一点。这两者都不是UDP到TCP的转换。您可以通过TCP流发送数据,也可以通过TCP流发送整个数据包,但不能只更改报头。SCTP是第三种协议,具有两者的某些功能,有点像案例1。这样做的防火墙使用基于TCP的VPN将UDP数据包完全封装在流ala案例2中;另一方解析并打包流,在本地重新发送UDP数据包。。。并试图在这样做时显得聪明。。。这两种都是根据这样的定义进行的转换。。。还有更多的封装是的,但封装不是必需的。。。我可以轻松地将原始侦听器写入recv,当我确定udp时,我可以将其转换或封装为tcp,反之亦然。。很快就可以得到更好的教育。。。滑铁卢。。。kangsroo…WTF问题非常具体:删除UDP头并添加TCP头。这是不可能的。时期你建议的所有其他事情都是不同的。我的“教育”来自于从零开始编写一个完整的、可工作的、可生产的TCP/UDP/IP堆栈,而不是来自我的学校。