搭建一个本地ping接口(历史恢复文章)

发布于 2023-03-10  41 次阅读


该文章恢复至 2020年08月15日 的文章

前言:

PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序  。

Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。

我们一般用在测试服务器的响应速度上,在网上的免费ping的网站很多,但是我想自己弄一个ping测速的服务器该怎么弄呢?

效果:

最慢:3.299/ms
最快:3.055/ms
平均:3.176/ms
响应IP:185.207.153.252
地址:香港cloudie数据中心
ping服务器所在地:中国 香港hkisl

准备:

一台安装了宝塔的服务器即可,

或者一台PHP取消禁用exec()函数的主机也可以。

宝塔要到:软件商店—>已安装—>自己对应的PHP版本设置,

把禁用的函数exec()删除掉。

注意事项:

本次用到exec()函数,有一定的风险!

听网友说貌似可以用更安全的curl,不过我并不知道curl如何实现的ping功能。

因为服务器地区和网络的差异,各个地区的服务器ping出来的结果都各不相同。

传入的网址不能加上http://等其它参数,只要域名就行了。

如果目标开启了禁ping将无法ping通测试。

因为是要调用外部指令,所以接口能不暴露就尽量不要暴露!

开始操作:

首先在网站根目录下创建一个ping.php的PHP文件,

然后在文件内输入如下代码:

<?php
if($_GET['url']==null){
    echo '请输入网址!';
}elseif (preg_match('/http:\/\//i', $_GET['url'])|preg_match('/https:\/\//i', $_GET['url'])) {
    echo '不能带http://或https://,只需要输入域名!';
}else{
$ip = $_GET['url'];
$tip = gethostbyname($_GET['url']);
$bip = file_get_contents("http://49.234.72.124:88/ip.php?ip=".$tip);
$url = exec("ping -c 3 $ip",$arr);
//echo print_r($arr);
$s = preg_match_all('/rtt min\/avg\/max\/mdev = (.*?)\/(.*?)\/(.*?)\/(.*?) ms/',$url,$t);
if($s==0){
    echo 'ping超时,请查看服务器是否禁ping!';
}else{
echo '最慢:'.$t[3][0]."/ms</br>最快:".$t[1][0]."/ms</br>平均:".$t[2][0]."/ms</br>响应IP:".$tip."</br>地址:".$bip;
}}
?>

调用方法:

http://你的域名/ping.php?url=要ping的域名

例子:https://api.cv0.cn/api.php?id=8&url=baidu.com

原理:

主要就是利用exec()函数调用服务器内部的ping指令,

然后解析一下返回的的数组就行了。

这里ping了三次,然后拿到它的最快、最慢和一个平均值。

然后把返回的数组处理排序输出就行了。

最后更新于 2023-03-10