qqwry(wrydat)
php怎么和qqwry.dat连接判断
r?php
define('__QQWRY__' , dirname(__FILE__)."/QQWry.Dat");
//echo __QQWRY__;
class QQWry{
var $StartIP=0;
var $EndIP=0;
var $Country='';
var $Local='';
var $CountryFlag=0; // 标识 Country位置
// 0x01,随后3字节为Country偏移,没有Local
// 0x02,随后3字节为Country偏移,接着是Local
// 其他,Country,Local,Local有类似的压缩。可能多重引用。
var $fp;
var $FirstStartIp=0;
var $LastStartIp=0;
var $EndIpOff=0 ;
function getStartIp($RecNo){
$offset=$this-FirstStartIp+$RecNo * 7 ;
@fseek($this-fp,$offset,SEEK_SET) ;
$buf=fread($this-fp ,7) ;
$this-EndIpOff=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])* 256*256);
$this-StartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
return $this-StartIp;
}
function getEndIp(){
@fseek ( $this-fp , $this-EndIpOff , SEEK_SET ) ;
$buf=fread ( $this-fp , 5 ) ;
$this-EndIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
$this-CountryFlag=ord ( $buf[4] ) ;
return $this-EndIp ;
}
function getCountry(){
switch ( $this-CountryFlag ) {
case 1:
case 2:
$this-Country=$this-getFlagStr ( $this-EndIpOff+4) ;
//echo sprintf('EndIpOffset=(%x)',$this-EndIpOff );
$this-Local=( 1 == $this-CountryFlag )? '' : $this-getFlagStr ( $this-EndIpOff+8);
break ;
default :
$this-Country=$this-getFlagStr ($this-EndIpOff+4) ;
$this-Local=$this-getFlagStr ( ftell ( $this-fp )) ;
}
}
function getFlagStr ($offset){
$flag=0 ;
while(1){
@fseek($this-fp ,$offset,SEEK_SET) ;
$flag=ord(fgetc($this-fp ) ) ;
if ( $flag == 1 || $flag == 2 ) {
$buf=fread ($this-fp , 3 ) ;
if ($flag==2){
$this-CountryFlag=2;
$this-EndIpOff=$offset - 4 ;
}
$offset=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256);
}
else{
break ;
}
}
if($offset12)
return '';
@fseek($this-fp , $offset , SEEK_SET ) ;
return $this-getStr();
}
function getStr ( )
{
$str='' ;
while ( 1 ) {
$c=fgetc ( $this-fp ) ;
//echo "$cn" ;
if(ord($c[0])== 0 )
break ;
$str.= $c ;
}
//echo "$str n";
return $str ;
}
function qqwry ($dotip='') {
if(!$dotip)return;
if(ereg("^(127)",$dotip)){$this-Country=本地网络;return;}
elseif(ereg("^(192)",$dotip)) {$this-Country=局域网;return;}
$nRet;
$ip=$this-IpToInt ( $dotip );
$this-fp= fopen(__QQWRY__, "rb");
if ($this-fp == NULL) {
$szLocal= "OpenFileError";
return 1;
}
@fseek ( $this-fp , 0 , SEEK_SET ) ;
$buf=fread ( $this-fp , 8 ) ;
$this-FirstStartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
$this-LastStartIp=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf[7])*256*256*256);
$RecordCount= floor( ( $this-LastStartIp - $this-FirstStartIp ) / 7);
if ($RecordCount = 1){
$this-Country="FileDataError";
fclose($this-fp) ;
return 2 ;
}
$RangB= 0;
$RangE= $RecordCount;
// Match ...
while ($RangB $RangE-1)
{
$RecNo= floor(($RangB + $RangE) / 2);
$this-getStartIp ( $RecNo ) ;
if ( $ip == $this-StartIp )
{
$RangB=$RecNo ;
break ;
}
if ($ip$this-StartIp)
$RangB= $RecNo;
else
$RangE= $RecNo;
}
$this-getStartIp ( $RangB ) ;
$this-getEndIp ( ) ;
if ( ( $this-StartIp = $ip ) ( $this-EndIp = $ip ) ){
$nRet=0 ;
$this-getCountry ( ) ;
//这样不太好..............所以..........
$this-Local=str_replace("(我们一定要解放台湾!!!)", "", $this-Local);
}
else{
$nRet=3 ;
$this-Country='未知' ;
$this-Local='' ;
}
fclose ( $this-fp );
$this-Country=preg_replace("/(CZ88.NET)|(纯真网络)/","",$this-Country);
$this-Local=preg_replace("/(CZ88.NET)|(纯真网络)/","",$this-Local);
//////////////看看 $nRet在上面的值是什么0和3,于是将下面的行注释掉
return $nRet ;
//return "$this-Country $this-Local";#如此直接返回位置和国家便可以了
}
function IpToInt($Ip) {
$array=explode('.',$Ip);
$Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3];
return $Int;
}
}
function GetIP(){//获取IP
return $_SERVER[REMOTE_ADDR]?$_SERVER[REMOTE_ADDR]:$GLOBALS[HTTP_SERVER_VARS][REMOTE_ADDR];
}
?
根据ip获取物理地址
?php
include_once('./qqwry.php');
$QQWry=new QQWry;
function get_real_ip(){
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i count($ips); $i++) {
if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
return $ip;
}
function is_ip($str) {
$ip = explode(".", $str);
if (count($ip)4 || count($ip)4) return 0;
foreach($ip as $ip_addr) {
if ( !is_numeric($ip_addr) ) return 0;
if ( $ip_addr0 || $ip_addr255 ) return 0;
}
return 1;
}
if($_POST['ip']){
$ip=$_POST['ip'];
preg_match('/((\w|-)+\.)+[a-z]{2,4}/i',$ip) ? $ip=gethostbyname($ip) : $ip;
if(is_ip($ip)){
$ifErr=$QQWry-QQWry($ip);
echo "您查询的IP:nbsp;".$ip."brIP详细地址:nbsp;".$QQWry-Country.$QQWry-Local."br/";
}else
{
echo "囧,你输入的IP,511Cha居然不能查询到!";
}
}else{
$ip=get_real_ip();
if (($_SERVER["HTTP_CLIENT_IP"]) or ($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ifErr=$QQWry-QQWry($ip);
echo "您的真实P是".$ip."nbsp;nbsp;nbsp;nbsp;nbsp;来自".$QQWry-Country.$QQWry-Local."br/";
$ip=$_SERVER['REMOTE_ADDR'];
$ifErr=$QQWry-QQWry($ip);
echo "您的代理IP是".$ip."nbsp;nbsp;nbsp;nbsp;nbsp;来自".$QQWry-Country.$QQWry-Local;
}
else{
$ip=$_SERVER['REMOTE_ADDR'];
$ifErr=$QQWry-QQWry($ip);
echo "您的IP是:".$ip."nbsp;nbsp;nbsp;nbsp;nbsp;来自:".$QQWry-Country.$QQWry-Local;
}
}
?
也可以向楼上说插入数据库中,不过qqwry.dat最新版有9m多……
用什么可以打开QQwry.dat文件?
QQWry.Dat是显IP版QQ(彩虹外挂等),纯真IP数据库查询器等的IP数据库文件。打开方法如下:
1、dat文件有很多种类型大多数情况下,.dat文件是程序使用的数据,它只是开发者为了清楚文件的意思而自己定义的,也可以命名成别的扩展名。
2、可以用任何编辑工具新建文件,将其命名为.dat。所以,.dat文件的打开工具也不一样,比如,有些其实是文本文件,只是将扩展名改写成.dat,就可以用文本编辑工具打开;
3、最常见的dat文件还有VCD影音文件,这种文件可以用解霸,暴风影音,Windows meadia player之类的播放软件打开(这个情况们碰到比较常见)。
QQWry.Dat是啥文件能不能删掉啊
QQWry.Dat是显IP版QQ(彩虹外挂等),纯真IP数据库查询器等的IP数据库文件 可以通过下载纯真IP数据库查询器来得到这个文件,纯真IP数据库查询器拥有在线更新IP库功能 ,尽量不要删