|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
P2P соединение через nat28.10.2018, 16:04. Показов 6029. Ответов 17
Ситуация такова:
Есть 2 компьютера за натами, между которыми хочу пересылать данные по UDP протоколу. Сначала оба компа стучаться на stun-сервер и получают свой ip и открытый порт. После эти данные я кидаю другу просто через ВК, и он посылает мне несколько пакетов по этим данным, но в итоге ничего не приходит. Самое странное, что таким же образом я делаю запрос к stun серверу и то, что присылает он, я могу поймать, а вот от друга ни писка. Можете подсказать с чем это может быть связано? Код проверял уже миллион раз, если отсылать пакет самому себе на localhost, он приходит, но вот с внешнего компа ничего.
0
|
|
| 28.10.2018, 16:04 | |
|
Ответы с готовыми решениями:
17
Соединение через SOCKS4 Создать прямое соединение через сеть интернет Искажение данных при передаче через TCP соединение. Winsock |
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 28.10.2018, 22:01 | |
|
Например симметричный nat или таймаут. Убирайте лишнее звено в виде ВК, соберите тестовый стенд. Без кода можно только гадать.
0
|
|
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
| 30.10.2018, 21:09 [ТС] | |
|
Nat 100% не симметричный, потому что ответ от stun-сервера приходит.
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 30.10.2018, 22:07 | |
|
А чего ему не приходить-то при абсолютно любом типе NAT???
0
|
|
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
| 30.10.2018, 22:59 [ТС] | |
|
К вопросу о пробитии симметричного nat'а. На него не проходит, потому что не пробивает. Можно конечно перебирать все порты, но это как-то не круто.
https://habr.com/post/150298/
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 30.10.2018, 23:24 | |
|
Путаете теплое с мягким.
Вы посылаете запрос к любому сервису на любой публичный адрес (не важно что именно там, STUN/DNS/что-то еще), получаете ответ с _этого_ адреса от _этого_ сервиса. Ни какого "пробития" тут нет. Это штатный режим работы любого NAT.
0
|
|
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
| 31.10.2018, 00:22 [ТС] | |
|
Сам сервис пробивает nat при отсылке ответа. Иначе бы как он отвечал бы. Бьюсь то через UDP. Да и как я читал, stun сервер так и определяет тип нат, что пробует все 3 варика, и по которому проходит и приходит ответ. Если не проходит, значит nat симметричный
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||
| 31.10.2018, 10:14 | |||
|
1. ответь с того же адреса и порта куда я послал запрос 2. ответь с другого адреса и порта. 3. ответь с этого же адреса, но поменяй порт. Для определения типа NAT тебе нужно сделать от 1го (udp вообще не проходит) до 4х запросов. Почему-то из твоих постов мне видется, что дело ограничивается одним запросом на биндинг... Что бы не переливать из пустого в порожнее нужно показать код или хотя бы .pcap трафика.
0
|
|||
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
| 31.10.2018, 17:03 [ТС] | |
|
Я не являюсь stun-сервером. а посылаю запрос к готовому, публичному. С ним связь установить могу, а вот с другом нет.
Вот код: https://github.com/buridan1999/UDP_Net
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||
| 31.10.2018, 17:43 | |||
|
Складывается впечатление, что послав этот 1 запрос, вы ждете что остальное кто-то (сервер?) сделает за вас. Это не так. Нужно ручками.
0
|
|||
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
| 31.10.2018, 19:04 [ТС] | |
|
Я в этом коде делаю запрос к stun серверу, получаю свой глобальный ip с открытым портом и пересылаю их собеседнику, тот вводит их и отсылает UDP пакет, а я его принимаю. Но ничего не приходит? Пробитие делает сервер stun и присылает мне адрес по которому можно пробиться ко мне. И используя их я уже знаю по какому адресу, и на какой порт мне слать пакет.
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 31.10.2018, 19:16 | |
Сообщение было отмечено buridan как решение
Решение
buridan, Мы пошли на второй или третий круг.
Нужно сесть и прочитать rfc на STUN протокол. Лучше весь, но для начала хватит главы описывающей "discovery process" Потом сделать так, как там написано, а не так как вам видеться/хочется.
0
|
|
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
| 31.10.2018, 19:52 [ТС] | |
|
Я брал информацию с этого сайта. Получается там она ошибочная?
https://voipnotes.ru/protocol-stun-p1/
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 31.10.2018, 20:00 | |
|
buridan, просто далеко не полная.
Писать много, но позже я постараюсь обрисовать процесс. Если коротко, то вы делаете только 1й шаг для определения типа НАТ, что возвращает нас к посту #2
1
|
|
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
| 31.10.2018, 21:01 [ТС] | |
|
Я понял. Просто только начал курить эту тему, буду очень благодарен за помощь.
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 31.10.2018, 22:43 | |
Сообщение было отмечено buridan как решение
Решение
Как я уже писАл, вы делаете только 1 тест - определяете mapped-address (свои ip
ort) на самом "дальнем" (их может быть много по пути) NAT.Далее вам нужно определить пропустит ли NAT/файрвол пакет с другого адреса и/или порта, ведь у вашего друга, покрайней мере адрес не совпадает с адресом STUN сервера. Для этого нужно отправить STUN серверу еще один запрос, но с установленными флагами "ответь с другого ip и порта". Если ответ пришел, то все хорошо (это 99% не ваш случай) и можно сообщать свои ip ort из 1го запроса другу. Если ответа нет, то повторяем 1й тест, но отправляем не на исходные адрес:порт, а на changed-address полученные в ответ на 1й запрос. Если ответа не пришло, то все плохо. Сверяем mapped-address из этого ответа с mapped-address из 1го ответа - если различаются то у вас симметричный NAT. Если же совпадают то нужно сделать еще один запрос с установленным флагом "ответь с другого порта", если ответ пришел - restricted NAT, не пришел - port restricted. Если коротко, то как-то так.
0
|
|
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 53
|
|
| 01.11.2018, 14:14 [ТС] | |
|
Дописал код, и на CHANGE_REQUEST ответа не приходит, после этого шлю CHANGE_ADDRESS, и тут тоже пусто. Всё, это смертный приговор? Я очень надеюсь, что это я в коде налажал...
код обновил https://github.com/buridan1999/UDP_Net Добавлено через 25 минут Читаю здесь варианты событий [Figure 2] : https://tools.ietf.org/html/rfc3489#section-11.1 После первого запроса, если ответ не пришёл, то блочится UDP, а если пришёл там ещё сверяют какой-то ip same? А с чем его сверяют, мы же сделали только один запрос, и в ответ пришёл только один IP? Или это для случая, когда вообще нет nat? Добавлено через 6 минут У меня ответ приходит, значит по Figure 2 я попадаю на Test II ( после same_ip = NO ), ответ опять не приходит значит точно не FullCOne nat, опять Test I и тут мне ответ тоже не приходит, но там даже нету такого ромбика с проверкой пришёл ответ ли нет... Добавлено через 8 минут А неее, я понял,у меня вроде PortRestricted NAT! А он уже пробивается UDP Holepunch'ингом, да?
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||||
| 01.11.2018, 15:02 | |||||
|
Я бы посоветовал собрать тестовый стенд на виртуалках и тренироваться на нем, так вам будет гораздо удобней.
0
|
|||||
| 01.11.2018, 15:02 | |
|
Помогаю со студенческими работами здесь
18
Java P2P, построение скоростного решения для соединение 2 клиентов поверх Nat Как настроить соединение через NAT? Соединение клиентов за NAT-ом напрямую, получая координаты через посредника Соединение двух ПК за NAT Как реализовать соединение двух машин в Интернете, находящихся за NAT'ом? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|