Как подключить двух клиентов за брандмауэрами? - PullRequest
6 голосов
/ 19 августа 2009

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

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

Ответы [ 5 ]

6 голосов
/ 19 августа 2009

Существует метод, используемый многими клиентами, который называется «удержание булавки»:

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

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

5 голосов
/ 19 августа 2009

Я использовал программу под названием Hamachi , которая немного похожа на одноранговую виртуальную сеть (виртуальная сеть-сеть). Затем я написал клиент-сервер приложений как есть. Это был быстрый способ получить функциональность подключения через Интернет без хитрости, необходимой для работы с маршрутизаторами NAT.

Если вам нужно сделать это «правильно», одним из распространенных методов является пробивание дырок udp . Когда вы отправляете веб-запрос, ваш брандмауэр знает, что нужно получить ответные данные. Хитрость в том, что и клиент А, и клиент Б связываются с сервером в Интернете. Сервер передает подробности запроса клиента A, выполненного клиенту B, и наоборот. Как только начальное соединение установлено, они могут продолжить связь, даже если основного сервера больше нет.

0 голосов
/ 19 августа 2009

Если оба клиента находятся за брандмауэром, который не был проколот, и программное обеспечение VPN не используется, они обмениваются данными через сторонний сервер. Период.

0 голосов
/ 19 августа 2009

Делайте то, что делает большинство троянов:

Обратное соединение

EDIT:

с двумя машинами за брандмауэрами вам понадобится какой-то третий «Прокси»

0 голосов
/ 19 августа 2009

Если бы я реализовывал это, я бы посмотрел на несколько вариантов.

  1. Брандмауэр перенаправляет данный порт на ПК внутри сети. Это позволит вам подключиться к серверу из внешнего мира.

  2. Подключите клиент (-ы) за брандмауэром к видимому серверу за пределами брандмауэра.

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

...