Как проверить доступность порта в клиентском JavaScript? - PullRequest
8 голосов
/ 27 марта 2012

Можно ли обнаружить в JavaScript (в браузере), отключен ли порт брандмауэром или маршрутизатором?

Ответы [ 3 ]

5 голосов
/ 27 марта 2012

Нет, с чистым javascript это невозможно (кроме выполнения http-запросов к определенным портам, но эти результаты мало что значат), однако вы можете проверить извне (другими словами, ваш сервер), является ли конкретныйПорт открыт.Другой вариант - использовать java-апплет или плагин для браузера, который может сделать это для вас, если вам действительно это нужно, и в этом случае существуют различные инструменты с открытым исходным кодом, которые вы, вероятно, можете портировать, если у вас есть необходимый опыт.с этими.Обратите внимание, что это не совсем удобно для пользователя.(В любом случае, было бы полезно, если бы вы описали точный сценарий, в котором это необходимо, поскольку может быть совершенно другое решение.)

4 голосов
/ 27 марта 2012

Вы можете видеть только ожидаемый ответ или нет.

При использовании javascript необходимо оставаться в границах HTTP.

Конечно, вы можете отправить запрос Ajax на любой порт сервера и посмотреть, если вы получите ошибку.Если вы хотите проверить порт на текущем компьютере, то, вероятно, может помочь отправка запроса на "localhost: 843".

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

Нам нужна дополнительная информация, чтобы помочь вам.

3 голосов
/ 09 апреля 2012

Если вы достаточно гибки, чтобы использовать jQuery, тогда посмотрите это Ответ от меня .Это будет не только проверять доступность порта, но также и то, поступает ли код 200 успешного ответа с удаленного (или любого, я имел в виду, что он также поддерживает междоменный) сервера.Также дает решение здесь.Я буду проверять здесь порт 843.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <script type="text/javascript" src="jquery-1.7.2-min.js"></script>
    </head>
    <body>
        <script type"text/javascript">
            var isAccessible = null;
            function checkConnection() {
  /*make sure you host a helloWorld HTML page in the following URL, so that requests are succeeded with 200 status code*/
                var url = "http://yourserverIP:843/test/hello.html" ; 
                $.ajax({
                    url: url,
                    type: "get",
                    cache: false,
                    dataType: 'jsonp', // it is for supporting crossdomain
                    crossDomain : true,
                    asynchronous : false,
                    jsonpCallback: 'deadCode',
                    timeout : 1500, // set a timeout in milliseconds
                    complete : function(xhr, responseText, thrownError) {
                        if(xhr.status == "200") {
                           isAccessible = true;
                           success(); // yes response came, execute success()
                        }
                        else {
                           isAccessible = false;
                           failure(); // this will be executed after the request gets timed out due to blockage of ports/connections/IPs
                        }
                    }
               });
            }
            $(document).ready( function() {
                checkConnection(); // here I invoke the checking function
            });
        </script>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...