当前位置:网站首页>PHP calls the pure IP database to return the specific address
PHP calls the pure IP database to return the specific address
2022-07-07 12:51:00 【Full stack programmer webmaster】
function convertip($ip) {
$ip1num = 0;
$ip2num = 0;
$ipAddr1 ="";
$ipAddr2 ="";
$dat_path = './QQWry.Dat';
if(!preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) {
return 'IP Address Error';
}
if(!$fd = @fopen($dat_path, 'rb')){
return 'IP date file not exists or access denied';
}
$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<$ipNum) {
$Middle= intval(($EndNum + $BeginNum) / 2);
fseek($fd, $ipbegin + 7 * $Middle);
$ipData1 = fread($fd, 4);
if(strlen($ipData1) < 4) {
fclose($fd);
return 'System Error';
}
$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 'System Error';
}
$DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
fseek($fd, $DataSeek);
$ipData2 = fread($fd, 4);
if(strlen($ipData2) < 4) {
fclose($fd);
return 'System Error';
}
$ip2num = implode('', unpack('L', $ipData2));
if($ip2num < 0) $ip2num += pow(2, 32);
if($ip2num < $ipNum) {
if($Middle == $BeginNum) {
fclose($fd);
return 'Unknown';
}
$BeginNum = $Middle;
}
}
$ipFlag = fread($fd, 1);
if($ipFlag == chr(1)) {
$ipSeek = fread($fd, 3);
if(strlen($ipSeek) < 3) {
fclose($fd);
return 'System Error';
}
$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 'System Error';
}
$ipFlag = fread($fd, 1);
if($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3);
if(strlen($AddrSeek2) < 3) {
fclose($fd);
return 'System Error';
}
$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 'System Error';
}
$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 = 'Unknown';
}
return $ipaddr;
} Just call this method , Pass in a correct IP Address , You can get innocence IP data The corresponding geographical location in the Library
for example :
convertip(202.96.209.5) The returned value is : Shanghai telecom
notes : The file with this method needs to be combined with the pure database file (QQWry.Dat) Put it in the same level directory , Otherwise, it needs to be modified $dat_path The content of .
preparation :
Suggest local IP Address database , succeed in inviting sb. http://www.cz88.net/ This website downloads a pure IP database , After installation , Go to the installation directory QQWry.dat Take out the documents , This is what we want IP Database , Put it in the directory you want .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/113445.html Link to the original text :https://javaforall.cn
边栏推荐
- HZOJ #236. Recursive implementation of combinatorial enumeration
- HZOJ #235. 递归实现指数型枚举
- [learn wechat from 0] [00] Course Overview
- Using stack to convert binary to decimal
- 2022危险化学品生产单位安全生产管理人员考题及在线模拟考试
- Charles: four ways to modify the input parameters or return results of the interface
- ICLR 2022 | pre training language model based on anti self attention mechanism
- Master公式。(用于计算递归的时间复杂度。)
- leetcode刷题:二叉树27(删除二叉搜索树中的节点)
- ip2long与long2IP 分析
猜你喜欢

智云健康上市:市值150亿港元 SIG经纬与京新基金是股东

OSPF exercise Report

2022a special equipment related management (boiler, pressure vessel and pressure pipeline) simulated examination question bank simulated examination platform operation

BGP third experiment report

ACL 2022 | 序列标注的小样本NER:融合标签语义的双塔BERT模型

2022A特种设备相关管理(锅炉压力容器压力管道)模拟考试题库模拟考试平台操作

NPM instal reports agent or network problems
![[pytorch practice] use pytorch to realize image style migration based on neural network](/img/20/8ed7113115709b6169be289b0c280a.png)
[pytorch practice] use pytorch to realize image style migration based on neural network

Polymorphism, final, etc

3D content generation based on nerf
随机推荐
[pytorch practice] use pytorch to realize image style migration based on neural network
[statistical learning method] learning notes - logistic regression and maximum entropy model
Layer pop-up layer closing problem
Session
【统计学习方法】学习笔记——第四章:朴素贝叶斯法
leetcode刷题:二叉树27(删除二叉搜索树中的节点)
【从 0 开始学微服务】【00】课程概述
leetcode刷题:二叉树23(二叉搜索树中的众数)
MPLS experiment
HZOJ #235. 递归实现指数型枚举
Design and implementation of communication protocol
Utiliser la pile pour convertir le binaire en décimal
2022广东省安全员A证第三批(主要负责人)考试练习题及模拟考试
ip2long与long2IP 分析
数据库安全的重要性
【统计学习方法】学习笔记——支持向量机(上)
[learn microservice from 0] [01] what is microservice
[pytorch practice] image description -- let neural network read pictures and tell stories
Cryptography series: detailed explanation of online certificate status protocol OCSP
2022a special equipment related management (boiler, pressure vessel and pressure pipeline) simulated examination question bank simulated examination platform operation