Обход брандмауэра с использованием стороннего поставщика для установления соединения - PullRequest
0 голосов
/ 20 апреля 2011

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

Я думаю о чем-то похожем на Skype, где третья сторона используется для установления соединения между двумя пользователями, но никакие фактические данные не отправляются в третью часть после установления соединения.

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

Как я могу реализовать что-то подобное? Есть ли подходящая терминология для того, что называется этой техникой? Один клиент должен быть написан на Java, но сервер и другой клиент могут быть практически на любом языке, который я хочу.

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

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

Я думаю, что вам нужна терминология " NAT traversal ".Речь идет не столько о брандмауэрах, сколько о преодолении трудностей с достижением определенного узла на другой (частной) стороне устройства NAT (например, кабельного модема, где стороне локальной сети обычно назначается некоторый не маршрутизируемый диапазон адресов, например *).1003 *)

Одна из техник, которая может вам пригодиться, - это пробивание отверстий UDP .Каждая конечная точка может устанавливать исходящие соединения со сторонним сервером, а устройство NAT на каждой конечной точке открывает порты, чтобы разрешить обратный трафик через брандмауэр, и направить его в соответствующий узел локальной сети с каждой стороны.Конечные точки обмениваются информацией о портах через сторонний сервер, а затем повторно используют «дыры», которые они только что «пробили» через устройства NAT, для прямой связи друг с другом с этого момента.

1 голос
/ 20 апреля 2011

Точно так же, как Джим говорит, что это Traversal NAT или STUN. Существует реализация Java, проект больше не поддерживается, но вы можете использовать его для изучения.

http://nutss.gforge.cis.cornell.edu/stunt.php

0 голосов
/ 18 августа 2015

Это зависит от того, что вы хотите !!

Если вы хотите, чтобы это работало только ~ 85% случаев, вы можете использовать сервер STUN!Вот список некоторых бесплатных:

https://gist.github.com/zziuni/3741933

Но для 100% вам также необходимо внедрить сервер TURN (сервер ретрансляции), и это действительно дорого !!Поскольку весь ваш трафик будет проходить через ваш сервер и передаваться клиентам, вы можете увидеть https://www.twilio.com/stun-turn, чтобы увидеть, насколько это дорого, вы также можете развернуть свой собственный, лучшее для меня - https://code.google.com/p/rfc5766-turn-server/

Но это только вершина айсберга !!!!!!!!!

теперь вы знаете, как отправлять данные обмена между клиентами! НО чтобы вы использовали сервер сигнализации для создания сеанса связи, потому что, когда я хочу позвонить вам, вы должны получить уведомление о том, что я пытаюсь вам позвонить.

Тогда еслимы принимаем вызов, нам все еще нужно обменяться тем, как мы будем говорить!почему, потому что, может быть, я могу p2p, но вы не можете, поэтому мы должны использовать сервер ретрансляции.следующий шаг - сказать, что мы собираемся отправить, после всего этого мы начинаем нормально общаться ...

прочитайте о webrtc , чтобы получить лучшее представление о точке

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

...