30 junio, 2021

Scanear puertos con sockets en java

Utilizando socket elabore una aplicación que permita escanear los puertos mediante un for, cree un socket que se conecte al número de puerto especificado en el host y muestre la información del socket encendido en dicho puerto.


El siguiente ejercicio viene por parte de un seguidor de la página. 



Antes de ver la solución, recordemos que es un socket y para qué sirve.

¿Qué es un socket?

Un Socket es una conexión entre dos host. Bajo esta conexión, se pueden ejecutar las siguientes operaciones básicas:

• Conectarse a una máquina remota.
• Enviar datos.
• Recibir datos.
• Cerrar una conexión.
• Escuchar datos entrantes.
• Aceptar conexiones de máquinas remotas.

La clase java Socket, la cual es usada tanto por aplicaciones cliente como aplicaciones servidor, tiene métodos que permiten implementar las cuatros primeras operaciones; las restantes, son exclusivas de aplicaciones servidor. 

Los programas java utilizan normalmente sockets cliente de la siguiente manera:

1. El programa crea un nuevo socket utilizando el constructor Socket().
2. El socket intenta conectarse a un host remoto.
3. Una vez establecida la conexión, las máquinas local y remota obtienen flujos de entrada y salida desde el socket y usan estos flujos para intercambiar información.
4. Cuando la transmisión de datos ha sido completada, una de las dos partes, o ambas, cierran la conexión. 

Muy bien, sabiendo estos conceptos, les dejo la solución al ejercicio que no envió Victor desde Facebook.

Solución

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package aprendamos.java.socket;

import java.io.IOException;
import java.net.*;

public class ScannerPuertos {

	// Host para la conexión.
	String host = "localhost";

	// Constructor de la clase.
	public ScannerPuertos() {
		// Verificando puervtos del host.
		for (int i = 130; i < 200; i++) {
			System.out.println("Iteración número: " + i);
			try {
				// Crea un socket de flujo y lo conecta al puerto 
				// especificado en el host nombrado.
				Socket s = new Socket(host, i);
				System.out.println("Hay un servidor en el puerto " + i);
				System.out.println("Dirección local: " + s.getLocalAddress());
				System.out.println("Puerto local   : " + s.getLocalPort());
				System.out.println("Puerto remoto  : " + s.getPort());
				System.out.println("Dirección Inet : " + s.getInetAddress());
				// El puerto local es asignado automáticamente en tiempo de ejecución.
			} catch (UnknownHostException e) {
				// No se pudo determinar la dirección IP del host.
				System.out.println("Excepcion: " + e);
				break;
			} catch (IOException e) {
				// No debe existir un servidor en este puerto.
			}
		}

	}

	// Ejecuta la aplicación.
	public static void main(String args[]) {
		ScannerPuertos ps = new ScannerPuertos();
	}

}

DESARROLLO TUS ALGORITMOS 🔥🔥


✅ 1. Envía tu algoritmo.
✅ 2. Indica en qué lenguaje de Programación lo deseas.
✅ 3. Para qué fecha lo quieres.
✅ 4. De que país eres (para tu forma de pago)
✅ 5. También se desarrollan al momento.
✅ 6. Los 3 primeros ejercicios son gratis.
🔸 Explico cada ejercicio que desarrollo en el código.

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!