From a87484f2e86530a6c716a7df6913adf7dbf1e8cb Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Tue, 24 Jan 2017 05:15:56 -0800 Subject: [PATCH] socks: misc fixes. --- lib/net/socks.js | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/lib/net/socks.js b/lib/net/socks.js index 76771743..7b6cbbc1 100644 --- a/lib/net/socks.js +++ b/lib/net/socks.js @@ -31,7 +31,9 @@ function SOCKS() { this.target = SOCKS.states.INIT; this.destHost = '0.0.0.0'; this.destPort = 0; - this.domain = 'localhost'; + this.username = ''; + this.password = ''; + this.name = 'localhost'; this.destroyed = false; this.timeout = null; } @@ -145,17 +147,17 @@ SOCKS.prototype.proxy = function proxy(options) { this.destHost = options.destHost; this.destPort = options.destPort; - this.target = SOCKS.state.PROXY_DONE; + this.target = SOCKS.states.PROXY_DONE; this.open(options); }; SOCKS.prototype.resolve = function resolve(options) { assert(options); - assert(typeof options.domain === 'string'); + assert(typeof options.name === 'string'); - this.domain = options.domain; - this.target = SOCKS.state.RESOLVE_DONE; + this.name = options.name; + this.target = SOCKS.states.RESOLVE_DONE; this.open(options); }; @@ -401,9 +403,9 @@ SOCKS.prototype.handleProxy = function handleProxy(data) { } br = new BufferReader(data); - br.seek(2); + br.seek(3); - switch (data.readU8()) { + switch (br.readU8()) { case 0x01: if (br.left() < 6) { this.error('Bad packet length.'); @@ -442,16 +444,16 @@ SOCKS.prototype.handleProxy = function handleProxy(data) { }; SOCKS.prototype.sendResolve = function sendResolve() { - var domain = this.domain; - var len = Buffer.byteLength(domain, 'utf8'); + var name = this.name; + var len = Buffer.byteLength(name, 'utf8'); var packet = new StaticWriter(7 + len); packet.writeU8(0x05); packet.writeU8(0xf0); - packet.wruteU8(0x00); + packet.writeU8(0x00); packet.writeU8(0x03); packet.writeU8(len); - packet.writeString(domain, 'utf8'); + packet.writeString(name, 'utf8'); packet.writeU16BE(0); packet = packet.render(); @@ -462,7 +464,7 @@ SOCKS.prototype.sendResolve = function sendResolve() { SOCKS.prototype.handleResolve = function handleResolve(data) { var ip; - if (data.length !== 8) { + if (data.length !== 10) { this.error('Resolve failed.'); return; } @@ -477,6 +479,11 @@ SOCKS.prototype.handleResolve = function handleResolve(data) { return; } + if (data[2] !== 0x00) { + this.error('Tor error: ' + data[2]); + return; + } + if (data[3] !== 0x01) { this.error('Tor error.'); return; @@ -493,7 +500,7 @@ SOCKS.prototype.handleResolve = function handleResolve(data) { this.destroy(); - this.emit('resolve', ip); + this.emit('resolve', [ip]); }; SOCKS.resolve = function resolve(options) { @@ -617,13 +624,13 @@ exports.connect = function connect(proxy, port, host, user, pass) { return socket; }; -exports.resolve = function resolve(proxy, domain, user, pass) { +exports.resolve = function resolve(proxy, name, user, pass) { var addr = IP.fromHostname(proxy); return SOCKS.resolve({ host: addr.host, port: addr.port, username: user, password: pass, - domain: domain + name: name }); };