0 votos

¿No se puede recibir UDP excepto en `localhost`?

Supongamos que tengo un servidor UDP:

import socket

ls = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ls.bind(('0.0.0.0', 12001))
while True:
    print('{!r}'.format(ls.recvfrom(100)))

Si intento enviar a este servidor con:

import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b'Test.', ('192.168.1.154', 12001))

Recibo un envío exitoso, pero nunca se emite nada desde el cliente. No importa si el paquete se envía localmente, o desde otra máquina en la LAN, o desde una máquina en Internet (con el reenvío de puertos configurado en el enrutador): nunca se recibe nada.

Si lo envío en localhost, recibo el paquete:

client.sendto(b'Test.', ('127.0.0.1', 12001))

Ese paquete se emite en el servidor.

Cambiar el puerto no cambia nada / Estoy eligiendo específicamente el 12001 para que sea poco probable que colisione. (Pero este es también el tercer puerto de este tipo que he elegido.)

Esto parece indicar que macOS tiene algún firewall en algún lugar, pero ¿dónde?

(a. nota que estamos enlazando a todas las interfaces en el servidor UDP. b. incluso si me enlazo a la interfaz específica, no ocurre nada, aunque el sendto a localhost ya no funciona en ese caso, como uno esperaría. c. Puedo ver los paquetes UDP llegando en Wireshark, así que no es un problema de conectividad)

1 votos

Comienza asegurándote de que el firewall esté deshabilitado pfctl -d. No está habilitado por defecto, pero en algún momento podría haber sido habilitado.

0 votos

Lo deshabilité con pfctl -d, pero no hubo ningún cambio en el comportamiento, sin embargo, estaba habilitado.

1voto

Kou Puntos 707

Tuve una situación similar cuando intentaba usar un appliance virtual alojado en un servidor ubuntu. Es probable que el problema sea un firewall de software. Busca usar ipfw en tu dispositivo mac. Es similar a iptables en linux.

0 votos

Parece que macOS desechó ipfw hace algún tiempo. pf parece ser lo nuevo; AFAICT, no tiene reglas, aunque si alguien puede proporcionar un comando más directo que lo confirme de alguna manera, puedo publicarlo.

0 votos

Ver mi comentario en la pregunta @Thanatos. El comando para desactivar pf es pfctl -d.

0voto

fafanoulele Puntos 46

TL;DR: JAMF.

Aparentemente hay dos firewalls en macOS? Hay pfctl, comentado anteriormente, que no era mi problema. También está esto:

root# /usr/libexec/ApplicationFirewall/socketfilterfw --getblockall
Firewall settings cannot be modified from command line on managed Mac computers.

Ese es un mensaje que suena muy insubordinado, por supuesto.

Esto parece ser la versión de CLI de Configuración del Sistema → Red → Cortafuegos. En mi caso, el "Cortafuegos" está habilitado, y el interruptor está gris, y el botón de "Opciones" está deshabilitado, sin una forma clara de habilitarlos. (Hay rumores en Internet de que debes hacer clic en un ícono de "bloqueo"; no hay tal ícono de bloqueo. Hay otros rumores de que necesitas ser un admin, bueno, yo soy un admin.)

En mi caso, parece estar deshabilitado porque está siendo gestionado por JAMF, aunque sería bueno si la UI de macOS simplemente lo mencionara. Puedes ver esto (¡sin root!) a través de Configuración del Sistema → Privacidad y Seguridad → Perfiles, y ahí, en mi caso, está "Seguridad y Privacidad - Cortafuegos (2 Configuraciones)", y luego en eso: "Cortafuegos: Habilitado" y "Bloquear todas las conexiones entrantes: Habilitado"

Ahora, por supuesto, UDP no tiene concepto de una "conexión". Lo que parece suceder aquí es que todos los paquetes UDP entrantes son rechazados, a menos que haya habido un paquete saliente al mismo IP/puerto dentro de un marco de tiempo reciente y no especificado.

Entonces, todo lo que hay que hacer para permitir los paquetes entrantes es simplemente enviar un paquete. En mi caso, el extremo de origen simplemente ignora el paquete falso de apertura de puerto.

(... Soy ingeniero de software, y la misión de hoy implica directamente intentar integrarme con un servicio de UDP en la nube. Entonces... sí.)

0 votos

JAMF es un producto de MDM (Gestión de Dispositivos Móviles) que su empresa (a través del departamento de informática) ha implementado para garantizar el cumplimiento de las políticas. En este caso, han bloqueado la red a todo tráfico desconocido. No hay forma de evitar esto. Debe hacer que su personal de soporte de TI implemente una política para abrir estos puertos para usted.

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