如何通过NodeJS中的SOCKS5代理发送UDP数据包?

有没有办法通过NodeJS中的SOCKS5代理发送UDP数据包?

同样,是否可以将UDP套接字绑定到特定的localAddress?

SOCKS5协议支持UDP连接,但是大多数SOCKS5库只支持TCP,因为UDP在networking上不常用(DNS除外)。 协议本身不是很复杂,所以不应该很难重写现有的库(也许这是一个 ?),以满足您的需求。

要从您的客户端发送UDP数据包,您必须在客户端的连接请求的字段2中指定值0x03。 查看客户端连接请求的字段 :

 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 

我不知道如何绑定到特定的本地地址。

根据http://www.ietf.org/rfc/rfc1928.txt和http://en.wikipedia.org/wiki/SOCKS#SOCKS5,UDP应该在Socks5中得到真正的支持。

但是,如果你看一下SOCKS5的实现,你会发现实现中不支持UDP。 例如: https : //gist.github.com/telamon/1127459或https://gist.github.com/robertpitt/3203203 (。

所以,简短的答案是NO,除非你会find支持它的库(UDP绑定)。