Руководство по пробивке отверстий UDP - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь поэкспериментировать с дыроколом UDP, чтобы попытаться соединить 2 компьютера. 2 компьютера, которые я пытаюсь подключить, находятся на 2 разных Wi-Fi, созданных одним и тем же маршрутизатором. Позвольте мне назвать эти компьютеры C1 и C2. Поэтому я хочу создать связь между C1 и C2. У меня есть 2 общедоступных IP-адреса сервера, на которых я запускаю сервер прослушивания UDP. Этими серверами являются S1 и S2.

Эксперимент 1:

  1. Отправка UDP-пакета из C1 в S1 и печать IP-адреса и порта входящего пакета. Я получаю IP_C1 и PORT_C1.
  2. Отправить сообщение обратно в C1 с S1, используя IP_C1 и PORT_C1. Это работает нормально, как ожидалось, и он остается подключенным. Таким образом, я уже пробил дыру в S1 для прямой связи с C1.

Эксперимент 2:

  1. Отправка UDP-пакета из C1 в S1 и получение IP_C1и PORT_C1.
  2. Отправьте пакет UDP из C2 в S1 и получите IP_C2 и PORT_C2.
  3. Используйте S1 для отправки сообщения обратно в C1, используя IP_C1 и PORT_C1. Это работает, как и раньше.
  4. Используйте S1 для отправки сообщения обратно в C2 с использованием IP_C2 и PORT_C2. Это также отлично работает.

Так что теперь и C1, и C2 доступны из S1. ПРИМЕЧАНИЕ. Я вижу, что IP_C1 и IP_C2 одинаковы, поэтому давайте назовем их IP_C. Однако порты различны.

Продолжая это, я попытался отправить сообщение из C1 в C2, используя IP_C и PORT_C2 в качестве пункта назначения. C2 не получил сообщение, как ожидалось, затем я отправил сообщение из C2 в C1, используя IP_C и PORT_C1. Вот где я начинаю застрять: я ожидал, что теперь сообщение C2 достигнет C1, поскольку C1 уже пробил дыру в NAT, идущем к C2. Но С1 не получает сообщение. Продолжая, если я сейчас отправлю еще одно сообщение от С1 и С2. С2 не понимает. Но даже сейчас, если я отправляю сообщение с S1 на C1 или C2, оно работает.

Эксперимент 3:

Чтобы проверить, поддерживаются ли IP и порт, когда клиент отправляет другой пакет UDP, который я сделалследующее:

  1. Отправка пакета UDP от C1 до S1 и получение IP_C1 и PORT_C1.
  2. Отправка пакета UDP от C2 к S1 и получение IP_C2 и PORT_C2.
  3. Отправьте UDP-пакет из C1 в S2 и получите IP_C1_S2 и PORT_C1_S2.
  4. Отправьте UDP-пакет из C2 в S2 и получите IP_C2_S2 и PORT_C2_S2.

Как и S1, S2 такжелегко подключается, и я вижу IP_C1 = IP_C1_S2 = IP_C2 = IP_C2_S2 = IP_C и PORT_C1 = PORT_C1_S1 и PORT_C2 = PORT_C2_S2.

Таким образом, порты поддерживаются.

Даже в этом сценарии я не могуустановить связь между C1 и C2. Я использую библиотеку luasocket для отправки пакетов udp и проведения экспериментов. Если кто-нибудь может помочь мне сориентироваться в том, какие другие эксперименты я могу сделать, чтобы сделать это успешно, это было бы очень признательно.

Спасибо

...