电脑安全

您当前的位置:主页 > 电脑安全 >

ip地址查询-网络编程

来源:[db:来源]标题:   地址    编辑:电脑技术全能网 时间:2019-09-19 12:35

原标题:ip地址查询-网络编程
   ip地点查问,ip查问,ip地点地查问<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>ip归属地</title></head><body><h1>站长喜好者网IP地点查问</h1><form id="form1" name="form1" method="post" action=""> <input type="text" name="ipinfo" id="ipinfo" style="border:solid 1px #fdbdd5" /> <input type="submit" name="button" id="button" value="查问" style="border:solid 1px #fdbdd5;width:50px" /></form><?phpinclude("ipcheck.class.php");$ipinfo=$_POST['ipinfo'];$iptest=new IpLocation();echo $iptest->getlocation($ipinfo);?></body></html>好当初来看看ipcheck.class.php文件.<?php/*** @author 网事如风* E-mail:rainrenamy@gmail.com* 团体网址:http://www.adminfan.com* 演示地点:http;//www.adminfan.com/seo/ip.php*/class IpLocation {/*** QQWry.Dat文件指针* @var resource*/var $fp;/*** 第一条IP记载的偏移地点** @var int*/var $firstip;/*** 最初一条IP记载的偏移地点** @var int*/var $lastip;/*** IP记载的总条数(不包括版本信息记载)** @var int*/var $totalip;/*** 前往读取的长整型数** @access private* @return int*/function getlong() {//将读取的little-endian编码的4个字节转化为长整型数$result = unpack('Vlong', fread($this->fp, 4));return $result['long'];}/*** 前往读取的3个字节的长整型数** @access private* @return int*/function getlong3() {//将读取的little-endian编码的3个字节转化为长整型数$result = unpack('Vlong', fread($this->fp, 3).chr(0));return $result['long'];}/*** 前往紧缩后可停止比拟的IP地点** @access private* @param string $ip* @return string*/function packip($ip) {// 将IP地点转化为长整型数,假如在PHP5中,IP地点过错,则前往False,// 这时intval将Flase转化为整数-1,以后紧缩成big-endian编码的字符串return pack('N', intval(ip2long($ip)));}/*** 前往读取的字符串** @access private* @param string $data* @return string*/function getstring($data = "") {$char = fread($this->fp, 1);while (ord($char) > 0) { // 字符串依照C格局保留,以/0停止$data .= $char; // 将读取的字符衔接到给定字符串以后$char = fread($this->fp, 1);}return $data;}/*** 前往地域信息** @access private* @return string*/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;}/*** 依据所给 IP 地点或域名前往地点地域信息** @access public* @param string $ip* @return array*/function getlocation($ip) {if (!$this->fp) return null; // 假如数据文件没有被准确翻开,则间接前往空$location['ip'] = gethostbyname($ip); // 将输出的域名转化为IP地点$ip = $this->packip($location['ip']); // 将输出的IP地点转化为可比拟的IP地点// 分歧法的IP地点会被转化为255.255.255.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函数在这里的感化是将little-endian的紧缩IP地点转化为big-endian的格局// 以便用于比拟,前面雷同。if ($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; // 则表现找到成果,加入轮回}}}//猎取查找到的IP地舆地位信息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'] == " CZ88.NET") { // CZ88.NET表现没有无效信息$location['country'] = "未知";}if ($location['area'] == " CZ88.NET") {$location['area'] = "";}//return $location;echo "你的IP:".$location['ip']."<br />来自".$location['country'].$location['area'];}/*** 结构函数,翻开 QQWry.Dat 文件并初始化类中的信息** @param string $filename* @return IpLocation*/function IpLocation($filename = "QQWry.Dat") {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() {fclose($this->fp);}}?>

上一篇:Ack函数,php-网络编程

下一篇:没有了