我正在构建一个简单的应用程序,该应用程序应通过socks4/5代理发送UDP数据包。我使用UDP协议,这样就不必保持连接打开。
然而,这并不像我想象的那么简单。根据这个架构图,我得出结论,在与代理服务器建立TCP连接之前,我无法通过代理发送UDP数据。
尽管如此,我还是找不到任何适合在CPP中构建这种连接的示例。如果您有任何资源,请告诉我 :)
这是可能的。根据wikipedia SOCKS5协议的描述,您需要在客户端连接请求的字段2中指定值0x03。
The client's connection request is
field 1: SOCKS version number, 1 byte (must be 0x05 for this version)
field 2: command code, 1 byte:
0x01 = establish a TCP/IP stream connection
0x02 = establish a TCP/IP port binding
0x03 = associate a UDP port
field 3: reserved, must be 0x00
field 4: address type, 1 byte:
0x01 = IPv4 address
0x03 = Domain name
0x04 = IPv6 address
field 5: destination address of
4 bytes for IPv4 address
1 byte of name length followed by the name for Domain name
16 bytes for IPv6 address
field 6: port number in a network byte order, 2 bytes
正如Hasturkun指出的那样
你的代码无法工作,因为你根本没有发送连接请求。你必须发送一个UDP ASSOCIATE请求(在TCP连接上),并且你需要使用响应中的端口和地址来转发你的数据报。
你真的应该看一下Socks5 RFC