0 votos

No se puede abrir un puerto UDP con nc

En ubuntu, puedo abrir un puerto UDP:

nc -lu 5555

A continuación, en otra ventana de terminal, envía un mensaje:

echo "hello" | nc -u localhost 5555

El mensaje se recibe en el lado del oyente, como se esperaba.

Sin embargo, esto no parece funcionar en MacOS (10.14.5). La invocación del oyente se inicia y se bloquea como se espera, y el puerto parece estar abierto, según lsof:

nc      22583 thisuser   3u  IPv4 0x7af131578e7df639      0t0      UDP *:5555

El lado emisor se completa sin errores, pero el mensaje no parece ser recibido en el lado receptor.

Si en su lugar utilizo una escucha y conexión TCP, todo funciona como se espera. Sin embargo, cuando se abre por primera vez la escucha TCP, aparece un mensaje emergente del tipo "¿Permitir que la aplicación nc abra el puerto?". (He olvidado el mensaje exacto - no se vuelve a dar).

Así que sospecho que de alguna manera el SO tiene un gancho de seguridad en los nuevos oyentes; pide permiso con TCP, pero por alguna razón descuida pedir permiso con UDP e implícitamente lo deniega.

¿Cómo puedo conseguir que esto funcione?

1voto

Jason Jarrett Puntos 123

He conectado tcpdump para ver si el lado del remitente está enviando datagramas:

$ sudo tcpdump -i lo0 udp port 5555
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
13:53:29.964728 IP6 localhost.49781 > localhost.personal-agent: UDP, length 6

Se envían datagramas, pero aparentemente como paquetes IPv6. Si fuerzo el funcionamiento IPv4, entonces todo funciona como se esperaba:

$ nc -l -u 5555 &
[1] 25911
$ echo "Hello" | nc -4 -u localhost 5555
Hello

Esto nos lleva a preguntarnos por qué nc -lu abrir un puerto IPv4 por defecto mientras que nc -u utiliza IPv6 por defecto, pero mi problema inmediato ya está solucionado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X