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

时间:2013-05-09 22:55:05

标签: node.js proxy udp

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

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

3 个答案:

答案 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.txthttp://en.wikipedia.org/wiki/SOCKS#SOCKS5,Socks5中应该支持UDP。

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

所以,简短的回答是NO,除非你找到支持它的库(UDP绑定)。