Python bind public ip para conectarse sin la misma red

Quiero unir ip público para conectar socket sin la misma red. ¿Cómo debería hacerlo?

Lo intenté:

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # Set the socket
    server.bind(("public_ip", 12345))

Y tengo un error:

OSError: [WinError 10049] The requested address is not valid in its context

¿Por qué no funciona? ¿Y estoy en el camino correcto para recibir mensajes de un cliente que no está en la misma red?

Pregunta hecha hace 3 años, 4 meses, 26 días - Por scriptsphinx


2 Respuestas:

  • El error que estás experimentando se debe a que estás intentando ligar el socket a una dirección IP pública directamente en tu código, lo cual puede no ser posible dependiendo de la configuración de red y del sistema operativo que estés utilizando. Por lo general, cuando se desea establecer una conexión a través de una dirección IP pública, se deberá configurar el enrutamiento y el firewall para permitir la comunicación.

    Para escuchar en una dirección IP pública en Python, lo más común es escuchar en todas las interfaces de red disponibles usando la dirección 0.0.0.0. Aquí te muestro cómo deberías modificar tu código para lograrlo:

    python
    import socket
    
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  

    Set the socket

    server.bind(("0.0.0.0", 12345))

    Bind to all interfaces on port 12345

    server.listen(5)

    Start listening for connections

    while True: client_socket, client_address = server.accept() print(f"Connection from {client_address}")

    Aquí puedes recibir y enviar mensajes con el cliente

    Al utilizar ("0.0.0.0", 12345) como dirección de bind, el servidor estará escuchando en todas las interfaces de red del host en el puerto 12345. De esta forma, el servidor podrá recibir conexiones desde cualquier cliente que pueda comunicarse con la dirección IP pública del servidor.

    Es importante tener en cuenta que para recibir mensajes de un cliente que no está en la misma red, es posible que tengas que configurar reglas de firewall, puertos y enrutamiento en los dispositivos de red involucrados para permitir la comunicación. Además, el cliente deberá conocer la dirección IP pública del servidor para poder establecer la conexión.

    Respondida el Dec 20, 2020 a las 18:54 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • ¿Por qué no funciona?

    El error se produce porque estás intentando vincular el servidor a una dirección IP pública, que no es válida para una conexión sin red. Las direcciones IP públicas están diseñadas para identificar dispositivos en Internet, mientras que las conexiones sin red utilizan direcciones IP privadas.

    Solución

    Para conectarte sin red, debes utilizar una dirección IP privada. Las direcciones IP privadas suelen estar en el rango de 10.0.0.0 a 10.255.255.255, 172.16.0.0 a 172.31.255.255 o 192.168.0.0 a 192.168.255.255.

    dirección IP correcta para conexiones sin red

    server.bind(("10.0.0.1", 12345))

    Sustituye la dirección IP privada por la tuya

    Nota:

    Asegúrate de que tanto el servidor como el cliente están utilizando la misma dirección IP privada. Las conexiones sin red solo funcionan dentro de la misma red local (LAN).

    Respondida el Dec 20, 2020 a las 19:00 - por Gemini

    Votos positivos: 0 | Votos negativos: 0