1

無効な URL を入力しても常に ping を返すようになった OpenDNS やその他のサービス (例: ロードランナー) のせいでイライラしています。サイトが稼働しているかどうか。これは機能しなくなりました。誰にもこれについて何か考えがありますか?

要件:

  1. 私が制御していないものであっても、有効なWebサイトで動作するはずです
  2. インターネットにアクセスできる任意のネットワークから実行できる必要があります

他の人が現在これをどのように扱っているかを聞いていただければ幸いです。追加したいのですが、c# で System.Net を使用してこれを実行しようとしています。

どうもありがとうございました:-)

新しい追加: Windows マシンで購入して実行するか、C# でプログラムできるソリューションを探しています。:-)

アップデート:

皆様、ご回答誠にありがとうございました。最終的に、私はこれを行うことでソリューションを作成することになりました:

  1. URL から指定されたページをダウンロードする単純な Web クライアントの作成 (ヘッダーだけに変更するか、これを使用してページの変更を通知することができます)
  2. チェックするサイト/ページへの完全な URL を単にリストする xml ファイルを読み込む
  3. サーバーの再起動を回復できるように、ソリューションをホストする Windows サービスを作成しました。
  4. エラーが発生すると、電子メールとテキスト メッセージが定義済みの受信者リストに送信されます
  5. ほとんどの値 (interval、smtp、to、from など) は、簡単に変更できるように .config で定義されています。

後でこれに「機能」を追加するためのアドバイスをいくつか取り入れます。これには次のものが含まれます。

  • リアルタイム監視用の AJAX ページ。WCF を使用して、asp.net ページから既存の Windows サービスに接続します。
  • ヘッダーのみをダウンロード (ページ変更比較のオプションあり)
  • より構成可能にする (つまり、通知前に失敗時に再試行する)
4

10 に答える 10

4

Wgetは素晴らしい代替手段です。マシンがアクティブかどうかだけでなく、HTTP サーバーが接続を受け入れているかどうかもチェックします。

于 2008-10-13T22:22:36.993 に答える
2

サービスが稼働しているかどうかを確認するには、ping を実行するだけでなく、Web サイトなどのサービスにアクセスして有効な応答を返すスクリプトを用意しておくとよいでしょう。私は自分で書くのではなく、過去に What's Up Gold を使用しました。私はそのような製品のすべての機能が好きです。サービスがダウンしているときにページを送信するなど。

于 2008-10-13T22:24:20.717 に答える
2

Web サイトのアドレス バーと、AJAX を使用してサイトにアクセスする JavaScript を備えた単純な Web ページを作成できます。非同期コールバックで 200 以外の HTTP 応答を受け取った場合、サイトは機能していません。

<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 ではないことに依存しており、私はテストしていませんが、非常に良いアイデアが得られるはずです。

于 2008-10-13T22:27:40.400 に答える
1

C# の既製のオプションを直接知っているわけではありませんが、利用可能なオプションがいくつかない場合は非常に驚いています。

私は数年前に似たようなことを書きました.コードは他の誰かのものであるため、もうありません.

次に、この操作の成功または失敗に関する通知ロジックを関連付けることができます。

帯域幅が問題になる場合は、HEAD リクエストのみを使用するように調整できます。

制御するより複雑なサイトの場合、応答を送信する前にさらに詳細なテストを行うヘルス モニタリング ページを接続できます。たとえば、DB 接続が確立されているかなどです。

多くの場合、ポート 80 で停止しているマシンでも ping に応答するため、ポート 80 (またはその他の関心のあるもの) をテストすると、より信頼性の高い方法になります。

于 2008-10-13T23:42:21.607 に答える
1

記録として、lkjsdaflkjdsjf.com はホスト名です (現時点では誰にも登録されていません)。ping は URL では機能しません。ping はホスト名で機能します。ホスト名は、ドメイン ネーム システムを使用して検索されます。ホスト名が登録されていない場合、DNS は失敗するはずです。

問題は、一部のサービス (どうやらあなたの ISP、そして間違いなく OpenDNS) が、登録されていないホスト名に対する DNS 要求を失敗させないことです。代わりに、検索ページを http 要求に提示するネットワーク上のホストの IP アドレスを返します。

あなたは 2 つのことを知りたがっているようです: 名前は本物ですか (つまり、この名前を持つホストが実際のマシンに登録されているか)。その機械は機能していますか?

問題の名前が本物であることがすでにわかっている場合 (たとえば、www.google.com が稼働しているかどうかを知りたい場合)、名前が実際のアドレスに解決されることがわかっているため、ping を使用できます (ISP は登録名の IP を返さない)、そのマシンが動作しているかどうかのみを測定します。

名前が本物かどうかわからない場合、ISP が DNS 要求に偽のデータを返しているため、問題はさらに難しくなります。ここでの唯一の解決策は、未解決の名前について嘘をつかない DNS サーバーを見つけることです。

ISP の偽のレコードと本物のレコードを区別する唯一の方法は、返された IP を逆引きして、その IP が ISP のネットワークにあるかどうかを確認することです。このトリックの問題は、ISP がその IP のリバース DNS 情報を持っていない場合、それが ISP なのか、それとも DNS を適切に構成しなかったナックルヘッドなのかがわからないことです (私はその間違いを何度も犯しました)。過去の回)。

他の手法もあると思いますが、DNS がすべての背後にあるという事実が、この問題への対処を困難にしています。

于 2008-10-13T22:44:35.263 に答える
0

私は ping が非常に信頼性に欠けることを発見しました。これは、ジャンプしなければならないすべてのホップが原因であり、その間に何かが常に干渉する可能性があります。

Web サーバーとの http 接続を開こうとするのがおそらく最善の方法です。

于 2008-10-13T22:24:40.733 に答える
0

cygwin が利用できる場合、または「httping」を実行してみてください。

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

于 2008-10-13T22:31:11.157 に答える
0

私が見る限り、ここでの問題は、OpenDNS が無効なドメインを自分自身に解決して、あなたが求めているものに近いものに転送することです (したがって、ggoogllee.com と入力すると、からのバウンスを介して正しい場所に行き着きます)。 OpenDNS サーバー)。(間違っていたら訂正してください)

その場合は、解決した IP == OpenDNS の IP のいずれかを確認できるはずです。もう ping は必要ありません - プロトコル (HTTP) レベルのものはありません - 例外的なケースをチェックするだけですか?

于 2008-10-13T23:00:54.670 に答える
0

プログラミング ソリューションよりも sys-admin ソリューションを使用する傾向がある場合は、ローカル ネーム サーバーをインストールして、委任専用ゾーンの NS レコード以外は受け入れないように指示することができます。これは、Network Solution/Verisign が最後に問題を起こしたときに私 (およびインターネット上の他のすべての人も想定していた) が使用した修正です。いくつかのローカル マシンに BIND をインストールし、DHCP サーバーにこれらのアドレスをローカル ネーム サーバーとして配布するように指示し、関心のある委任専用ゾーンのそれぞれについて、次のような設定を行いました。

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

そういえば、今後の BIND バージョンではデフォルトでオンになっているのではないかと思います。追加のボーナスとして、ほとんどの ISP が提供するよりも安定した DNS 解決を取得する傾向があり、独自のキャッシュを制御し、少しのパッチを適用し、最新の DNS 攻撃を修正するために ISP に依存する必要はありません.

于 2008-10-13T23:08:26.090 に答える
0

データベースにログを記録し、メール通知とステータス ダッシュボードを提供するCALMが好きです。

サイトにテスト ページを設定し、定期的に GET を実行して、「正しい」結果 (すべて問題なし) またはメールで送信されるエラー メッセージの結果を受け取ることができます。

注意:私はCALMの作者です

于 2008-10-14T01:02:20.213 に答える