Пинг всегда успешен, не могу легко проверить работоспособность, используя пинг по URL - PullRequest
1 голос
/ 14 октября 2008

Я расстроен из-за OpenDNS и других сервисов (например, roadrunner), которые теперь всегда возвращают пинг, даже если вы вводите неверный URL, например: lkjsdaflkjdsjf.com --- Я создал программное обеспечение для собственного использования, которое будет пинговать URL, чтобы проверить, был ли сайт или нет. Это больше не работает. У кого-нибудь есть идеи по этому поводу?

Требования:

  1. Он должен работать с любым действующим веб-сайтом, даже с теми, которые я не контролирую
  2. Он должен работать из любой сети, имеющей доступ в Интернет

Я был бы очень рад услышать, как другие теперь справляются с этим. Я хотел бы добавить, я пытаюсь сделать это с помощью System.Net в c #

Большое спасибо: -)

Новое дополнение: Ищу решение, которое я могу либо купить и запустить на моем компьютере с Windows, либо запрограммировать на c #. : -)

Обновление:

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

  1. Создание простого веб-клиента, который загружал указанную страницу из URL-адреса (может измениться просто на заголовок или использовать его для уведомления об изменениях страницы)
  2. Прочитать в xml-файле, который просто перечисляет полный URL-адрес сайта / страниц для проверки
  3. Создана служба Windows для размещения решения, которая будет восстанавливать перезапуски сервера.
  4. При ошибке электронное письмо и текстовое сообщение отправляются определенному списку получателей
  5. Большинство значений (интервал, smtp, to, from и т. Д.) Определены в .config для легкого изменения

Я приму некоторые ваши советы, чтобы добавить «функции» к этому позже, в том числе:

  • Страница AJAX для мониторинга в реальном времени. Я буду использовать WCF для подключения к существующей службе Windows со страницы asp.net
  • Загрузка только заголовков (с возможностью сравнения изменений страниц)
  • сделать более настраиваемым (т. Е. Повторять попытки при сбое до уведомления)

Ответы [ 10 ]

4 голосов
/ 14 октября 2008

Wget - хорошая альтернатива. Он будет проверять не только то, активен ли компьютер, но также и то, принимает ли сервер HTTP подключения.

2 голосов
/ 14 октября 2008

Вы можете создать простую веб-страницу с адресной строкой для сайта и небольшим количеством javascript, который использует AJAX для посещения сайта. Если вы получили какой-либо HTTP-ответ, отличный от 200, на асинхронный обратный вызов, сайт не работает.

<html>
  <head>
     <script language="javascript" type="text/javascript">
     <!--
        var ajax = new XMLHttpRequest();

        function pingSite() {
           ajax.onreadystatechange = stateChanged;
           ajax.open('GET', document.getElementById('siteToCheck').value, true);
           ajax.send(null);
        }

        function stateChanged() {
           if (ajax.readyState == 4) {
              if (ajax.status == 200) {
                 document.getElementById('statusLabel').innerHTML = "Success!";
              }
              else {
                 document.getElementById('statusLabel').innerHTML = "Failure!";
              }
           }
        }
     -->
     </script>
  </head>

  <body>
     Site To Check:<br />
     <input type="text" id="siteToCheck" /><input type="button" onclick="javascript:pingSite()" />

     <p>
        <span id="statusLabel"></span>
     </p>
  </body>

Этот код зависит от того, что браузер не является IE, и я его не тестировал, но он должен дать вам действительно хорошую идею.

2 голосов
/ 14 октября 2008

Чтобы увидеть, работает ли служба, нужно не только пинговать, но и хорошо иметь сценарии, которые будут запускать службу, например веб-сайт, и возвращать действительный ответ. Я использовал What Up Gold в прошлом, а не писал свои собственные. Мне нравятся все функции в подобных продуктах. например, отправив мне страницу, когда служба не работает.

1 голос
/ 14 октября 2008

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

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

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

Если пропускная способность является проблемой, вы можете обрезать ее, чтобы просто использовать запрос HEAD.

Для более сложных сайтов, которыми вы управляете, вы можете подключить страницу мониторинга работоспособности, которая выполняет более глубокое тестирование, прежде чем отправлять ответ, например, установлено ли соединение с БД и т. Д.

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

1 голос
/ 14 октября 2008

Для справки, lkjsdaflkjdsjf.com - это имя хоста (которое на данный момент никому не зарегистрировано). ping не работает с URL, ping работает с именами хостов. имена хостов ищутся с использованием системы доменных имен . Предполагается, что DNS не работает, если имена хостов не зарегистрированы.

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

Похоже, вы хотите знать две вещи: является ли имя реальным (то есть существует ли хост с таким именем, зарегистрированный на каком-то реальном компьютере)? И эта машина работает?

Если вы уже знаете, что указанное имя является реальным (например, вы хотите знать, работает ли www.google.com), тогда вы можете использовать ping, поскольку вы знаете, что имя будет преобразовано в реальный адрес ( Интернет-провайдер не может вернуть свой IP-адрес для зарегистрированного имени), и вы будете только измерять, работает ли этот аппарат.

Если вы не знаете, является ли имя реальным, тогда проблема сложнее, потому что ваш провайдер возвращает ложные данные в ваш запрос DNS. ЕДИНСТВЕННОЕ решение здесь - найти DNS-сервер, который не собирается вам врать о неразрешенных именах.

Единственный способ, с помощью которого я могу различить поддельные записи вашего провайдера и реальные, - это обратный поиск на IP-адресе, который вы получаете, и посмотреть, находится ли этот IP в сети вашего провайдера. Проблема с этим трюком заключается в том, что если у провайдера нет информации об обратном DNS для этого IP-адреса, вы не будете знать, является ли провайдер или просто тупица, который не сконфигурировал свой DNS должным образом (я много раз ошибался времена в прошлом).

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

0 голосов
/ 14 октября 2008

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

вы можете настроить тестовую страницу на сайте и периодически делать GET на ней, чтобы получить либо «истинный» результат (все хорошо), либо результат сообщения об ошибке, которое будет отправлено вам по электронной почте

предостережение: я являюсь автором CALM

0 голосов
/ 14 октября 2008

Если вы склоняетесь к решению sys-admin, а не к программному решению, вы можете установить локальный сервер имен и запретить ему принимать ничего, кроме записей NS для зон делегирования только. Это было исправление, которое я (и я предполагал, что все остальные в Интернете) использовал, когда Network Solution / Verisign сломался в этот последний раз. Я установил BIND на нескольких локальных компьютерах, велел своим DHCP-серверам выдавать эти аддеры в качестве локальных серверов имен и настраивал что-то вроде следующего для каждой из зон делегирования, о которых я заботился:

zone "com" { type delegation-only; };
zone "net" { type delegation-only; };

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

0 голосов
/ 14 октября 2008

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

Если это так, вы должны просто проверить, является ли IP-адрес, который вы разрешили, == любым из IP-адресов OpenDNS? Больше нет пинга - нет уровня протокола (HTTP) - только проверка исключительного случая?

0 голосов
/ 14 октября 2008

Вы можете попробовать запустить 'httping', если у вас есть Cygwin или

http://freshmeat.net/projects/httping/

0 голосов
/ 14 октября 2008

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

Попытка открыть http-соединение с веб-сервером, вероятно, лучший путь.

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