JavaScriptコードを実行して4つの異なるIPアドレスをpingし、これらのping要求のパケット損失と待ち時間を取得してページに表示したいとします。JavaScriptを使用してIPアドレスをpingする方法
どうすればよいですか?
JavaScriptコードを実行して4つの異なるIPアドレスをpingし、これらのping要求のパケット損失と待ち時間を取得してページに表示したいとします。JavaScriptを使用してIPアドレスをpingする方法
どうすればよいですか?
JSからはできません。何あなたができることはこれです:
client --AJAX-- yourserver --ICMP ping-- targetservers
その後、あなたのためのターゲットサーバをping、およびAJAX結果に結果を返しますサーバーにAJAX要求を、確認します。
可能な注意事項:
私が考えることができる唯一の方法はローディングです。外部サーバからの画像ファイル。そのロードが失敗すると、サーバーが応答していないことがわかります(サーバーがあなたをブロックしている可能性があるため、実際はわかりません)。
私が何を意味するかを確認するには、この例のコードを見てみましょう:pingを実行し、指定したURLの上
/*note that this is not an ICMP ping - but a simple HTTP request
giving you an idea what you could do . In this simple implementation it has flaws
as Piskvor correctly points out below */
function ping(extServer){
var ImageObject = new Image();
ImageObject.src = "http://"+extServer+"/URL/to-a-known-image.jpg"; //e.g. logo -- mind the caching, maybe use a dynamic querystring
if(ImageObject.height>0){
alert("Ping worked!");
} else {
alert("Ping failed :(");
}
}
これはpingではない、つまりHTTPリクエスト(したがってTCP/IP)です。また、ターゲットがHTTPサーバーを実行しない場合、要求は* loooong *タイムアウトになります。また、イメージがキャッシュ内に存在しない限り、ローディングは非同期です(ImageObject)。'src'を設定した直後にチェックすると、heightは0を返します。キャッシュに*ある場合は、ターゲットが起動しているかどうかにかかわらず、 "Ping worked"を返します。 http://en.wikipedia.org/wiki/Ping – Piskvor
Relax Piskvor - これは本当のping(どちらもあなたの解決策ではない)が間違いない - ソケットを開いて任意のTCP/IPを送信できる必要があるパケットをpingをシミュレートする - 私は単純化のためにメソッドpingを呼び出したばかりです。また、ターゲットがHTTPサーバーを実行していない場合、それは長い時間がかかります - したがって、私は "既知のイメージへのURL"と書いています...また、キャッシュが問題です。これは、あなたが取ることのできるアプローチの**簡単な**デモンストレーション、CSSヒストリーのハックと同じ原則でした。 downvoteありがとう。 –
私はdownvoteを個人的に取っていない、私はdownvote *あなた*;私はちょうどそれが実際に質問に答えないと感じました。*既知のHTTPサーバがアップしているかどうかを調べる簡単な方法ですが、実際にはpingの損失や待ち時間には答えません。私は自分のアプローチがクライアントのコンピュータからpingをしていないことに同意します。これは、多くの低い権限と多くのセキュリティホール(およびActiveX)を必要とします。 – Piskvor
function ping(url){
new Image().src=url
}
。
一般的にカウンタ/アナリティクスに使用されます。
クライアント(JavaScript)への応答に失敗することはありません
これはicmpパケットを送信しません – mulllhausen
これは、サーバーがhttp要求などの要求に応答するかどうかをチェックします。 pingは全く別のものです。 –
JSのpingに最も近いのは、AJAXを使用して読み込み、状態、ヘッダーを取得していることです。このような何か:もちろん
url = "<whatever you want to ping>"
ping = new XMLHttpRequest();
ping.onreadystatechange = function(){
document.body.innerHTML += "</br>" + ping.readyState;
if(ping.readyState == 4){
if(ping.status == 200){
result = ping.getAllResponseHeaders();
document.body.innerHTML += "</br>" + result + "</br>";
}
}
}
ping.open("GET", url, true);
ping.send();
あなたはまた、別のHTTPステータスのために条件を入れて、それは立派に見えるように、しかし、あなたは、などの説明をしたい出力表示を行うことができます。 pingよりもhttp url status checkerのほうが多いですが、実際は同じアイデアです。あなたはいつもそれを数回繰り返すことで、あなたのpingのように感じることができます:)
AJAXを使用し、準備完了状態を取得することのアイデアは、私の仕事です。このコンテンツに他のステートメントを追加するにはどうすればいいですか? URLが利用できない場合と同様に、私はユーザーにマッサージを印刷したいと思います。 document.getElementById( "div")のようにinnerHTML = "Pingは成功しません!"; –
私はこの最新のコードを書いています。
これは、XMLHttpRequestの呼び出し()と一緒に使用すると非常に便利な「HTTP ping」の一種です。たとえば、場合によっては最も高速なサーバーのどちらかを使用したり、ユーザーのインターネット接続速度から
この小さな機能は、存在しないURL(404を返すと予想される)上のHTTPサーバーに接続しているだけで、サーバーがHTTP要求に応答して平均を実行するまでの時間を測定しています累積された時間と反復の回数に依存します。私が気づいたので、
要求されたURLは、各呼び出しでrandomely修正された(おそらく)いくつかの透明プロキシやキャッシュ機構の余分な高速な答えを与え、いくつかのケースで結果を偽造(ICMPより速く、実際にやや奇妙なもの)。
実際のHTTPサーバーに適合するFQDNを使用するように注意してください。 結果は、例えば、ID "結果" とbody要素に表示されます。
<div id="result"></div>
機能コード:例えば
function http_ping(fqdn) {
var NB_ITERATIONS = 4; // number of loop iterations
var MAX_ITERATIONS = 5; // beware: the number of simultaneous XMLHttpRequest is limited by the browser!
var TIME_PERIOD = 1000; // 1000 ms between each ping
var i = 0;
var over_flag = 0;
var time_cumul = 0;
var REQUEST_TIMEOUT = 9000;
var TIMEOUT_ERROR = 0;
document.getElementById('result').innerHTML = "HTTP ping for " + fqdn + "</br>";
var ping_loop = setInterval(function() {
// let's change non-existent URL each time to avoid possible side effect with web proxy-cache software on the line
url = "http://" + fqdn + "/a30Fkezt_77" + Math.random().toString(36).substring(7);
if (i < MAX_ITERATIONS) {
var ping = new XMLHttpRequest();
i++;
ping.seq = i;
over_flag++;
ping.date1 = Date.now();
ping.timeout = REQUEST_TIMEOUT; // it could happen that the request takes a very long time
ping.onreadystatechange = function() { // the request has returned something, let's log it (starting after the first one)
if (ping.readyState == 4 && TIMEOUT_ERROR == 0) {
over_flag--;
if (ping.seq > 1) {
delta_time = Date.now() - ping.date1;
time_cumul += delta_time;
document.getElementById('result').innerHTML += "</br>http_seq=" + (ping.seq-1) + " time=" + delta_time + " ms</br>";
}
}
}
ping.ontimeout = function() {
TIMEOUT_ERROR = 1;
}
ping.open("GET", url, true);
ping.send();
}
if ((i > NB_ITERATIONS) && (over_flag < 1)) { // all requests are passed and have returned
clearInterval(ping_loop);
var avg_time = Math.round(time_cumul/(i - 1));
document.getElementById('result').innerHTML += "</br> Average ping latency on " + (i-1) + " iterations: " + avg_time + "ms </br>";
}
if (TIMEOUT_ERROR == 1) { // timeout: data cannot be accurate
clearInterval(ping_loop);
document.getElementById('result').innerHTML += "<br/> THERE WAS A TIMEOUT ERROR <br/>";
return;
}
}, TIME_PERIOD);
}
、打ち上げで:
fp = new http_ping("www.linux.com.au");
なお、Iこのスクリプトの結果数値と対応する同じサーバのICMP pingの間にシンプルなコリアレーションが見つかりませんでしたが、HTTP応答時間はICMP再解析のおおよそ指数関数であるようですスポンサー時間。これは、Webサーバーの風味や構成、明らかにサーバー自体の速度、おそらく他の理由によって異なるHTTP要求によって転送されるデータの量によって説明できます。
これはあまり良いコードではありませんが、私はそれが他の人を助け、おそらくインスピレーションを与えると思っていました。
JavascriptでPINGすることはできません。生存している場合は10x10ピクセルの緑のイメージを返し、死んだ場合は赤いイメージを返すJavaサーブレットを作成しました。 https://github.com/pla1/Misc/blob/master/README.md
Is it possible to ping a server from Javascript?
上記のソリューションをチェックアウトする必要があります。かなり滑らか。
明らかにそうではありませんが、明確にしたいと思いました。
この回答を投票しても意味がありません。問題はJavascriptを使ってPingを実行する方法で、Javascriptを使ってPingを効果的に行う方法を示しています。他に誰かが期待できるものが何であるか分からない。ただし、代理人の控除をありがとう、非常に感謝します。ワオ。 –
[この質問に関する](http://stackoverflow.com/questions/4954587/getting-client-to-automatically-send-data-to-server) –
http://stackoverflow.com/questions/4282151/is-it-possible-to-ping-a-server-from-javascript上記の解決策をチェックする必要があります。かなり滑らか。 –