调用纯真IP数据库进行IP定位 使用exec函数调用系统Ping服务 支持linux与windows双系统运行 json格式数据回调,支持最大、最小、平均延迟返回

/*

*调用系统进行ping动作

资源来自网络

由Youngxj整理

状态码:1000->成功,1001->error,1002->禁ping,1003->找不到主机

*

*/

header("Content-type: text/html; charset=gbk");

header("Access-Control-Allow-Origin:*");

header('Content-type: application/json');

error_reporting(0);

$nodeip = 'xxx.xxx.xxx.xxx'; //填写你的服务器IP

$nodetext = '1'; //自定义文字支持html

if (isset($_GET['host']) && $_GET["host"] != "") {$url = $_GET['host'];

preg_match("/^(\w+:\/\/)?([^\/]+)/i", $url , $matches);

// 获得主机名$host = $matches[2];

}else{error();}

//获取当前服务器ip地区

$node = convertip($nodeip);

//编码转换

$nodetext = mb_convert_encoding($nodetext,"UTF-8","GBK");

if (PATH_SEPARATOR==':'){ // linuxexec("ping -c 2 -w 5 $host", $info);

$strs = reset($info);

$ping_time_line = end($info);

preg_match_all("/\((.*?)\)/",$strs,$str); //正则首行获取的ip

$ip =$str[1][0];

if($info[1]!=""){ //正常输出的内容

$ping_time = explode("=", $ping_time_line)[1];

$ping_time_min = explode("/", $ping_time)[0];

$ping_time_avg = explode("/", $ping_time)[1];

$ping_time_max = explode("/", $ping_time)[2];

$location = convertip($ip);

$arr = array("host"=>$host,"ip"=>$ip,"location"=>$location,"ping_time_min"=>$ping_time_min.'ms',"ping_time_avg"=>$ping_time_avg.'ms',"ping_time_max"=>$ping_time_max.'ms',"state"=>"1000","node"=>$node,'nodetext'=>$nodetext);

echo json_encode($arr); //location:域名节点地址,ping_time_min:最小延迟,ping_time_avg:平均延迟,ping_time_max:最大延迟,node:该服务器地区,nodetext:自定义文字

}elseif(empty($ip)){ //获取不到ip同时获取不到主机,说明当前地址错误或者未解析

error();

}else{ //禁Ping时输出的内容

$title = explode(' ', $strs);

$location = convertip($ip);

$arr = array("host"=>$host,"ip"=>$ip,"location"=>$location,"state"=>"1002","title"=>$title[1],"node"=>$node,'nodetext'=>$nodetext);

echo json_encode($arr);

//location:域名节点地址,title:返回特殊地址,node:该服务器地区,nodetext:自定义文字

}

}

else{ // windowsexec("ping $host", $info);

if($info[0]!=''){

$arr = array("host"=>$host,"state"=>"1003","title"=>"请求找不到主机");

echo json_encode($arr);

exit();

}

//获取ip正则

$strs = $info[1];

preg_match_all("/\[(.*?)\]/",$strs,$str);

$ip =$str[1][0];

//获取ping值结果

$info_time = end($info);

$target = $info[2];

$info_times = explode(" ",$info_time);

$min_time = str_replace(",最长","",$info_times[6]);

$max_time = str_replace(",平均","",$info_times[8]);

$avg_time = str_replace(",最长","",$info_times[10]);

//判断是否有ping值结果$result = checkStr("ms",$info_time);

if($result){

$location = convertip($ip);

$arr = array("host"=>$host,"ip"=>$ip,"location"=>$location,"ping_time_min"=>$min_time,"ping_time_avg"=>$avg_time,"ping_time_max"=>$max_time,"state"=>"1000","node"=>$node,'nodetext'=>$nodetext);

echo json_encode($arr); //location:域名节点地址,ping_time_min:最小延迟,ping_time_avg:平均延迟,ping_time_max:最大延迟,node:该服务器地区,nodetext:自定义文字

}elseif(empty($ip)){ //获取不到ip同时获取不到主机,说明当前地址错误或者未解析

error();

}else{ //禁Ping时输出的内容

$location = convertip($ip);

$arr = array("host"=>$host,"ip"=>$ip,"location"=>$location,"state"=>"1002","node"=>$node,'nodetext'=>$nodetext);

echo json_encode($arr); //location:域名节点地址,node:该服务器地区,nodetext:自定义文字

}

}

function error(){$host = $_GET['host'];

$arr = array("host"=>"$host","state"=>"1001");

echo json_encode($arr);

exit;

}

function convertip($ip) {

//纯真IP数据库IP定位$dat_path = 'qqwry.dat';

if(!$fd = @fopen($dat_path, 'rb')){

return 'IP数据库文件不存在或者禁止访问或者已经被删除!';

}

$ip = explode('.', $ip);

$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];

$DataBegin = fread($fd, 4);

$DataEnd = fread($fd, 4);

$ipbegin = implode('', unpack('L', $DataBegin));

if($ipbegin < 0) $ipbegin += pow(2, 32);

$ipend = implode('', unpack('L', $DataEnd));

if($ipend < 0) $ipend += pow(2, 32);

$ipAllNum = ($ipend - $ipbegin) / 7 + 1;

$BeginNum = 0;

$EndNum = $ipAllNum;

while($ip1num>$ipNum || $ip2num

$Middle= intval(($EndNum + $BeginNum) / 2);

fseek($fd, $ipbegin + 7 * $Middle);

$ipData1 = fread($fd, 4);

if(strlen($ipData1) < 4) {

fclose($fd);

return '系统出错!';

}

$ip1num = implode('', unpack('L', $ipData1));

if($ip1num < 0) $ip1num += pow(2, 32);

if($ip1num > $ipNum) {

$EndNum = $Middle;

continue;

}

$DataSeek = fread($fd, 3);

if(strlen($DataSeek) < 3) {

fclose($fd);

return '系统出错!';

}

$DataSeek = implode('', unpack('L', $DataSeek.chr(0)));

fseek($fd, $DataSeek);

$ipData2 = fread($fd, 4);

if(strlen($ipData2) < 4) {

fclose($fd);

return '系统出错!';

}

$ip2num = implode('', unpack('L', $ipData2));

if($ip2num < 0) $ip2num += pow(2, 32);

if($ip2num < $ipNum) {

if($Middle == $BeginNum) {

fclose($fd);

return '未知';

}

$BeginNum = $Middle;

}

}

$ipFlag = fread($fd, 1);

if($ipFlag == chr(1)) {

$ipSeek = fread($fd, 3);

if(strlen($ipSeek) < 3) {

fclose($fd);

return '系统出错!';

}

$ipSeek = implode('', unpack('L', $ipSeek.chr(0)));

fseek($fd, $ipSeek);

$ipFlag = fread($fd, 1);

}

if($ipFlag == chr(2)) {

$AddrSeek = fread($fd, 3);

if(strlen($AddrSeek) < 3) {

fclose($fd);

return '系统出错!';

}

$ipFlag = fread($fd, 1);

if($ipFlag == chr(2)) {

$AddrSeek2 = fread($fd, 3);

if(strlen($AddrSeek2) < 3) {

fclose($fd);

return '系统出错!';

}

$AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));

fseek($fd, $AddrSeek2);

} else {

fseek($fd, -1, SEEK_CUR);

}

while(($char = fread($fd, 1)) != chr(0))

$ipAddr2 .= $char;

$AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));

fseek($fd, $AddrSeek);

while(($char = fread($fd, 1)) != chr(0))

$ipAddr1 .= $char;

} else {

fseek($fd, -1, SEEK_CUR);

while(($char = fread($fd, 1)) != chr(0))

$ipAddr1 .= $char;

$ipFlag = fread($fd, 1);

if($ipFlag == chr(2)) {

$AddrSeek2 = fread($fd, 3);

if(strlen($AddrSeek2) < 3) {

fclose($fd);

return '系统出错!';

}

$AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));

fseek($fd, $AddrSeek2);

} else {

fseek($fd, -1, SEEK_CUR);

}

while(($char = fread($fd, 1)) != chr(0)){

$ipAddr2 .= $char;

}

}

fclose($fd);

if(preg_match('/http/i', $ipAddr2)) {

$ipAddr2 = '';

}

$ipaddr = "$ipAddr1 $ipAddr2";

$ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);

$ipaddr = preg_replace('/^s*/is', '', $ipaddr);

$ipaddr = preg_replace('/s*$/is', '', $ipaddr);

if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {

$ipaddr = '未知';

}

$ipaddr = iconv('gbk', 'utf-8//IGNORE', $ipaddr);

if( $ipaddr != ' ' )

return $ipaddr;

else

$ipaddr = '来自火星,无法或者其所在地!';

return $ipaddr;

}

function checkStr($str,$target){

//字符串是否存在正则$tmpArr = explode($str,$target);

if(count($tmpArr)>1)return true;

else return false;

}

?>

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

php调用纯真ip,php调用纯真IP数据库进行IP定位相关推荐

  1. 怎么查看网站数据库服务器ip地址,怎么查看网站数据库服务器ip地址吗

    怎么查看网站数据库服务器ip地址吗 内容精选 换一换 排查安全组规则.排查网络ACL.排查弹性云服务器内部网卡信息.排查不通端口.相同,请查看同一个VPC内的两台弹性云服务器无法互通或者出现丢包等现象 ...

  2. IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口)

    ########################## ## IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口) #################### ...

  3. C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)

    前言 C# 用IP地址(123.125.114.144)查询位置(北京市百度公司)的东西,非常好用也非常方便,可手动升级刷新IP库,一次编码永久收益,可支持winform.asp.net等程序. 本文 ...

  4. C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)...

    前言 C# 用IP地址(123.125.114.144)查询位置(北京市百度公司)的东西,非常好用也非常方便,可手动升级刷新IP库,一次编码永久收益,可支持winform.asp.net等程序. 本文 ...

  5. C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法【转】

    前言 C# 用IP地址(123.125.114.144)查询位置(北京市百度公司)的东西,非常好用也非常方便,可手动升级刷新IP库,一次编码永久收益,可支持winform.asp.net等程序. 本文 ...

  6. 基于纯真本地数据库的 IP 地址查询 PHP 源码

    <?php /*** 纯真 IP 数据库查询 * * 参考资料:* - 纯真 IP 数据库 http://www.cz88.net/ip/* - PHP 读取纯真IP地址数据库 http://j ...

  7. php 读取纯真书库,PHP读取纯真IP数据库的函数

    PHP读取纯真IP数据库的函数,以下代码提取自Discuz! X2 $tinyipfile Discuz! 独有高压缩比算法和快速检索的IP数据库路径 下载地址:http://www.discuz.n ...

  8. 最强 Verilog 中 IP核 调用实现及思想

    写在前面:无论是在 ISE 还是 Vivado 中,关于 IP核 的调用都是非常方便的,所以对于初学者来说最关键的不是在 IP Catalog 中设置相关的 IP核 参数,而是在生成相关的 IP核 后 ...

  9. Quartus基本IP核调用及仿真

    文章目录 一.PLL PLL介绍 PLL的IP核调用 PLL仿真 二.RAM RAM介绍 RAM的IP核调用(单时钟) RAM仿真(单时钟) RAM的IP核调用(双时钟) RAM仿真(双时钟) 三.F ...

  10. vivado中复数乘法器的ip核调用及其仿真的详细介绍

    复数乘法器的ip核可在下图的​​​​​中找到 ip核的输入配置和输出配置如下图所示 当我们在选择multplier construction的Use LUTs选项时,选择的是三次乘法的算法,相比于四次 ...

最新文章

  1. 关于C语言中的数组指针、指针数组以及二级指针
  2. 生猛!PDF 版本 万赞 Java 手册开放下载!
  3. 基于uml的系统分析的网上商城_UML建模工具Enterprise Architect最新版有哪些新功能呢?立即查看...
  4. SQL Server 查询数据库里所有表的行数
  5. open表和closed表_excel工作表合并,多文件数据一键合成
  6. Spring框架XML配置文件使用外部Bean属性注入
  7. 收藏jquery兼容浏览器的ctrl+enter动作代码
  8. 支持Flash和JavaScript的图表控件FusionWidgets
  9. 计算机的flash player在哪里,flash player电脑设置管理器在哪?怎么打开
  10. 云服务器维护安全管理制度,云服务器安全管理制度
  11. ckplayer 解决flash全屏遮住了div元素,重写全屏/退出全屏方法
  12. c语言多字符和宽字符,2.1.5 多字节字符和宽字符
  13. 这是最好的企业管理手册
  14. 用计算机pol计算方位角,卡西欧计算方位角 计算器算方位角.doc
  15. 浏览器 主页 被篡改 ,怎么都修改不回来(包括 Firefox ,google Chrome) KMS激活问题
  16. Unity 接入百度AI - 动物识别
  17. paddleSlim(一)剪裁
  18. 未来的火控计算机,光电火控系统在未来数字化炮兵中的应用
  19. 2020 零基础到快速开发 Vue全家桶开发电商管理系统(Element-UI)商品分类篇
  20. 攻防世界杂项高手区3-11解题(详细)

热门文章

  1. I2S协议-一篇文章带你了解
  2. VMware Workstation 15 设置Linux共享文件夹
  3. C# 实现Remoting双向通信
  4. switch【茶杯头xic】破解xic文件下载
  5. 网易云Vip——关于.ncm 解码成 .mp3
  6. 红外通信模块——详细资料(含遥控器按键对应的码值)
  7. 【Pix4d精品教程】垂直摄影空三加密生成DOM和DSM,并按10m间距提取高程点,生成等高线
  8. 天选3安装Linux的一些问题及解决方案
  9. mysql-世界-全球数据
  10. java 验证码识别_【Java】验证码识别解决方案