网站开发项目书,天津网站建设制作开发公司,官方查企业信息的网站,wordpress产品介绍站长/程序员工具之PHP单程序文件实现IP归属地批量查询
支持提取IP便于直接粘贴日志#xff0c;去重防止重复查询浪费计算资源
按出现次数排序方便分析该IP行为。查询速度极快。 ?php
//整理与分享#xff1a;yujianyue15058593138qq.com
//注意还得放纯真IP数…站长/程序员工具之PHP单程序文件实现IP归属地批量查询
支持提取IP便于直接粘贴日志去重防止重复查询浪费计算资源
按出现次数排序方便分析该IP行为。查询速度极快。 ?php
//整理与分享yujianyue15058593138qq.com
//注意还得放纯真IP数据库 qqwry.dat(自行百度下载最新版) 和本查询代码同级
//核心查询程序 class IpLocation 来自网络
function tipx($str){
preg_match_all(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/, $str, $match);
//$uni array_unique($match[0]); //asort($uni);
$uni array_count_values($match[0]); // 使用array_count_values函数统计数组中每个元素的数量arsort($uni);
return $uni;//得结果可输出查看或调用
}class IpLocation {//数据文件指针var $fp;var $firstip;var $lastip;var $totalip; function getlong() {//unpack从二进制字符串对数据进行解包//将读取的little-endian编码的4个字节转化为长整型数,fread安全读取二进制文件$result unpack(Vlong, fread($this-fp, 4));return $result[long];}function getlong3() {//将读取的little-endian编码的3个字节转化为长整型数$result unpack(Vlong, fread($this-fp, 3).chr(0));return $result[long];}function packip($ip) {//pack把数据装入一个二进制字符串//ip2long将IP地址转成无符号的长整型也可以用来验证IP地址return pack(N, intval(ip2long($ip)));}function getstring($data ) {$char fread($this-fp, 1);while (ord($char) 0) { //ord返回字符的ASCII值字符串按照C格式保存以\0结束$data . $char;$char fread($this-fp, 1);}return $data;}function getarea() {$byte fread($this-fp, 1); // 标志字节switch (ord($byte)) {case 0: // 没有区域信息$area ;break;case 1:case 2: // 标志字节为1或2表示区域信息被重定向fseek($this-fp, $this-getlong3());$area $this-getstring();break;default: // 否则表示区域信息没有被重定向$area $this-getstring($byte);break;}return $area;}function getlocation($ip) {if (!$this-fp) return null; // 如果数据文件没有被正确打开则直接返回空$location[ip] gethostbyname($ip); // 域名转化为IP地址$ip $this-packip($location[ip]); // 将输入的IP地址转化为可比较的IP地址// 不合法的IP地址会被转化为255// 对分搜索$l 0; // 搜索的下边界$u $this-totalip; // 搜索的上边界$findip $this-lastip; // 如果没有找到就返回最后一条IP记录QQWry.Dat的版本信息while ($l $u) { // 当上边界小于下边界时查找失败$i floor(($l $u) / 2); // 计算近似中间记录fseek($this-fp, $this-firstip $i * 7);$beginip strrev(fread($this-fp, 4)); // 获取中间记录的开始IP地址,strrev反转字符串// strrev函数在这里的作用是将little-endian的压缩IP地址转化为big-endian的格式便于比较//关于little-endian与big-endian 参考http://baike.baidu.com/view/2368412.htmif ($ip $beginip) { // 用户的IP小于中间记录的开始IP地址时$u $i - 1; // 将搜索的上边界修改为中间记录减一}else {fseek($this-fp, $this-getlong3());$endip strrev(fread($this-fp, 4)); // 获取中间记录的结束IP地址if ($ip $endip) { // 用户的IP大于中间记录的结束IP地址时$l $i 1; // 将搜索的下边界修改为中间记录加一}else { // 用户的IP在中间记录的IP范围内时$findip $this-firstip $i * 7;break; // 则表示找到结果退出循环}}}fseek($this-fp, $findip);$location[beginip] long2ip($this-getlong()); // 用户IP所在范围的开始地址$offset $this-getlong3();fseek($this-fp, $offset);$location[endip] long2ip($this-getlong()); // 用户IP所在范围的结束地址$byte fread($this-fp, 1); // 标志字节switch (ord($byte)) {case 1: // 标志字节为1表示国家和区域信息都被同时重定向$countryOffset $this-getlong3(); // 重定向地址fseek($this-fp, $countryOffset);$byte fread($this-fp, 1); // 标志字节switch (ord($byte)) {case 2: // 标志字节为2表示国家信息又被重定向fseek($this-fp, $this-getlong3());$location[country] $this-getstring();fseek($this-fp, $countryOffset 4);$location[area] $this-getarea();break;default: // 否则表示国家信息没有被重定向$location[country] $this-getstring($byte);$location[area] $this-getarea();break;}break;case 2: // 标志字节为2表示国家信息被重定向fseek($this-fp, $this-getlong3());$location[country] $this-getstring();fseek($this-fp, $offset 8);$location[area] $this-getarea();break;default: // 否则表示国家信息没有被重定向$location[country] $this-getstring($byte);$location[area] $this-getarea();break;}if ($location[country] CZNET) { // CZNET表示没有有效信息$location[country] 未知;}if ($location[area] CZNET) {$location[area] ;}return $location;}/*** 构造函数打开 QQWry.Dat 文件并初始化类中的信息*/function __construct($filename ./qqwry.dat) {$this-fp 0;if (($this-fp fopen($filename, rb)) ! false) {$this-firstip $this-getlong();$this-lastip $this-getlong();$this-totalip ($this-lastip - $this-firstip) / 7;//注册析构函数使其在程序执行结束时执行register_shutdown_function(array($this, _IpLocation));}}/*** 析构函数用于在页面执行结束后自动关闭打开的文件*/function _IpLocation() {if ($this-fp) {fclose($this-fp);}$this-fp 0;}}
if($_GET[x] cha){
$tips isset($_POST[tips]) ? $_POST[tips] : ;
//if(!filter_var($user, FILTER_VALIDATE_EMAIL)){ exit(电子邮件格式错误);}
$txts str_replace(array(\r\n,\r,\n,\t,,, ),|,$tips);
$lisa tipx($txts); //explode(|,$txts);
echo h2strong以下信息仅供参考/strong(提取IP/已去重/按出现次数降序排序)/h2\r\n;
echo table cellspacing\0\ class\table\ cellpadding\0\\r\n;
echo tr classtttd width99IP/tdtd width60出现次数/tdtd width99IP/24/tdtd归属地/td/tr\r\n;
$iplocation new IpLocation(); $ipx array();
foreach($lisa as $zz $ges){$location $iplocation-getlocation($zz);$zi explode(.,$zz); $zip $zi[0]...$zi[1]...$zi[2]..0/24;$diqu mb_convert_encoding($location[country]._.$location[area], utf-8, gbk);echo trtd$zz/tdtd$ges/tdtd$zip/tdtd$diqu/td/tr\r\n;
}
echo /table\r\n;
exit();
}
?
!DOCTYPE html
html
head
title批量查IP归属地/title
meta charsetUTF-8
meta nameviewport contentwidthdevice-width,minimum-scale1.0,maximum-scale1.0
meta nameapple-mobile-web-app-capable contentyes /
script typetext/javascript
console.log(问题反馈电话:,15058593138);
console.log(问题反馈邮件:,admin12391.net);
function $(objId){
return document.getElementById(objId);
}
function loadcha(xid) {
var xmlhttp;
var Stxt numsaa;
Stxttips encodeURIComponent($(tips).value);
//$(tips).innerHTML 正在加载...;
if (window.XMLHttpRequest) {
xmlhttp new XMLHttpRequest();
} else {
xmlhttp new ActiveXObject(Microsoft.XMLHTTP);
}
xmlhttp.onreadystatechange function() {
if (xmlhttp.readyState 4 xmlhttp.status 200) {
var btxt xmlhttp.response;
if(btxt err01){ $(tipx).innerHTML !; return false;}
$(tipx).innerHTML xmlhttp.response;
}
}
xmlhttp.open(POST, ?xchattMath.random(), true);
xmlhttp.setRequestHeader(Content-type, application/x-www-form-urlencoded);
xmlhttp.send(Stxt);
}/script
style
div,#tipx{display:block;width:99.7%;border:0;margin-top:5px;}
textarea{display:block;width:99.7%;border:1px solid #ccc;height:160px;}
table{margin:20px auto;border-left:1px solid #a2c6d3;border-top:3px solid #0180CF;font-size:12px;width:99.7%;}
table td{border-right:1px solid #a2c6d3;border-bottom:1px solid #a2c6d3;padding:2px;word-wrap:break-word;word-break:break-all;}
td{min-width:30px;max-width:490px;}
.tt{background-color: #f2f2f2;}
#submit{ height:35px;}
/style
/head
bodyform classform idform methodPOST act?actcha h3批量查询IP归属地/h3
p自动提文本中IP地址去重和出现次数降序并查询归属地!/p
textarea idtips
3.224.220.24
52.70.240.24
202.63.172.24
/textareainput typebutton idsubmit value提交查询 onclickloadcha(xid)
div idtipx/div/form
/body
/html