该文章恢复至 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了三次,然后拿到它的最快、最慢和一个平均值。
然后把返回的数组处理排序输出就行了。
Comments NOTHING