Если вы хотите пропинговать сервер, то есть фактический веб-адрес / URL, такой как www.google.com, вы можете посмотреть на этот JSFiddle http://jsfiddle.net/GSSCD/203/ или GitHub репозиторий https://github.com/jdfreder/pingjs.
Вот код из JSFiddle:
function Pinger_ping(ip, callback) {
if(!this.inUse) {
this.inUse = true;
this.callback = callback
this.ip = ip;
var _that = this;
this.img = new Image();
this.img.onload = function() {_that.good();};
this.img.onerror = function() {_that.good();};
this.start = new Date().getTime();
this.img.src = "http://" + ip;
this.timer = setTimeout(function() { _that.bad();}, 1500);
}
}
Другой способ проверить связь с сервером / веб-адресом - использовать JavaScript и функцию XMLHttpRequest()
, которую он поддерживает:
HTML:
<div id="result"></div>
JavaScript:
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);
}
Но, конечно, это веб-адреса, а не IP-адреса, поэтому я не уверен, к чему вы стремитесь. Я также не уверен, ищете ли вы время, потраченное на получение соединения, а также количество отправленных и полученных пакетов и байтов, или же вы просто хотите проверить соединение. Код выше делает все эти вещи. Для IP-адресов вы можете попробовать AJAX-запрос для проверки связи с сервером, который только видит, существует ли соединение с использованием IP-адреса ВАШЕГО СЕРВЕРА, а НЕ КЛИЕНТА ПОЛЬЗОВАТЕЛЯ, например:
client --AJAX-- yourserver --ICMP ping-- targetservers
Вы также можете попробовать:
- Использование Java-апплета с
isReachable
- Написание сценария на стороне сервера, который проверяет связь, и использование AJAX для связи с вашим сценарием на стороне сервера
- Вы также можете пинговать во Flash (используя
ActionScript
)
Один из последних гипотетических и неортодоксальных способов получения IP-адреса состоит в том, чтобы проверить и просмотреть источник сайта, который вы упомянули, и скопировать некоторый код, в основном JavaScript, и протестировать его со своей стороны и попытаться реализовать его.