socks: misc fixes.
This commit is contained in:
parent
0de1302ca9
commit
a87484f2e8
@ -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
|
||||
});
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user