Skip to content

Instantly share code, notes, and snippets.

@daniel-j
Created October 5, 2012 19:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daniel-j/3841983 to your computer and use it in GitHub Desktop.
Save daniel-j/3841983 to your computer and use it in GitHub Desktop.
Node.js LAN port scanner
var net = require('net');
var dns = require('dns');
var startAddress = "194.47.158.";
var scanAddress = "194.47.158.252";
var scanPort = 5357;
scanByPort(startAddress, scanPort, function (scanlist) {
console.log(startAddress+"*: [ "+scanlist.join(", ")+" ]");
scanPorts(scanAddress, function (list) {
console.log(scanAddress+" [ "+list.join(", ")+" ]");
});
});
function scanByPort(startAddress, port, callback) {
var toScan = 0;
var scanlist = [];
for (var i = 0; i < 256; i++) {
toScan++;
(function (i) {
var client = net.connect({
host: startAddress+i,
port: port
}, function () {
console.log(startAddress+i+"\t:"+port);
scanlist.push(i);
});
client.on('error', function () {});
client.on('data', function (data) {
console.log(data.toString());
});
client.on('close', function () {
toScan--;
if (toScan === 0) {
scanlist.sort(function(a,b){return a-b});
callback(scanlist);
}
});
setTimeout(function () {
client.destroy();
}, 300);
}(i));
}
}
function scanPorts(ip, callback) {
var list = [];
var toScan = 0;
for (var i = 0; i < 60000; i+=1000) {
toScan+=1000;
(function (i) {
setTimeout(function () {
//console.log('trying interval '+i);
for (var k = 0; k < 1000; k++) {
var port = i+k;
(function (port) {
var client = net.connect({
host: ip,
port: port
}, function () {
console.log(scanAddress+"\t:"+port);
list.push(port);
});
client.on('error', function () {
//console.log(port)
});
client.on('close', function () {
toScan--;
if (toScan === 0) {
list.sort(function(a,b){return a-b});
//console.log(list);
callback(list);
}
});
setTimeout(function () {
client.destroy();
}, 300);
}(port));
}
}, (i/1000)*200);
}(i));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment