重定向打开TCP连接

时间:2014-05-04 15:36:00

标签: c++ qt redirect tcp p2p

是否可以将打开的TCP连接重定向到第三个设备?

例如,我有两个客户端都连接到中央服务器。两人都发起了沟通。他们无法接受来自互联网以外的任何连接,因为路由器的防火墙阻止了它们。

如果他们想要相互连接怎么办?是否可以将两个连接重定向到服务器,成为客户端之间的一个点对点连接? (我觉得这是不可能的)我的程序允许两个设备都可以作为TCP服务器工作,只有防火墙阻止它们。

目前,我正在使用两种解决方案在两个客户端之间进行通信。一个是使用UPnP端口映射,另一个是重复发送到服务器的消息并传输给客户端。

还有其他解决方案吗?我对使用C ++,Qt和Linux的方法特别感兴趣。

1 个答案:

答案 0 :(得分:0)

您无法将已打开的TCP连接重定向到另一台设备,因为在这种情况下,连接的端点需要更改 - 但端点(ip +端口)是连接的重要部分。因此,您只能将服务器上收到的数据从一个连接传输到另一个连接并返回,或者您可以尝试使双方从开始时直接连接到TCP漏洞,如评论中已提到的那样。但这只适用于简单的NAT设置。

服务器上的简单端口转发对于已建立的连接不起作用,因为您不仅必须重写所有数据包的发送方和接收方(例如NAT),还要重写序列号等,以便它们与其他已建立的连接匹配。因此,您需要在连接级别在用户空间或内核内进行转发,而不是使用套接字拼接等技术在数据包级别进行转发。