socks: misc fixes.

This commit is contained in:
Christopher Jeffrey 2017-01-24 05:15:56 -08:00
parent 0de1302ca9
commit a87484f2e8
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -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
});
};