No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Escaneador de puertos sin concurrencia

14/19
Recursos

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Una recomendación para la vida real, no utilicéis como nombre de variable “i” cuando se hace referencia a puerto, mejor utilizar el nombre “port”. Cuanto más explícito sea el código, más fácil será de leer y entender para el resto del mundo 😃

package main

import (
	"fmt"
	"net"
)

func main() {
	// Escanear cada puerto y hacer una conexión
	for i := 0; i < 100; i++ {
		conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", "scanme.nmap.org", i))
		if err != nil {
			continue
		}
		conn.Close()
		fmt.Println("Port", i, "is open")
	}
}

```txt package main import ( "fmt" "net" "sync" ) func scanPort(wg *sync.WaitGroup, port int) { defer wg.Done() address := fmt.Sprintf("scanme.nmap.org:%d", port) conn, err := net.Dial("tcp", address) if err != nil { return } conn.Close() fmt.Println("Port", port, "is open") } func main() { var wg sync.WaitGroup for port := 0; port < 100; port++ { wg.Add(1) go scanPort(&wg, port) } wg.Wait() } ```
Comparto mi solución aplicando la concurrencia package main import (    "fmt"    "net"    "sync") func scanPort(wg \*sync.WaitGroup, port int) {    defer wg.Done()    address := fmt.Sprintf("scanme.nmap.org:%d", port)    conn, err := net.Dial("tcp", address)    if err != nil {        return    }    conn.Close()    fmt.Println("Port", port, "is open")} func main() {    var wg sync.WaitGroup    for port := 0; port < 100; port++ {        wg.Add(1)        go scanPort(\&wg, port)    }    wg.Wait()}

Por alguna razón cuando intento conectarme al puerto 0 queda cargando, sin tirarme ningún timeout. Para omitir este puerto sin cambiar mucho el código, simplemente arranqué el bucle for desde el indice 1.