Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 为什么SOCKS5需要通过UDP中继UDP?_Networking_Tcp_Udp_Socks_Rfc - Fatal编程技术网

Networking 为什么SOCKS5需要通过UDP中继UDP?

Networking 为什么SOCKS5需要通过UDP中继UDP?,networking,tcp,udp,socks,rfc,Networking,Tcp,Udp,Socks,Rfc,中描述的协议提供对UDP的支持 总之,希望通过SOCKS5服务器中继UDP数据包的客户端必须至少: 打开与SOCKS5服务器的TCP连接 发送UDP关联请求(cf) 从服务器接收必须发送UDP数据包进行中继的地址和端口 将数据报(UDP)发送到该地址,并用一些头(cf)封装 以下是一些相关报价,来自: UDP关联在UDP关联请求到达的TCP连接终止时终止 在对UDP关联请求的回复中,BND.PORT和BND.ADDR字段指示客户端必须发送UDP请求消息以进行中继的端口号/地址 以及: 基于U

中描述的协议提供对UDP的支持

总之,希望通过SOCKS5服务器中继UDP数据包的客户端必须至少:

  • 打开与SOCKS5服务器的TCP连接
  • 发送
    UDP关联
    请求(cf)
    
  • 从服务器接收必须发送UDP数据包进行中继的地址和端口
  • 将数据报(UDP)发送到该地址,并用一些头(cf)封装
以下是一些相关报价,来自:

UDP关联在UDP关联请求到达的TCP连接终止时终止

在对UDP关联请求的回复中,BND.PORT和BND.ADDR字段指示客户端必须发送UDP请求消息以进行中继的端口号/地址

以及:

基于UDP的客户端必须将其数据报发送到UDP中继服务器的UDP端口,该端口在对UDP关联请求的回复中由BND.port指示

为什么这么复杂为什么不在预先存在的TCP连接中发送UDP数据包?

编辑:到,我希望SOCKS代理通过TCP流接收UDP数据包,然后使用实际的UDP将它们传输到目标。然后从目标接收UDP数据包并将其沿TCP流发送回


这里有一些背景

我的目标是实现反向连接,这样Android设备就可以使用它所插入的计算机的internet连接,而不需要在设备和计算机上都进行根访问(可以工作,但需要在计算机上进行根访问)

我的第一个想法是在计算机上用
ssh-D
启动一个简单的SOCKS5服务器,这样我只需要实现客户端。得益于
adb reverse
提供的远程端口转发,数据包将通过
adb
从设备传输到计算机

不幸的是,OpenSSH支持SOCKS服务器。但这只是实现的一个限制,我可以使用另一个SOCKS服务器来代替

但是,
adb reverse
也不支持UDP转发

因此,我提出了关于SOCKS5协议的问题


我目前正在编写一个PoC,通过TCP实现我自己的(简单)协议,它能够中继UDP数据包,但我对不能使用标准协议(并从现有实现中获益)感到失望。

我在回答我自己的问题:这可能是为了避免TCP机制(数据包重传,…)


不过,对于本地反向栓系工具来说,这不是问题,因此我在TCP上实现了UDP,而没有使用SOCKS。

您不能通过TCP连接发送数据报。TCP是一种字节流协议。这个问题是有意义的。我的意思是,当然,一个UDP数据包作为有效负载包装在TCP流上。@rom1v:如果UDP数据包包装在TCP流中,它将不再是UDP,而是TCP。代理背后的现有UDP软件不知道如何进行TCP包装。想到的一个场景是,一个应用程序连接到SOCKS代理并打开UDP中继端口,然后另一个应用程序通过代理程序实际发送UDP数据包。因为UDP是无连接的,所以没有什么可以阻止这种情况。不要求打开UDP端口的应用程序和发送UDP数据的应用程序是同一个应用程序。另一方面,TCP不允许这样做。@rom1v:您是否希望SOCKS代理通过TCP流接收UDP数据包,然后使用实际的UDP将其传输到目标?然后从目标接收UDP数据包并将其发送回TCP流?@Remy Lebeau。我编辑了我的问题以添加您的公式,这是完美的;-)