socks: misc fixes.
This commit is contained in:
parent
0de1302ca9
commit
a87484f2e8
@ -31,7 +31,9 @@ function SOCKS() {
|
|||||||
this.target = SOCKS.states.INIT;
|
this.target = SOCKS.states.INIT;
|
||||||
this.destHost = '0.0.0.0';
|
this.destHost = '0.0.0.0';
|
||||||
this.destPort = 0;
|
this.destPort = 0;
|
||||||
this.domain = 'localhost';
|
this.username = '';
|
||||||
|
this.password = '';
|
||||||
|
this.name = 'localhost';
|
||||||
this.destroyed = false;
|
this.destroyed = false;
|
||||||
this.timeout = null;
|
this.timeout = null;
|
||||||
}
|
}
|
||||||
@ -145,17 +147,17 @@ SOCKS.prototype.proxy = function proxy(options) {
|
|||||||
|
|
||||||
this.destHost = options.destHost;
|
this.destHost = options.destHost;
|
||||||
this.destPort = options.destPort;
|
this.destPort = options.destPort;
|
||||||
this.target = SOCKS.state.PROXY_DONE;
|
this.target = SOCKS.states.PROXY_DONE;
|
||||||
|
|
||||||
this.open(options);
|
this.open(options);
|
||||||
};
|
};
|
||||||
|
|
||||||
SOCKS.prototype.resolve = function resolve(options) {
|
SOCKS.prototype.resolve = function resolve(options) {
|
||||||
assert(options);
|
assert(options);
|
||||||
assert(typeof options.domain === 'string');
|
assert(typeof options.name === 'string');
|
||||||
|
|
||||||
this.domain = options.domain;
|
this.name = options.name;
|
||||||
this.target = SOCKS.state.RESOLVE_DONE;
|
this.target = SOCKS.states.RESOLVE_DONE;
|
||||||
|
|
||||||
this.open(options);
|
this.open(options);
|
||||||
};
|
};
|
||||||
@ -401,9 +403,9 @@ SOCKS.prototype.handleProxy = function handleProxy(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
br = new BufferReader(data);
|
br = new BufferReader(data);
|
||||||
br.seek(2);
|
br.seek(3);
|
||||||
|
|
||||||
switch (data.readU8()) {
|
switch (br.readU8()) {
|
||||||
case 0x01:
|
case 0x01:
|
||||||
if (br.left() < 6) {
|
if (br.left() < 6) {
|
||||||
this.error('Bad packet length.');
|
this.error('Bad packet length.');
|
||||||
@ -442,16 +444,16 @@ SOCKS.prototype.handleProxy = function handleProxy(data) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
SOCKS.prototype.sendResolve = function sendResolve() {
|
SOCKS.prototype.sendResolve = function sendResolve() {
|
||||||
var domain = this.domain;
|
var name = this.name;
|
||||||
var len = Buffer.byteLength(domain, 'utf8');
|
var len = Buffer.byteLength(name, 'utf8');
|
||||||
var packet = new StaticWriter(7 + len);
|
var packet = new StaticWriter(7 + len);
|
||||||
|
|
||||||
packet.writeU8(0x05);
|
packet.writeU8(0x05);
|
||||||
packet.writeU8(0xf0);
|
packet.writeU8(0xf0);
|
||||||
packet.wruteU8(0x00);
|
packet.writeU8(0x00);
|
||||||
packet.writeU8(0x03);
|
packet.writeU8(0x03);
|
||||||
packet.writeU8(len);
|
packet.writeU8(len);
|
||||||
packet.writeString(domain, 'utf8');
|
packet.writeString(name, 'utf8');
|
||||||
packet.writeU16BE(0);
|
packet.writeU16BE(0);
|
||||||
packet = packet.render();
|
packet = packet.render();
|
||||||
|
|
||||||
@ -462,7 +464,7 @@ SOCKS.prototype.sendResolve = function sendResolve() {
|
|||||||
SOCKS.prototype.handleResolve = function handleResolve(data) {
|
SOCKS.prototype.handleResolve = function handleResolve(data) {
|
||||||
var ip;
|
var ip;
|
||||||
|
|
||||||
if (data.length !== 8) {
|
if (data.length !== 10) {
|
||||||
this.error('Resolve failed.');
|
this.error('Resolve failed.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -477,6 +479,11 @@ SOCKS.prototype.handleResolve = function handleResolve(data) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data[2] !== 0x00) {
|
||||||
|
this.error('Tor error: ' + data[2]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (data[3] !== 0x01) {
|
if (data[3] !== 0x01) {
|
||||||
this.error('Tor error.');
|
this.error('Tor error.');
|
||||||
return;
|
return;
|
||||||
@ -493,7 +500,7 @@ SOCKS.prototype.handleResolve = function handleResolve(data) {
|
|||||||
|
|
||||||
this.destroy();
|
this.destroy();
|
||||||
|
|
||||||
this.emit('resolve', ip);
|
this.emit('resolve', [ip]);
|
||||||
};
|
};
|
||||||
|
|
||||||
SOCKS.resolve = function resolve(options) {
|
SOCKS.resolve = function resolve(options) {
|
||||||
@ -617,13 +624,13 @@ exports.connect = function connect(proxy, port, host, user, pass) {
|
|||||||
return socket;
|
return socket;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.resolve = function resolve(proxy, domain, user, pass) {
|
exports.resolve = function resolve(proxy, name, user, pass) {
|
||||||
var addr = IP.fromHostname(proxy);
|
var addr = IP.fromHostname(proxy);
|
||||||
return SOCKS.resolve({
|
return SOCKS.resolve({
|
||||||
host: addr.host,
|
host: addr.host,
|
||||||
port: addr.port,
|
port: addr.port,
|
||||||
username: user,
|
username: user,
|
||||||
password: pass,
|
password: pass,
|
||||||
domain: domain
|
name: name
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user