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
, sí 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.