Scanner de Red, buscando servicios – Node.js

En esta ocasión aprenderemos algo bastante interesante que podemos hacer con node.js, como lo es realizar conexiones vía sockets y verificación de sockets en estado abierto.

Tenemos un escenario muy simple resulta que trabajamos en una empresa,  donde tenemos 300 equipos de computo todos con direcciones ip dinamicas entregadas por DCHP, por lo cual no sabemos cuanto tiempo dura cada ip en el equipo, no sabemos cuando cambiaron etc… pero debemos tener las direcciones ip actualizadas siempre para poder ofrecer soportes remotos mediante servicios como VNC y Similiares.

El script se basa en algo simple la validacion del puerto abierto para ejecutar una accion sobre este,  por ejemplo saber cuantos VNC tenemos corriendo en la red y saber cual es su IP. simple y util, funcionaria de la siguiente forma.

 

var net    = require('net'), Socket = net.Socket;
var hostname = '';
var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');


var checkPort = function(port, host, callback) {
    var socket = new Socket(), status = null;
    socket.connect(port, host);
        socket.on('connect', function() {status = 'DISPONIBLE'; socket.end();});
        socket.on('data', function(data) { hostname = decoder.write(data); socket.destroy(); });
        socket.setTimeout(3600);// If no response, assume port is not listening
        socket.on('timeout', function() {status = 'NO DISPONIBLE';socket.destroy();});
        socket.on('error', function(exception) {status = 'NO DISPONIBLE';});
        socket.on('close', function(exception) {callback(null, status,host,port);});
        
};

var LAN = '192.168.1'; //Local area network to scan 
var LLRP = 8090; // Agents Port (Petty Sys)

console.log('Consultado el puerto :'+LLRP+'\r\n');
console.log('IP            ', 'HOSTNAME     ', '  ESTADO\r\n');
for(var i=1; i <=255; i++){
    checkPort(LLRP, LAN+'.'+i, function(error, status, host, port){
        if(status == "DISPONIBLE"){
            console.log(host, hostname, status);
        }
    });
}

En esta ocasion utilizaremos algunos modulos que nos permitiran realizar las operaciones necesarias, tenemos el modulo NET, el submodulo Net.Socket, StringDecoder con esto podremos realizar nuestro demo.

Mediante el script nos conectamos a cada una de las direcciones ip de nuestra red y vamos haciendo pruebas de conexion via socket al puerto especificado. de esta manera podremos obtener una lista especifica.

Deja un comentario