Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Соеденить 2е машины за NATами


Автор: Kipter 13.4.2009, 01:45
Есть проблема, есть клиент-серверное приложения на 2х компах, они должны както связаться между собой но оба компьютера находяться за NATами, т.е име.т маскарадный IP и до них из интернета не достучаться, установить соеденинение могут только они. Но в данной ситуации не одна из машин не сможет войти в прослушивание =(

Какие есть варианты?

- Вариант с прокси проблематичен, т.к у меня нет своего прокси сервера, бесплатные нестабильны сегодня етсь завтра их нет, а платные - я не хотел бы деньги на это тратить
- Вариант поставить сервер посредник также отпадает у меня нет выделенного сервера в сети интернет.

А располагаю я только Хостингом с PHP и Perl скриптами, но общаться через скрипты постоянно делая запрос к серверу - слишком медленно для меня.

Автор: Kipter 13.4.2009, 02:06
И дополнительный вопрос по этойже теме:

если только одна машина за NATом, возможно ли ей каким-нибудь способом слать данные по UDP?
Ведь UDP не устанавливает соеденения... и поидее Маршрутизатор NAT просто не будет знать кому слать пришедшие данные, ведь в его таблицах нет информации о соеденении...
либо я сам овтетил на свой вопрос, либо я ошибаюсь и выход какой-нибудь есть.

Автор: Rickert 13.4.2009, 03:37
А настроить NAT'а нельзя? Чтоб с определённого порта слал на опред. тачку данные.

Автор: Kipter 13.4.2009, 06:48
Увы нет еслибы все так было "просто" я бы так и сделал.
Но тут просто проблема множества разных провайдеров которые используют NAT.

А программам надобы доконнектиться к друг другу =(

Я вообщемто уже полистал множество "литературы" и по моим личным выводам - соеденить 2 NAT клиента - невозможно, ибо чтобы NAT пропустил пакеты с информацией к клиенту - в его таблицах должна быть соответствующая запись, а чтобы клиенту эту запись создать нужно подключиться к серверу имеющему прямой IP =( 
А даже если 2 клиента подключаться к глобальному 1 серверу, то как связать их сокеты и заставить обмениваться данными уже напрямую - хз, а скорее всего и вовсе невозможно... ведь в таблице переадресации указан IP сервера и на IP клиента его сервер не перепишет.....

Вообщем я поднял тему либо чтобы подтвердили мою правоту, либо подсказали извращенский способ о котором я еще невкурсе.

Автор: Comm 14.4.2009, 02:32
Цитата

А даже если 2 клиента подключаться к глобальному 1 серверу, то как связать их сокеты и заставить обмениваться данными уже напрямую - хз, а скорее всего и вовсе невозможно... ведь в таблице переадресации указан IP сервера и на IP клиента его сервер не перепишет.....

Ну почему,я думаю что ICQ при передаче файлов так и работала,иначе зачем было выводить аллерт "Внимание отправитель может узнать ваш ай пи адрес" или что то такое =)) отсюда вопрос,если отправляемый файл проходил бы через сервер ICQ зачем тогда показывать ай пи принимающей стороны.

Отсюда и выводы что ICQ проходит как посредник соединитель..ИМХО

Цитата

ведь в таблице переадресации указан IP сервера и на IP клиента его сервер не перепишет.....

Во всяком случае можно попробовать к примеру с помощью WinPCAP(если конечно клиент и сервер является вашим продуктом)

Автор: XapoH 24.5.2009, 10:28
Для таких ситуаций существуют решения по-типу http://ru.wikipedia.org/wiki/STUN

Автор: Comm 24.5.2009, 15:47
Спасибо,полезная ссылка)

Автор: jonie 25.5.2009, 21:49
stun часто вероломно режется 8(
почитайте как работает скайп, вот его "хрен остановишь" ... да простят меня за оффтопный сайт: http://www.xakep.ru/post/38543/default.asp  вот примерное описание "как".

Автор: chekist 26.5.2009, 22:49
Можно воспользоваться программой hamachi. 
Прога устанавливает виртуаьльный драйвер сетевой карточки, и создает виртуальную локальную сеть.
Т.е. два компа будут соединяться так же, как и по локалке (с локальными IP, выделенными hamachi), хотя физически трафик пойдет по инету.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)