60 lines
2 KiB
JavaScript
Executable file
60 lines
2 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
var program = require('commander');
|
|
var TorRouter = require('../');
|
|
var SOCKSServer = TorRouter.SOCKSServer;
|
|
var DNSServer = TorRouter.DNSServer;
|
|
var TorPool = TorRouter.TorPool;
|
|
var ControlServer = TorRouter.ControlServer;
|
|
var winston = require('winston')
|
|
|
|
process.title = 'tor-router';
|
|
|
|
program
|
|
.version(JSON.parse(require('fs').readFileSync(`${__dirname}/../package.json`, 'utf8')).version)
|
|
.option('-c, --controlPort [9077]', 'Control Server port', Number)
|
|
.option('-j, --instances <1>', 'Number of tor instances', Number)
|
|
.option('-s, --socksPort [9050]', 'SOCKS Server port', Number)
|
|
.option('-d, --dnsPort [9053]', 'DNS Server port', Number)
|
|
.option('-l, --logLevel [info]', 'Log level (defaults to "info") set to "null" to disable logging', Number)
|
|
.parse(process.argv);
|
|
|
|
var logger = new (winston.Logger)({
|
|
transports: [
|
|
new (winston.transports.Console)({ level: (program.logLevel || 'info') })
|
|
]
|
|
});
|
|
|
|
let instances = program.instances || Number(process.env.INSTANCES);
|
|
let log_level = program.logLevel || process.env.LOG_LEVEL;
|
|
let socks_port = (program.socksPort === true ? 9050 : program.socksPort) || Number(process.env.SOCKS_PORT);
|
|
let dns_port = (program.dnsPort === true ? 9053 : program.dnsPort) || Number(process.env.DNS_PORT);
|
|
let control_port = (program.controlPort === true ? 9077 : program.controlPort) || Number(process.env.CONTROL_PORT) || 9077;
|
|
|
|
if (log_level === 'null')
|
|
logger = void(0);
|
|
|
|
let control = new ControlServer(logger);
|
|
|
|
process.on('SIGHUP', () => {
|
|
control.torPool.new_ips();
|
|
});
|
|
|
|
if (socks_port) {
|
|
let socks = control.createSOCKSServer(socks_port);
|
|
}
|
|
|
|
if (dns_port) {
|
|
let dns = control.createDNSServer(dns_port);
|
|
}
|
|
|
|
if (instances) {
|
|
logger && logger.info(`[tor]: starting ${instances} tor instances...`)
|
|
control.torPool.create(instances, (err) => {
|
|
logger && logger.info('[tor]: tor started');
|
|
});
|
|
}
|
|
|
|
control.server.listen(control_port, () => {
|
|
logger && logger.info(`[control]: Control Server listening on ${control_port}`);
|
|
}) |