В настоящее время я работаю над созданием программы путаницы UDP в Python. До сих пор мне удалось успешно получить свой общедоступный IP -адрес и общедоступный порт, используя STUN Server с Pystun3. Я также использую онлайн-сайт на базе JSON в качестве сервера Rendezvous. Все до этого момента функционирует хорошо - оба клиента могут загрузить свою соответствующую публичную информацию о IP и общедоступном порте на сервер и извлечь подробности другого клиента. Я пытаюсь выполнить фактический удар UDP. На каждом клиенте я создаю розетку и связываю его с частным IP и общедоступным портом клиента (как обнаружено с помощью STUN Server). Затем я создаю ветку, посвященную прослушиванию в розетке и ожидании входящих пакетов. Одновременно другой поток непрерывно отправляет пакеты UDP в общедоступный IP и общественный порт другого клиента, с небольшой задержкой между каждой отправкой. Один и тот же сокет используется как для отправки, так и для получения пакетов, и он связан с частным IP и общедоступным портом. Этот процесс происходит у обоих клиентов одновременно. < /P>
Используя Wireshark, я вижу, что пакеты отправляются с каждого компьютера. однако, они, по -видимому, не появятся - ни в программе принимающего клиента, ни в самой сети (как подтверждено Wireshark) .
на Wireshark, I может убедиться, что каждый пакет отправляется в правильный публичный IP и публичный порт другого клиента. Исходный порт соответствует публичному порту отправки компьютера, как идентифицировано сервером STUN. Я также подтвердил, что IP -адрес назначения является фактическим публичным IP -адресом другого клиента, используя онлайн -инструменты, подтверждая, что они правильные. Основываясь на моем понимании удара в отверстиях UDP, эта установка должна работать. Я знаю, что пуншинг UDP Hole не работает с симметричными Nats, но Pystun3 указывает, что у меня есть полный конный NAT, и checkmynat.com предлагает, чтобы у меня был ограниченный порт Cone Nat. Следовательно, не кажется, что тип NAT является проблемой. Я также попытался отключить брандмауэры на обоих клиентах, но пакеты все еще не прибывают. < /P>
Это код: < /p>
import socket
import threading
import time
PRIVATE_IP = None #replace with private ip
PUBLIC_IP = None #replace with public ip
PUBLIC_PORT = None #replace with public port
TARGET_IP = None #replace with other client's public ip
TARGET_PORT = None #replace with other client's public port
SOCK = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)
def start_udp_communication_new():
SOCK.bind((PRIVATE_IP, PUBLIC_PORT))
SOCK.sendto(b'punch',(TARGET_IP, TARGET_PORT)) #Sends to the other client
print("sent punch packet")
listener_thread = threading.Thread(target=listen, daemon=True)
listener_thread.start()
while True:
SOCK.sendto(b'hello',(TARGET_IP, TARGET_PORT)) #Sends packet to other client
print(f"Sent message to {TARGET_IP} at port {TARGET_PORT}")
time.sleep(0.1)
def listen(): #Listens continuously
while True:
data, addr = SOCK.recvfrom(1024)
print(f"Received message: {data} from {addr}")
def main():
start_udp_communication_new()
if __name__ == "__main__":
main()
< /code>
Таким образом, чтобы не перегружать, я не включил функции, которые получают информацию от STUN Server, или на сервере Rendezvous, потому что я знаю, что они работают. Чтобы запустить код, вы можете получить частный IP -адрес с помощью таких инструментов, как iPconfig. Чтобы получить порт и публичный IP, вы можете использовать эту функцию: < /p>
import stun
def get_stun_info():
nat_type, public_ip, public_port = stun.get_ip_info()
print(f"Nat type: {nat_type}, Public IP : {public_ip}, Public port: {public_port}")
< /code>
Альтернативно, для публичного IP вы можете использовать такие инструменты, как этот. < /p>
Я экспериментировал с несколькими вариациями этого кода, но они Все дают один и тот же результат. Я бы очень признателен за любые рекомендации или предложения о том, как решить эту проблему.
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... connection
Почему UDP -дырочные пакеты успешно установили соединение? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Отбрасываются ли пакеты UDP, если контрольная сумма заголовка UDP неверна?
Anonymous » » в форуме C++ - 0 Ответы
- 49 Просмотры
-
Последнее сообщение Anonymous
-