有没有办法通过NodeJS中的SOCKS5代理发送UDP数据包?
同样,是否可以将UDP套接字绑定到特定的localAddress?
答案 0 :(得分:1)
SOCKS5协议支持UDP连接,但SOCKS5的大多数库仅支持TCP,因为在网络上不经常使用UDP(DNS除外)。协议本身并不复杂,所以不应该很难重写现有的库(可能this one?)以满足您的需求。
答案 1 :(得分:1)
要从客户端发送UDP数据包,您必须在客户端连接请求的字段2中指定值0x03。请参阅fields of the client's connection request:
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
例如,引用库中的代码行需要从0x01更改为0x03:
buffer.push(0x01); // Command code: establish a TCP/IP stream connection
我不知道你如何绑定到特定的本地地址。
答案 2 :(得分:0)
根据http://www.ietf.org/rfc/rfc1928.txt和http://en.wikipedia.org/wiki/SOCKS#SOCKS5,Socks5中应该支持UDP。
但是,如果你看一些SOCKS5实现,你会发现实现中不支持UDP。例如:https://gist.github.com/telamon/1127459或https://gist.github.com/robertpitt/3203203(。
所以,简短的回答是NO,除非你找到支持它的库(UDP绑定)。