@aarifkhamdi

Как сделать прямое соединение (NAT'ы)?

Изучаю сетевое программирование. Вообще не шарю. Объяснять поподробнее, пожалуйста.
Собственно, вопрос в заголовке.

Соединиться с сервером, вроде бы, проблем не доставляет. Нахождение за NAT'ом клиента - его проблемы.
А вот в ситуации когда оба клиента за NAT'ом что делать? Как получить их адреса? Куда стучаться для установления связи?

Вообще возникло ощущение, что сокеты - слишком низкоуровневый инструмент для сетевого взаимодействия. Верно ли это? Или я просто не знаю что гуглить... Если верно, посоветуйте актуальные с++, python библиотеки.
  • Вопрос задан
  • 764 просмотра
Пригласить эксперта
Ответы на вопрос 4
Jump
@Jump
Системный администратор со стажем.
Как сделать прямое соединение (NAT'ы)?
Никак, если нет белого адреса, либо посредника с белым адресом.
Ответ написан
vesper-bot
@vesper-bot
Любитель файрволлов
Почитайте в сторону STUN в этом случае. Нужен пир с белым адресом, который выполняет для такого соединения работу организатора. В противном случае - никак.

Насчет сокетов - нет, самое то. И именно с этой целью просят для сервера белый IP-адрес, если не дают, можно просить организовать проброс порта через NAT с какого-либо адреса (скажем, запрос на 1.2.3.4:9999 на роутере 1.2.3.4 передается на 172.16.3.4:12345, где уже стоит сервер и слушает порт).
Ответ написан
dio4
@dio4
team leader, system engineer, master of sports
Делать так. На том сервере КУДА надо, выделяете отдельный порт (например 7777) и на него шлете свои пакеты. А там на серваке просите админа, чтобы он перенаправлял входящие на этот порт на ШТАТНЫЕ порты машинок из ЛВС(например на 80). Вот и все. Те вы шлете (предположим) свои TCP на порт 7777, а сервак их пробрасывает на локальные тачки на 80-й штатный порт. И если там у кого -то httpd пашет, то он вам ответит и вы получите его отклик.
Просто как пример для RDP и Radmin на FreeBSD
тут
И я прошу прощения, может прежде чем программирование сетей пытаться поднять(IMHO это не просто), сначала просто с сетями разберетесь? Хотя дело не мое.
Ответ написан
Комментировать
@sled
1. Получить внешний IP адрес и порт для ПК1 и ПК2
2. Через общий аккаунт соцсети (ВК) обменяться IP адресами и портами
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы