@AlexGenesis

Почему не работает UDP hole punching?

Добрый день, есть попытка собственной реализации UDP-hp, но не работающия, буду благодарен за любой ответ.
Код:
Server:
import socket
from pickle import dumps

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("192.168.0.122", 4545))

msg, addr1 = sock.recvfrom(1024)
msg, addr2 = sock.recvfrom(1024)

sock.sendto(dumps(addr2), addr1)
sock.sendto(dumps(addr1), addr2)

Client(идентичный код для обоих клиентов):
import socket
from pickle import loads

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("192.168.0.122", 50000(и 50001 для второго клиента)))


server = ("Белый ip адрес сервера", 4545)
sock.sendto("Hi".encode(), server)

msg, addr = sock.recvfrom(1024)

another = loads(msg)

sock.settimeout(0.1)

while True:
    try:
        sock.sendto("Hello".encode(), another)
        cl, ms = sock.recvfrom(1024)
        print(cl.decode())
    except socket.timeout:
        continue


На сервере порт 4545 переброшен.
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Zolg
У вас все трое на одной машине работают ? Не очень понятно - какого вы эффекта тогда добиться пытаетесь и в каком именно месте нат пробить. нарисуйте себе пути пакетов, особенно через правила фаервола на маршрутизаторе.

Ну и дааалеко не каждый нат пробивается таким наивным способом. Если говорить о провайдерских, то скорее - почти никакой
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы