Concurrencia en Go: Escáner de Puertos Eficiente y Personalizable
Clase 15 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
07:45 min - 15

Concurrencia en Go: Escáner de Puertos Eficiente y Personalizable
Viendo ahora - 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 mejorar el rendimiento del escáner de puertos implementando Go rutinas?
Optimizar el rendimiento del escáner de puertos utilizando Go puede ser un desafío, especialmente cuando se busca escanear una cantidad considerable de puertos con rapidez. La clave radica en implementar Go rutinas adecuadamente para obtener mejor concurrencia. En este artículo, exploraremos cómo puedes usar Go rutinas, junto con WaitGroups, para maximizar la eficiencia de tu escáner de puertos.
¿Qué cambios se realizan en el código existente?
Para empezar, se necesita crear un WaitGroup que funcione junto con las Go rutinas. Esto permitirá dividir el escaneo en varias tareas pequeñas que se ejecutan de manera concurrente.
- Definir un WaitGroup: Este se utilizará para manejar el ciclo de vida de las Go rutinas.
- Anidar el código en una función anónima: Introducir una función anónima que reciba el puerto a escanear como parámetro.
var wg sync.WaitGroup
for i := 1; i <= 100; i++ {
wg.Add(1)
go func(port int) {
defer wg.Done()
// Código de escaneo del puerto
...
}(i)
}
wg.Wait()
¿Cuáles son los errores comunes en la implementación de Go rutinas?
Un error común al implementar Go rutinas es no gestionar correctamente el WaitGroup dentro del bucle for, colocando el wg.Wait() dentro de este. Esto bloquea la ejecución de las rutinas concurrentes.
¿Cómo evitarlo?
- Mueve
wg.Wait()fuera del buclefor: Esto garantiza que todas las rutinas se ejecuten de manera concurrente sin bloqueos.
for i := 1; i <= 100; i++ {
...
}
wg.Wait() // Fuera del bucle
¿Cómo introducir parámetros en el programa usando flags?
Go proporciona un paquete flag que permite introducir parámetros dinámicos, ofreciendo así más flexibilidad al programa. Por ejemplo, puedes establecer el sitio web a escanear como un argumento del programa.
Implementación de flag:
- Crear una nueva variable
sitepara almacenar el flag.
site := flag.String("site", "defaultsite.com", "URL del sitio web a escanear")
- Parsear los flags antes de utilizar la variable
site.
flag.Parse()
- Utilizar
*sitecada vez que se necesite el valor del flag.
¿Cómo ejecutar el programa con nuevos parámetros?
Puedes ejecutar tu programa pasando el parámetro de sitio web deseado de la siguiente manera:
go run netyport.go -site=scanme.webscantest.com
Con estas mejoras, se logra no solo un escaneo concurrente, sino también la capacidad de personalizar dinámicamente la URL que se quiere analizar. Este enfoque no solo ofrece rapidez y eficiencia al escáner de puertos, sino que también lo hace extensible y adaptable para escanear diferentes sitios web a través de un simple flag de configuración. Sigue experimentando con Go y sus poderosas herramientas de concurrencia.