From 3d34309fc581b3b887649c372cac862a6b7c8542 Mon Sep 17 00:00:00 2001 From: Chikus Date: Sun, 27 Oct 2019 13:24:06 +0200 Subject: [PATCH 1/3] Chikus sniffer revision --- submissions/Chikus/port-sniffer/sniffer.js | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 submissions/Chikus/port-sniffer/sniffer.js diff --git a/submissions/Chikus/port-sniffer/sniffer.js b/submissions/Chikus/port-sniffer/sniffer.js new file mode 100644 index 0000000..83b79ee --- /dev/null +++ b/submissions/Chikus/port-sniffer/sniffer.js @@ -0,0 +1,69 @@ +const Net = require('net'); +var host = ''; +var lower_port = 0; +var higher_port = 65535; +var port_list = []; +var timeout = 300; + +function check(host, port, callback) { + var socket = Net.createConnection(port, host); + var timer = setTimeout(function () { + socket.destroy(); + callback(false); +}, timeout); + socket.once('connect', function () { + clearTimeout(timer); + socket.destroy(); + process.stdout.write('.'); + port_list.push(port); + callback(true); + }); + socket.on('error', function () { + clearTimeout(timer); + callback(false); + }); +} + +function run_ports(){ + check(host,lower_port, function next_check(result) { + if (lower_port == higher_port) { + if (port_list.length) { + process.stdout.write('\n'+port_list.join()+' ports are opened \n'); + } + else { + process.stdout.write('No ports were found \n'); + } + } + else { + check(host,++lower_port,next_check); + } + }) +}; + +switch (process.argv[2]) { + case '--ports': + var ports = [2]; + ports = process.argv[3].split('-'); + lower_port = ports[0]; + higher_port = ports[1]; + if (process.argv[4] == '--host') { + host = process.argv[5]; + process.stdout.write('Please verify your port range and your host name , for performance you can modify the variable timeout when you be in localhost, one suggestion use ping to know which will be the ideal timeout\n'); + run_ports(); + } + else { + process.stdout.write('Please type node sniffer.js --help to know the usage \n'); + } + break; + case '--host': + host = process.argv[3]; + process.stdout.write('Please verify your port range and your host name, for performance you can modify the variable timeout when you be in localhost, one suggestion use ping to know which will be the ideal timeout \n'); + process.stdout.write('THanks you dont provide ports u will scan from 0 to 65535 \n'); + run_ports(); + break; + case '--help': + process.stdout.write('Please go to this website to read how to use this program \n https://github.com/kottans/backend/blob/master/tasks/network.md \n'); + break; + default: + process.stdout.write('Please type node sniffer.js --help to know the usage \n'); +} From 5187d7abe11e392d322d3a17d8d497a7f4cd38a0 Mon Sep 17 00:00:00 2001 From: Chikus Date: Fri, 1 Nov 2019 00:31:59 +0200 Subject: [PATCH 2/3] Chikus sniffer 2 --- submissions/Chikus/port-sniffer/sniffer.js | 172 ++++++++++++++------- 1 file changed, 113 insertions(+), 59 deletions(-) diff --git a/submissions/Chikus/port-sniffer/sniffer.js b/submissions/Chikus/port-sniffer/sniffer.js index 83b79ee..5288b3e 100644 --- a/submissions/Chikus/port-sniffer/sniffer.js +++ b/submissions/Chikus/port-sniffer/sniffer.js @@ -1,69 +1,123 @@ const Net = require('net'); -var host = ''; -var lower_port = 0; -var higher_port = 65535; -var port_list = []; -var timeout = 300; -function check(host, port, callback) { - var socket = Net.createConnection(port, host); - var timer = setTimeout(function () { - socket.destroy(); - callback(false); -}, timeout); - socket.once('connect', function () { - clearTimeout(timer); - socket.destroy(); - process.stdout.write('.'); - port_list.push(port); - callback(true); - }); - socket.on('error', function () { - clearTimeout(timer); - callback(false); - }); -} +function sniffer(arg) { + if (arg.length > 6) { + throw new Error( + 'Bad usage to know the manual type: node sniffer.js --help' + ); + } + const help = ` +TCP sniffer parameters: + --host Mandatory parameter which define the host address for a TCP + port, It can be specified as IP address or URL. + --ports Optional parameter which specifies port range, from min (1) to + max (65536) with a separator '-' between them, if this is not specified will + take the min and max values. -function run_ports(){ - check(host,lower_port, function next_check(result) { - if (lower_port == higher_port) { - if (port_list.length) { - process.stdout.write('\n'+port_list.join()+' ports are opened \n'); - } - else { - process.stdout.write('No ports were found \n'); +Examples: node sniffer.js --host google.com --ports 100-2345 + node sniffer.js --ports 1-1500 --host www.google.com + node sniffer.js --host 171.217.3.110 + node sniffer.js --ports 70-80 --host 171.217.3.110 + node sniffer.js --host www.google.com +`; + + function checkServer(host, port) { + return new Promise(function prom(resolve) { + const socket = Net.createConnection(port, host); + socket.setTimeout(300); + socket.on('timeout', function timer() { + socket.destroy(); + resolve(null); + }); + socket.on('connect', function success() { + process.stdout.write('.'); + socket.destroy(); + resolve(port); + }); + socket.on('error', function fail() { + throw new Error('Error in Socket, wrong host \n'); + }); + }).catch(e => e); + } + + async function runPorts(host, lowerPort, higherPort) { + const portList = []; + for (let i = lowerPort; i <= higherPort; i += 1) { + /* eslint-disable */ + const validPort = await checkServer(host, i); + /* eslint-enable */ + if (validPort) { + portList.push(validPort); } } - else { - check(host,++lower_port,next_check); + if (portList.length) { + process.stdout.write(`\n${portList.join()} ports are opened \n`); + return process.exit(0); } - }) -}; + process.stdout.write('No ports were found \n'); + return process.exit(0); + } -switch (process.argv[2]) { - case '--ports': - var ports = [2]; - ports = process.argv[3].split('-'); - lower_port = ports[0]; - higher_port = ports[1]; - if (process.argv[4] == '--host') { - host = process.argv[5]; - process.stdout.write('Please verify your port range and your host name , for performance you can modify the variable timeout when you be in localhost, one suggestion use ping to know which will be the ideal timeout\n'); - run_ports(); + function checkPorts(userPorts) { + if (userPorts) { + const ports = userPorts.split('-').map(elem => Number(elem)); + if ( + ports[0] > ports[1] || + ports[0] < 0 || + ports[1] > 65535 || + !ports[1] + ) { + throw new Error(' Check your ports, range from 1-65535\n'); + } + return [ports[0], ports[1]]; } - else { - process.stdout.write('Please type node sniffer.js --help to know the usage \n'); + throw new Error('Ports no defined \n'); + } + + function checkHost(host) { + if (host) { + const domains = host.split('.'); + if (host.replace(/[^.]/g, '').length === 3) { + if ( + domains.every(x => Number.isNaN(x)) || + domains.every(x => !Number.isNaN(x)) + ) { + return host; + } + } else if (host.replace(/[^.]/g, '').length <= 2) { + if (domains.every(x => !Number.isNaN(x))) { + return host; + } + } } - break; - case '--host': - host = process.argv[3]; - process.stdout.write('Please verify your port range and your host name, for performance you can modify the variable timeout when you be in localhost, one suggestion use ping to know which will be the ideal timeout \n'); - process.stdout.write('THanks you dont provide ports u will scan from 0 to 65535 \n'); - run_ports(); - break; - case '--help': - process.stdout.write('Please go to this website to read how to use this program \n https://github.com/kottans/backend/blob/master/tasks/network.md \n'); - break; - default: - process.stdout.write('Please type node sniffer.js --help to know the usage \n'); + return null; + } + + switch (arg[2]) { + case '--ports': + if (arg[4] === '--host') { + const [portMin, portMax] = checkPorts(arg[3]); + runPorts(checkHost(arg[5]), portMin, portMax); + } else { + process.stdout.write('Bad usage type: node sniffer.js --help \n'); + } + break; + case '--host': + if (arg[4] === '--ports') { + const [portMin, portMax] = checkPorts(arg[5]); + runPorts(checkHost(arg[3]), portMin, portMax); + } else if (typeof arg[4] === 'undefined') { + process.stdout.write('Ports checking from 1 to 65535 \n'); + runPorts(checkHost(arg[3]), 1, 65535); + } else { + process.stdout.write('Bad usage type: node sniffer.js --help \n'); + } + break; + case '--help': + process.stdout.write(help); + break; + default: + process.stdout.write('Bad usage type: node sniffer.js --help \n'); + } } +sniffer(process.argv); From 27e090bdc39ab3ce48d00c580d41886aee1cf303 Mon Sep 17 00:00:00 2001 From: Chikus Date: Sat, 2 Nov 2019 23:53:58 +0200 Subject: [PATCH 3/3] Chikus sniffer 3 --- submissions/Chikus/port-sniffer/sniffer.js | 176 ++++++++++----------- 1 file changed, 86 insertions(+), 90 deletions(-) diff --git a/submissions/Chikus/port-sniffer/sniffer.js b/submissions/Chikus/port-sniffer/sniffer.js index 5288b3e..1e958f9 100644 --- a/submissions/Chikus/port-sniffer/sniffer.js +++ b/submissions/Chikus/port-sniffer/sniffer.js @@ -1,12 +1,6 @@ const Net = require('net'); -function sniffer(arg) { - if (arg.length > 6) { - throw new Error( - 'Bad usage to know the manual type: node sniffer.js --help' - ); - } - const help = ` +const help = ` TCP sniffer parameters: --host Mandatory parameter which define the host address for a TCP port, It can be specified as IP address or URL. @@ -21,103 +15,105 @@ Examples: node sniffer.js --host google.com --ports 100-2345 node sniffer.js --host www.google.com `; - function checkServer(host, port) { - return new Promise(function prom(resolve) { - const socket = Net.createConnection(port, host); - socket.setTimeout(300); - socket.on('timeout', function timer() { - socket.destroy(); - resolve(null); - }); - socket.on('connect', function success() { - process.stdout.write('.'); - socket.destroy(); - resolve(port); - }); - socket.on('error', function fail() { - throw new Error('Error in Socket, wrong host \n'); - }); - }).catch(e => e); - } +function checkServer(host, port) { + return new Promise(function prom(resolve, reject) { + const socket = Net.createConnection(port, host); + socket.setTimeout(300); + socket.on('timeout', function timer() { + socket.destroy(); + resolve(null); + }); + socket.on('connect', function success() { + process.stdout.write('.'); + socket.destroy(); + resolve(port); + }); + socket.on('error', function fail() { + socket.destroy(); + reject(new Error('Wrong host please type: node sniffer.js --help')); + }); + }).catch(e => { + throw e; + }); +} - async function runPorts(host, lowerPort, higherPort) { - const portList = []; - for (let i = lowerPort; i <= higherPort; i += 1) { - /* eslint-disable */ - const validPort = await checkServer(host, i); - /* eslint-enable */ - if (validPort) { - portList.push(validPort); - } - } - if (portList.length) { - process.stdout.write(`\n${portList.join()} ports are opened \n`); - return process.exit(0); +async function runPorts(host, lowerPort, higherPort) { + const portList = []; + for (let i = lowerPort; i <= higherPort; i += 1) { + /* eslint-disable no-await-in-loop */ + const validPort = await checkServer(host, i); + if (validPort) { + portList.push(validPort); } - process.stdout.write('No ports were found \n'); + } + if (portList.length) { + process.stdout.write(`\n${portList.join()} ports are opened \n`); return process.exit(0); } + process.stdout.write('No ports were found \n'); + return process.exit(0); +} - function checkPorts(userPorts) { - if (userPorts) { - const ports = userPorts.split('-').map(elem => Number(elem)); - if ( - ports[0] > ports[1] || - ports[0] < 0 || - ports[1] > 65535 || - !ports[1] - ) { - throw new Error(' Check your ports, range from 1-65535\n'); - } - return [ports[0], ports[1]]; +function checkPorts(userPorts) { + if (userPorts) { + const ports = userPorts.split('-').map(elem => Number(elem)); + if (ports[0] > ports[1] || ports[0] < 0 || ports[1] > 65535 || !ports[1]) { + throw new Error(' Check your ports, range from 1-65535\n'); } - throw new Error('Ports no defined \n'); + return [ports[0], ports[1]]; } + throw new Error('Ports no defined \n'); +} - function checkHost(host) { - if (host) { - const domains = host.split('.'); - if (host.replace(/[^.]/g, '').length === 3) { - if ( - domains.every(x => Number.isNaN(x)) || - domains.every(x => !Number.isNaN(x)) - ) { - return host; - } - } else if (host.replace(/[^.]/g, '').length <= 2) { - if (domains.every(x => !Number.isNaN(x))) { - return host; - } +function checkHost(host) { + if (host) { + const domains = host.split('.'); + if (host.replace(/[^.]/g, '').length === 3) { + if ( + domains.every(x => Number.isNaN(x)) || + domains.every(x => !Number.isNaN(x)) + ) { + return host; + } + } else if (host.replace(/[^.]/g, '').length <= 2) { + if (domains.every(x => !Number.isNaN(x))) { + return host; } } - return null; } + return null; +} - switch (arg[2]) { - case '--ports': - if (arg[4] === '--host') { - const [portMin, portMax] = checkPorts(arg[3]); - runPorts(checkHost(arg[5]), portMin, portMax); +function parseArguments(args) { + const parsedArgs = args.slice(2).reduce( + (acc, arg) => { + if (arg.startsWith('--') && !acc.lastKey) { + acc.lastKey = arg.replace('--', ''); + } else if (acc.lastKey) { + acc.result = { ...acc.result, [acc.lastKey]: arg }; + acc.lastKey = null; } else { - process.stdout.write('Bad usage type: node sniffer.js --help \n'); + throw new Error(`'Unexpected argument '${arg}`); } - break; - case '--host': - if (arg[4] === '--ports') { - const [portMin, portMax] = checkPorts(arg[5]); - runPorts(checkHost(arg[3]), portMin, portMax); - } else if (typeof arg[4] === 'undefined') { - process.stdout.write('Ports checking from 1 to 65535 \n'); - runPorts(checkHost(arg[3]), 1, 65535); - } else { - process.stdout.write('Bad usage type: node sniffer.js --help \n'); - } - break; - case '--help': - process.stdout.write(help); - break; - default: - process.stdout.write('Bad usage type: node sniffer.js --help \n'); + return acc; + }, + { result: {}, lastKey: null } + ).result; + if (parsedArgs.lastKey) { + throw new Error(`Unexpected key '${parsedArgs.lastKey}' no value`); + } + return parsedArgs; +} + +function sniffer(arg) { + if (arg.includes('--help')) { + process.stdout.write(help); + } else if (arg.length > 6) { + throw new Error('Bad usage type: node sniffer.js --help'); + } else { + const args = parseArguments(arg); + const [portMin, portMax] = checkPorts(args.ports); + runPorts(checkHost(args.host), portMin, portMax); } } sniffer(process.argv);