2

Я хотел бы видеть пробивание UDP в действии. Я проверил это под Linux, используя Ncat. Вот что я попробовал:

  1. Откройте порт 1234/UDP на хосте A и порт 12345/UDP на брандмауэре хоста B (я все еще за NAT, но если пакет до меня доберется, по крайней мере ядро не откажется от него)
  2. sudo ncat -u -p 1234 B 12345 на хосте A, затем попробуйте отправить пакет, чтобы пробить дыру
  3. sudo ncat -u -p 12345 A 1234 на хосте B, затем попробуйте отправить другой пакет, чтобы пробить дыру
  4. Попробуйте связаться с хостом A к B и наоборот и убедитесь, что ни один пакет не достигает другой стороны.

Что я могу делать не так? Я знаю, что хост A может создать дыру для хоста B, потому что я наблюдал, как это делает P2P-коммуникатор, но я еще не проверял другой способ.

2 ответа2

0

Я бы посоветовал начать с удаления хоста B из межсетевого экрана или с одного NAT на хост B (все протоколы, включая TCP и UDP), чтобы полностью раскрыть его. Или, по крайней мере, выставьте порт 12345/UDP на хосте B. Оставьте хост A внутри брандмауэра, нет необходимости открывать какие-либо порты. Отправляйте пакеты от A к B, затем обратно от B к A. Если A получает UDP-пакеты от B, вы успешно испытали дырокол в брандмауэре хоста A.

Поэтому я советую сначала пробить один брандмауэр.

Я не думаю, что можно пробить дыру между двумя хостами, полностью покрытыми NAT, если только не существует третьего хоста C, который может быть доступен обеим машинам, и не обманывать брандмауэры для пересылки пакетов UDP внутри сети.

надеюсь, это поможет

0

NAT перезаписывает как исходный IP, так и исходный порт. Вы можете спросить сервер STUN, каков ваш внешний IP и порт. К счастью, большинство устройств NAT делают исходный порт предсказуемым. Вы можете убедиться в этом, проверив несколько серверов STUN. Ваш исходный IP и порт должны быть одинаковыми.

Чтобы это работало для вас, оба хоста должны выполнять запросы STUN для получения внешних IP-адресов и портов. NAT перезаписывает исходный порт, поэтому вам не нужно использовать root или устанавливать исходный порт.

A> ncat -u [B external IP] [B external port] пробить отверстие на A
B> ncat -u [A external IP] [A external port] подключить через отверстие на A

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .