2008-10-13 10 views
1

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

Требования:

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

I Would очень ценю услышать, как другие теперь справляются с этим. Я хотел бы добавить, им пытаются сделать это с помощью system.net в C#

Спасибо сильно :-)

Новое дополнение: В поисках решения, которое я могу либо купить и запустить на моем окна машины, или программы в C#. :-)

Update:

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

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

Я буду возьмите некоторые из своих советов, чтобы добавить в него «функции», которые включают в себя:

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

ответ

2

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

<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, и я не проверял, но это должно дать вам очень хорошая идея.

+0

Это интересная идея. Как бы я «ударил» веб-сайт с ним? т.е.: я бы загрузил сайт в браузере. Будет ли еще работать сайт моего интернет-провайдера (дорожный бегун)? У вас есть образец кода, который вы могли бы предоставить. Большое спасибо за ваш ответ :-) – schmoopy 2008-10-13 22:32:08

+0

Добавлен образец кода для вас. – IAmCodeMonkey 2008-10-13 22:41:36

4

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

+0

например. Проверьте код возврата `wget http://foo.com/ -O ->/dev/null 2> & 1` – 2008-10-14 02:22:31

2

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

0

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

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

1

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

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

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

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

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

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

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

0

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

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

0

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

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

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

1

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

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

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

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

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

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

0

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

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

нюанс: я являюсь автором CALM

 Смежные вопросы

  • Нет связанных вопросов^_^