viernes, 12 de marzo de 2010

Mini Analizador de Puertos en Java

El siguiente código permite realizar una busqueda de puertos en un segmento de Red. El programa es muy sencillo y no cuenta con interfaz gráfica. Su objetivo es realizar un mostrar el uso básico de conexión de Sockets.

Clase IP



public class IP {

//189.231.254.21

private int octeto1;
private int octeto2;
private int octeto3;
private int octeto4;

public IP(int octeto1, int octeto2, int octeto3,int octeto4) {
this.octeto1 = octeto1;
this.octeto2 = octeto2;
this.octeto3 = octeto3;
this.octeto4 = octeto4;
}

public int getOcteto1() {
return octeto1;
}

public void setOcteto1(int octeto1) {
this.octeto1 = octeto1;
}

public int getOcteto2() {
return octeto2;
}

public void setOcteto2(int octeto2) {
this.octeto2 = octeto2;
}

public int getOcteto3() {
return octeto3;
}

public void setOcteto3(int octeto3) {
this.octeto3 = octeto3;
}

public int getOcteto4() {
return octeto4;
}

public void setOcteto4(int octeto4) {
this.octeto4 = octeto4;
}

/**
* Permite incrementar el ip en una unidad
*
*/
public void incrementar() {
this.octeto4 ++;
if ( octeto4 == 256) {
this.octeto4 = 0;
this.octeto3 ++;
if ( octeto3 == 256) {
this.octeto3 = 0;
this.octeto2 ++;
if ( octeto2 == 256) {
this.octeto2 = 0;
this.octeto3 ++;
if ( octeto1 == 256) {
this.octeto1 = 0;
}
}
}
}
}

/**
* Valida si el ip que le llega es mayor que el ip actual
* @param ip
* @return
*/
public boolean isMenor(IP ip) {
if ( this.octeto1 > ip.getOcteto1() ) {
return false;
}
if ( this.octeto2 > ip.getOcteto2() ) {
return false;
}
if ( this.octeto3 > ip.getOcteto3() ) {
return false;
}
if ( this.octeto4 > ip.getOcteto4() ) {
return false;
}
return true;
}

public String toString() {
return octeto1 + "." + octeto2 + "." + octeto3 + "." + octeto4;
}
}


PortScanner

/**
* Realiza el escaneo de IPS
* @author zeneslev
*/
public class PortScanner {

/**
* Reliza el scan en un desde un IP inicial hasta el IP de fin, buscando en
* un puerto en particular.
* @param inicio
* @param fin
*/
public void scan(IP inicio, IP fin) {
// Inicia la iteración desde el ip inicio hasta el fin
while ( inicio.isMenor(fin)) {
Socket s = new Socket( );
try {
// Realiza la conexión al puerto 8080, esperando 5000 ms para
// el timeout
s.connect(new InetSocketAddress(inicio.toString(),8080) , 5000);
System.out.println(" + " + inicio + " OK ");
inicio.incrementar();
//Cierra el socket
s.close();
} catch (IOException e) {

System.out.println(" - " + inicio + " FALLO " + e.getMessage() );
inicio.incrementar();
}
}
}

/**
* Prueba el código
* @param args
*/
public static void main(String[] args) {
IP inicio = new IP(189,231,254,1);
IP fin = new IP(189,231,254,254);
PortScanner p = new PortScanner();
p.scan(inicio, fin);

}
}