php调用纯真ip,php调用纯真IP数据库进行IP定位
调用纯真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定位相关推荐
- 怎么查看网站数据库服务器ip地址,怎么查看网站数据库服务器ip地址吗
怎么查看网站数据库服务器ip地址吗 内容精选 换一换 排查安全组规则.排查网络ACL.排查弹性云服务器内部网卡信息.排查不通端口.相同,请查看同一个VPC内的两台弹性云服务器无法互通或者出现丢包等现象 ...
- IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口)
########################## ## IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口) #################### ...
- C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)
前言 C# 用IP地址(123.125.114.144)查询位置(北京市百度公司)的东西,非常好用也非常方便,可手动升级刷新IP库,一次编码永久收益,可支持winform.asp.net等程序. 本文 ...
- C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)...
前言 C# 用IP地址(123.125.114.144)查询位置(北京市百度公司)的东西,非常好用也非常方便,可手动升级刷新IP库,一次编码永久收益,可支持winform.asp.net等程序. 本文 ...
- C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法【转】
前言 C# 用IP地址(123.125.114.144)查询位置(北京市百度公司)的东西,非常好用也非常方便,可手动升级刷新IP库,一次编码永久收益,可支持winform.asp.net等程序. 本文 ...
- 基于纯真本地数据库的 IP 地址查询 PHP 源码
<?php /*** 纯真 IP 数据库查询 * * 参考资料:* - 纯真 IP 数据库 http://www.cz88.net/ip/* - PHP 读取纯真IP地址数据库 http://j ...
- php 读取纯真书库,PHP读取纯真IP数据库的函数
PHP读取纯真IP数据库的函数,以下代码提取自Discuz! X2 $tinyipfile Discuz! 独有高压缩比算法和快速检索的IP数据库路径 下载地址:http://www.discuz.n ...
- 最强 Verilog 中 IP核 调用实现及思想
写在前面:无论是在 ISE 还是 Vivado 中,关于 IP核 的调用都是非常方便的,所以对于初学者来说最关键的不是在 IP Catalog 中设置相关的 IP核 参数,而是在生成相关的 IP核 后 ...
- Quartus基本IP核调用及仿真
文章目录 一.PLL PLL介绍 PLL的IP核调用 PLL仿真 二.RAM RAM介绍 RAM的IP核调用(单时钟) RAM仿真(单时钟) RAM的IP核调用(双时钟) RAM仿真(双时钟) 三.F ...
- vivado中复数乘法器的ip核调用及其仿真的详细介绍
复数乘法器的ip核可在下图的中找到 ip核的输入配置和输出配置如下图所示 当我们在选择multplier construction的Use LUTs选项时,选择的是三次乘法的算法,相比于四次 ...
最新文章
- 关于C语言中的数组指针、指针数组以及二级指针
- 生猛!PDF 版本 万赞 Java 手册开放下载!
- 基于uml的系统分析的网上商城_UML建模工具Enterprise Architect最新版有哪些新功能呢?立即查看...
- SQL Server 查询数据库里所有表的行数
- open表和closed表_excel工作表合并,多文件数据一键合成
- Spring框架XML配置文件使用外部Bean属性注入
- 收藏jquery兼容浏览器的ctrl+enter动作代码
- 支持Flash和JavaScript的图表控件FusionWidgets
- 计算机的flash player在哪里,flash player电脑设置管理器在哪?怎么打开
- 云服务器维护安全管理制度,云服务器安全管理制度
- ckplayer 解决flash全屏遮住了div元素,重写全屏/退出全屏方法
- c语言多字符和宽字符,2.1.5 多字节字符和宽字符
- 这是最好的企业管理手册
- 用计算机pol计算方位角,卡西欧计算方位角 计算器算方位角.doc
- 浏览器 主页 被篡改 ,怎么都修改不回来(包括 Firefox ,google Chrome) KMS激活问题
- Unity 接入百度AI - 动物识别
- paddleSlim(一)剪裁
- 未来的火控计算机,光电火控系统在未来数字化炮兵中的应用
- 2020 零基础到快速开发 Vue全家桶开发电商管理系统(Element-UI)商品分类篇
- 攻防世界杂项高手区3-11解题(详细)