【问题标题】:How to make a user on my website ping a specific ip address?如何让我网站上的用户 ping 特定的 IP 地址?
【发布时间】:2019-04-29 23:27:34
【问题描述】:

我想知道这样的网站:https://ping.eu/ping/ 是如何让我们的 ip ping 另一个 ip 并获得结果的。

有人有想法吗?

谢谢

【问题讨论】:

  • 你试过我的答案了吗?

标签: html web ip ping


【解决方案1】:

它没有。 PHP 脚本(在服务器上)很可能会使用“PHP Sockets”来完成。看一下 这个:https://www.php.net/manual/en/sockets.examples.php

否则它可以使用 exec() 函数,但这将是一个安全漏洞。

所以回答你的问题:网站将 ping IP 地址而不是“客户端”

【讨论】:

  • 感谢您的回答。不过,是否有软件可以指定源 ping 地址?
  • 很难说出“指定源 ping 地址”是什么意思。您想要一个地址来测试 ping 吗?如果是这样,请尝试 '8.8.8.8',谷歌的服务器。他们不会介意的。
  • 不,例如,我的 IP 是 A,我要 ping 的服务器有 IP B,但我想用另一个不是我的 IP (C) 来 ping 它。或者,至少,估计 B 需要多长时间才能响应 C。
  • 好的,我和你在一起。是的,一个 Javascript 函数可以处理这个问题,而 tat 确实是客户端 ping。请参阅下面的@Max Voisard 答案。我还没有看过它,但它可能是一个有效的 JS
【解决方案2】:

如果你想 ping 一个服务器,即像 www.google.com 这样的实际网址/URL,你可以查看这个 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);
  }
}

ping 服务器/网址的另一种方法是使用 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 请求 ping 服务器,它只查看是否使用您的服务器的 IP 地址而不是用户的客户端进行连接,如下所示:

client --AJAX-- yourserver --ICMP ping-- targetservers

你也可以试试:

  • 使用带有isReachable 的Java 小程序
  • 编写 ping 的服务器端脚本,并使用 AJAX 与服务器端脚本通信
  • 您还可以在 Flash 中 ping(使用 ActionScript

获取 IP 地址的最后一种假设和非正统方法是检查和查看您提到的网站的源代码,并复制一些代码,主要是 JavaScript,然后在您的终端进行测试并尝试实现它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多