Есть ли способ проверить, защищено ли соединение компьютера брандмауэром? - PullRequest
0 голосов
/ 21 февраля 2012

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

Есть ли способпроверить соединение на состояние брандмауэра?

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

Даже если такой вещи не существует, существуют ли альтернативные маршруты?

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

Nantucket - ваш сервис прослушивает UDP или TCP?

Для UDP - то, что вы описываете - это то, для чего был разработан протокол STUN .Это соответствует вашему определению «какая-то простая команда, и они посылают специальный пинг обратно»

STUN - это очень «пингоподобный» (UDP) протокол для сервера, который должен отображатьсяобратно к клиенту, какой IP и порт он видит клиент как.Затем клиент может использовать ответ от сервера и сравнить результат с тем, что он считает своим локально перечисляемым IP-адресом.Если ответ сервера соответствует локально перечисляемому IP-адресу, клиентский хост может самостоятельно определить, что он напрямую подключен к Интернету.В противном случае клиент должен предположить, что он находится за NAT - но для большинства маршрутизаторов вы только что создали сопоставление портов, которое можно использовать для других сценариев P2P-соединения.

Кроме того, вы можете использовать Атрибут RESPONSE-PORT в запросе привязки STUN для ответа сервера на другой порт.Это эффективно позволит вам определить, находитесь ли вы в брандмауэре или нет.

TCP - это немного сложно.STUN может частично использоваться, чтобы определить, находитесь ли вы за NAT.Или просто отправьте http-запрос на whatismyip.com и проанализируйте результат, чтобы узнать, есть ли NAT.Но это сложно, так как в Интернете нет службы, которая, как я знаю, проверила бы вам соединение TCP.

Учитывая все вышесказанное, подавляющее большинство пользователей широкополосного доступа, вероятно, находятся за NAT.это также действует как брандмауэр.Либо предоставляется их интернет-провайдером, либо собственным беспроводным маршрутизатором.И даже если это не так, большинство операционных систем имеют своего рода минимальный брандмауэр для блокировки незапрошенного трафика.Поэтому очень важно иметь P2P-клиента, который может работать только на прямых соединениях.

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

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

1 голос
/ 21 февраля 2012

Вы можете найти эту статью полезной

http://msdn.microsoft.com/en-us/library/aa364726%28v=VS.85%29.aspx

Я бы начал с каждой ОС и спросил, включены ли службы брандмауэра.Во-вторых, я попытался бы подключиться к сокету и определить из кодов ошибок, сбрасываются ли соединения или происходит ли тайм-аут.Я знаком только с кодировкой winsock, поэтому я не могу особо сказать о Linux или Mac OS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...