Escaneo de Puertos TCP con Go: Introducción Básica
Clase 14 de 19 • Curso de Go Avanzado: Concurrencia y Patrones de Diseño
Contenido del curso
Concurrencia
- 2

Condiciones de Carrera en Programación Concurrente con Go
04:52 min - 3

Evitar Condiciones de Carrera en Go con Mutex y WaitGroup
11:26 min - 4

Lectura y Escritura Concurrente en Go con RWMutex
06:15 min - 5

Creación de un Sistema de Caché Concurrente en Go
14:29 min - 6

Manejo de Condiciones de Carrera en Go: Implementación de Mutex
08:52 min - 7

Cache concurrente en Go para cálculos intensivos de Fibonacci
16:31 min
Patrones de diseño
- 8

Patrones de Diseño en Programación Orientada a Objetos con Go
04:53 min - 9

Patrón de Diseño Factory en Go: Creación y Uso Práctico
15:17 min - 10

Implementación de Singleton en Go para Conexiones de Base de Datos
08:48 min - 11

Patrón de Diseño Adapter en Go: Implementación Práctica
09:51 min - 12

Patrón de Diseño Observer en Go: Implementación Práctica
11:59 min - 13

Implementación del Patrón de Diseño Strategy en Go
08:53 min
Net
- 14

Escaneo de Puertos TCP con Go: Introducción Básica
Viendo ahora - 15

Concurrencia en Go: Escáner de Puertos Eficiente y Personalizable
09:16 min - 16

Implementación de NetCAD como Cliente TCP en Go
10:14 min - 17

Construcción de Back End para Servidor de Chat en Go
16:08 min - 18

Implementación de un Servidor de Chat en Go con TCP
13:54 min
Conclusión
¿Cómo escanear puertos utilizando Go?
El lenguaje de programación Go se destaca por su potente librería estándar, razón por la cual es muy popular entre los desarrolladores. En esta guía, exploraremos el paquete net de Go para generar conexiones TCP a diferentes servidores y escanear los puertos disponibles. Esto te permitirá determinar cuáles puertos están abiertos y cuáles no, un conocimiento esencial si te dedicas a la ciberseguridad.
¿Qué pasos seguir en la codificación para el escaneo de puertos?
Para comenzar, debes crear una nueva carpeta llamada "net" y un archivo nuevo denominado port.go. Este será el esqueleto de tu programa. El paquete main será utilizado para este ejercicio, ya que es el punto de entrada del programa. A continuación, se detalla el proceso para crear el escaneo de puertos.
package main
import (
"fmt"
"net"
)
func main() {
for i := 0; i < 100; i++ {
address := fmt.Sprintf("scanme.nmap.org:%d", i)
conn, err := net.Dial("tcp", address)
if err != nil {
continue
}
conn.Close()
fmt.Printf("Puerto %d está abierto\n", i)
}
}
- Crear un ciclo para escanear puertos: El ciclo se inicializa en cero y continúa hasta llegar al puerto 99.
- Conexiones TCP: Se establece una conexión TCP a cada puerto posible. Si la conexión es exitosa, el puerto se considera abierto.
- Manejo de errores: Si no se puede conectar a un puerto, se omite el error para continuar explorando los siguientes puertos.
- Cierre de conexiones: Es vital cerrar la conexión una vez verificada la apertura del puerto, similar a cerrar archivos abiertos.
¿Qué consideraciones tener al escanear puertos de un servidor?
Cuando se escanean puertos, es crucial entender que esta técnica puede ser vista como un ciberataque si no se lleva a cabo de manera adecuada. Por lo tanto, te ofrecemos algunas recomendaciones clave:
- Utilizar sitios de prueba: Escanea sitios específicamente diseñados para pruebas, como
scanme.nmap.org. - Usar con fines didácticos: Esto debería hacerse en tu propio entorno o en servidores de prueba, nunca en servidores ajenos sin permiso.
- Educación continua: Considera inscribirte en cursos de seguridad informática para entender mejor las implicaciones éticas y legales de estas técnicas.
¿Cuál es el problema del escaneo de puertos de este ejemplo?
Una de las principales limitaciones del primer método de escaneo de puertos es su lentitud. En este caso, se limitaron a escanear 100 puertos, pero el internet abarca hasta 65,535 puertos posibles. Debido a que este proceso es secuencial, puede ser extremadamente ineficiente y demorado.
En futuras sesiones, se puede mejorar la eficiencia al implementar el escaneo de puertos concurrente utilizando 'Gorutinas'. Esto permitirá realizar múltiples escaneos simultáneamente, reduciendo el tiempo total.
Recuerda siempre que el uso ético y responsable del conocimiento es fundamental, así que aprovecha estas técnicas de manera segura y legal.