No tengo acceso a, netcat
o nmap
eso estoy tratando de usar, bash
y los /dev/udp/
archivos especiales para probar los puertos.
Podría hacer algo como:
echo "" > /dev/udp/example.com/8000
Pero $?
siempre es 0
cuando se usa UDP. ¿Supongo que es porque ese es el valor de retorno del echo ""
comando correcto?
Básicamente estoy tratando de replicar lo que puedo hacer nmap
y netcat
:
nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'
¿Cómo haría esto /dev/udp
?
bash
networking
devices
Belmin Fernandez
fuente
fuente
Respuestas:
Para tcp, solo verificando
$?
. Si la conexión falla,$?
no será0
:Tomará tiempo
bash
darse cuenta de que la conexión falló. Puedes usar el tiempo de espera de para activarbash
:Probar el puerto udp es más complejo.
Estrictamente hablando, no hay un estado abierto (por supuesto, udp es un protocolo sin estado ) con udp. Solo hay dos estados con udp, escuchando o no . Si el estado no es , obtendrá un destino ICMP inalcanzable .
Desafortunadamente, el cortafuegos o el enrutador suelen descartar esos paquetes ICMP, por lo que no estará seguro de qué estado del puerto udp.
fuente
En general, no puedes.
A diferencia de TCP, UDP no tiene conexión. No puede detectar que un puerto está abierto simplemente haciendo una conexión de no hacer nada como lo puede hacer con TCP. Por el contrario, debe enviar datos al puerto y ver qué sucede, y los detalles de UDP implementados en el mundo real dificultan la interpretación de los resultados. Incluso herramientas sofisticadas de nivel de paquete como
nmap
no pueden decir con certeza si hay un programa escuchando un determinado puerto UDP.nmap
clasifica los puertos UDP en tres grupos:nmap
simplemente no ha descubierto cómo obtener una respuesta; tal vez el usuario tuvo mala suerte y todos los paquetes se perdieron en tránsito.fuente
nmap
. Gracias, esto aclara mucha confusión.