Programación de red Python (vincular a dirección externa)

Soy un novato en python, y hace solo unos días comencé a probar la programación de redes (también soy un novato allí)

Ahora encontré un buen programa de servidor de cliente que se ejecutaba de manera bastante simple en mi computadora, pero cuando reemplacé las direcciones locales y le dije a mi amigo que ejecutara el script del cliente, simplemente no respondió.

Mi dirección IP global: 120.59.XX.XXX

Mi dirección Ipv4 devuelta por ipconfig: 192.168.1.2 (estoy conectado a Internet a través de un enrutador)

Mi dirección de puerta de enlace: 192.168.1.1

Puerto usado: 1060 (Probé este puerto localmente y no estaba en uso)

#server.py

import socket
import sys

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

MAX = 65535
PORT = 1060

server.bind(('192.168.1.2', PORT))
print 'Listening at', server.getsockname()
while True:
    data, address = server.recvfrom(MAX)
    print 'The client at', address, 'says', repr(data)
    server.sendto('Your data was %d bytes' % len(data), address)

Codigo del cliente :

#client.py

import socket
import sys

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

PORT = 1060
MAX = 65536

client.sendto('Hello Server!', ('120.59.XX.XXX', PORT))
data, address = client.recvfrom(MAX)
print 'The server', address, 'says', repr(data)

Inicié server.py en mi computadora y le dije a mi amigo que iniciara client.py, permití las conexiones entrantes a python a través del firewall, también agregué el puerto 1060 a la lista de conexiones entrantes de Windows.

Todavía no responde, y no puedo descifrar por qué (tengo una dirección IP dinámica, pero para la sesión actual permanece constante y, por lo tanto, debería funcionar, también 1060 es un puerto conocido y no debería ser un problema, ¿verdad? )

preguntado el 22 de mayo de 12 a las 16:05

2 Respuestas

¡Necesita agregar una regla de reenvío de puertos en su enrutador! algo así como desde el puerto 1060 hacia adelante hasta el puerto 192.168.1.2 1060.

contestado el 22 de mayo de 12 a las 16:05

sí, esto es lo que pensé al principio, pero entonces, ¿cómo es que utorrent puede usar puertos sin que yo los reenvíe? y 1060 es bien conocido por SAP: Kartik Anand

Se apaga conectándose a un servidor en algún lugar, es decir, la conexión TCP se inicia desde su PC. - Nikolái Fetissov

Las técnicas NAT a menudo funcionan de manera inteligente. Si una máquina dentro de la red local inicia una conexión, la mayoría de las implementaciones de NAT asignan la respuesta a esta máquina. Si una conexión se inicia desde el exterior, llega inesperadamente (desde el punto de vista del "router"). Si no hay una regla especificada sobre cómo manejar una conexión tan inesperada (como una regla de reenvío de puerto), el enrutador rechaza la conexión. - Dr. Jan Philip Gehrcke

Entonces, si pudiera engañar al enrutador, me refiero a enviar un mensaje aleatorio (o vacío) a cualquier URL por UDP, obtener mi número de puerto aleatorio (que OS asignaría) y luego vincular mi servidor a ese número de puerto. ¿Funcionará? - Kartik Anand

Tu necesitas un reenvío de puerto en el enrutador, que reenviaría las conexiones a la dirección externa (global) del enrutador en el puerto 1060 a la IP de su escritorio 192.168.1.2 puerto 1060.

contestado el 22 de mayo de 12 a las 16:05

Ok, pero si uso un puerto bien conocido, ¿debería funcionar entonces? Porque usé 80 (sé que no debería) y aún así no funcionó. - Kartik Anand

Los puertos bien conocidos como el 80 y el 25 a menudo son bloqueados por los ISP en la entrada. Use un puerto de número alto aleatorio como 42424. - Nikolái Fetissov

Reenvié 1060 a 192.168.1.2 mi IP local y todavía no funciona. - Kartik Anand

El enrutador puede asumir TCP cuando realiza el reenvío de puertos. Vea si hay una opción allí para habilitar UDP, lo que está tratando de hacer. - Nikolái Fetissov

Otras dos cosas para verificar: si el firewall local en la PC con Windows permite la entrada de udp: 1060, y si tiene alguna capacidad de registro en ese enrutador, vea si realmente está recibiendo esos paquetes de su amigo (pueden ser filtrados / soltados en otro lugar) . - Nikolái Fetissov

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.