在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

QQwry.dat格式區分與查詢IP位置的PHP程序

QQwry.dat格式區分與查詢IP位置的PHP程序

更新時間:2019-05-30 文章作者:未知 信息來源:網絡 閱讀次數:

QQwry.dat格式分析和查詢IP位置的PHP程序

By Strongc http://strongc.51.net/d2x/
轉載時不要去掉我的名字和我的主頁鏈接,謝謝!

以前的追捕數據庫太大,而且很久沒有更新了。
所以我想到利用QQwry.dat這個文件查詢IP所在位置,QQwry.dat 在很多地方都能找到,一般看IP地址的QQ壓縮包中都有。

但是沒有任何相關格式資料。

我分析了這個文件的格式,目前如下結論:

格式如下:

A。文件頭,共8字節
B。若干條記錄的結束地址+國家和區域
C。按照從小到大排列的若干條起始地址+結束地址偏移,定長,7字節
D。所有的IP都是用4字節整數記錄的,并且遵照Intel次序,高位在后,低位在前。
E。所有偏移量都是絕對偏移,就是從文件最開頭計算。
F。除了文件頭用了兩個4字節偏移,其余偏移量都用3字節。
G。所有的偏移量也是低位在前,高位在后
H。采用了一些字符串壓縮技術

1。文件頭,共8字節
FirstStartIpOffset:4 第一個起始IP的絕對偏移
LastStartIpOffset:4 最后一個起始IP的絕對偏移

2。起始地址+結束地址偏移記錄區
每條記錄7字節,按照起始地址從小到大排列

StartIp:4 起始地址,整數形式的IP
EndIpOffset:3 結束地址絕對偏移

3。結束地址+國家+區域記錄區

EndIP:4
國家+區域記錄:不定長

4。國家+區域記錄,有幾種形式
4.1。
國家字符串,以 0x0 結束
區域字符串,以 0x0 結束

4.2。
Flag:1 標識取值: 0x1,后面沒有Local記錄
0x2,后面還有Local記錄
sCountryOffset:3 實際的字符串要去這個偏移位置去找
LocalRec:不定長,可選 根據Flag取值而定。這個記錄也類似Country,可能采用壓縮

4.3 LocalRec結構一
flag:1 還不是十分了解這個flag含義,取值 0x1 or 0x2
sLocalOffset:3

4.4 LocalRec結構二
sLocal:不定長 普通的C風格字符串

注意:sCountryOffset指向的位置可能依然是4.2格式的,不知道為什么這樣設計。


Flag取0x1時,sCountryOffset指向的位置可能是Flag為0x2,這時,LocalRec也在這里尋找。

現在不明白當記錄Local的位置遇到0x2的標志意味著什么。

在qqwry.dat中,似乎存在一些錯誤。
個別的記錄Local會被寫為:
0x2,0x0,0x0,0x0
根據規則,應該到文件最開頭去尋找,可是,文件最開頭顯然不是記錄這些的。

我才學PHP不久,各位不要笑,你要能改進當然好,記得給我一份。
我參考了一些網上找到的代碼,就不一一寫出出處了。

說老實話,我很頭疼PHP無法明確指定變量的類型。
比如,我想讓某個數是無符號的整形,它很不聽話,非要是帶個負號,我只好嘗試各種可能的寫法..........
各位都是怎么處理類似的事情?




define('QQWRY' , $qqwry_root_path . 'QQwry.dat' ) ;

function IpToInt($Ip) {
$array=explode('.',$Ip);
$Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3];
return $Int;
}

function IntToIp($Int) {
$b1=($Int & 0xff000000)>>24;
if ($b1<0) $b1+=0x100;
$b2=($Int & 0x00ff0000)>>16;
if ($b2<0) $b2+=0x100;
$b3=($Int & 0x0000ff00)>>8;
if ($b3<0) $b3+=0x100;
$b4= $Int & 0x000000ff;
if ($b4<0) $b4+=0x100;
$Ip=$b1.'.'.$b2.'.'.$b3.'.'.$b4;
return $Ip;
}


class TQQwry
{
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 ( $offset < 12 )
return '';
@fseek($this->fp , $offset , SEEK_SET ) ;
return $this->getStr();
}
function getStr ( )
{
$str = '' ;
while ( 1 ) {
$c = fgetc ( $this->fp ) ;
if ( ord ( $c[0] ) == 0)
 break ;
$str .= $c ;
}
return $str ;
}


function qqwry ($dotip) {

$nRet;
$ip = 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 ) ;
return $nRet ;
}
}


function ip2location ( $ip )
{
$wry = new TQQwry ;
$nRet = $wry->qqwry ( $ip );
//可以利用 $nRet做一些事情,我是讓他自動記錄未知IP到一個表,代碼就不寫了。
return $wry->Country.$wry->Local ;
}


溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 91丨九色丨蝌蚪| 黄色片视频在线免费观看| 日韩av福利在线观看| 日本韩国欧美在线观看| 国产精品美女在线播放| av免费在线播放网站| 国产日韩视频在线播放| 国产美女三级视频| 人人妻人人做人人爽| 激情内射人妻1区2区3区| 成人短视频在线观看免费| 午夜一区二区视频| 亚洲精品高清无码视频| 亚洲自拍第三页| 中文字幕有码av| 国产男女无遮挡| 3d动漫一区二区三区| 欧美 日韩 亚洲 一区| 黄色特一级视频| 女同性恋一区二区| 国产免费xxx| www.欧美激情.com| 久久免费看毛片| 超碰97在线看| 波多野结衣av一区二区全免费观看| 黄频视频在线观看| 九一免费在线观看| 日韩精品一区在线视频| 97超碰青青草| 国产又粗又长又大的视频| 妺妺窝人体色www在线观看| 91午夜在线观看| 日韩视频在线观看视频| 亚洲av无日韩毛片久久| 久久精品99国产| 97超碰成人在线| 超碰成人在线免费观看| 福利在线一区二区| 亚洲乱码中文字幕久久孕妇黑人| 国产极品美女高潮无套久久久| 黄色片在线免费| 国产又粗又猛大又黄又爽| 成人一区二区av| 国产精品宾馆在线精品酒店| 日韩一区二区三区不卡视频| 干日本少妇视频| 37pao成人国产永久免费视频| 性生交免费视频| www国产免费| 不要播放器的av网站| 丰满女人性猛交| 日批视频在线免费看| 五月天视频在线观看| 成人黄色av片| 中文字幕第66页| 午夜肉伦伦影院| 波多野结衣三级在线| 熟女性饥渴一区二区三区| 亚洲一级片av| 日韩在线第三页| a级黄色小视频| 91亚洲一区二区| 91福利国产成人精品播放| 日韩成人手机在线| 毛片毛片毛片毛| 日韩免费毛片视频| 人妻av无码专区| 国产情侣av自拍| 欧美乱大交xxxxx潮喷l头像| 中文字幕第100页| 欧美一级欧美一级| 日本a级片在线观看| 男生操女生视频在线观看| 99精品视频在线看| 免费观看美女裸体网站| 欧美 国产 精品| 最近免费观看高清韩国日本大全| 亚洲综合日韩欧美| 欧美成年人视频在线观看| www.四虎成人| 国产精品人人妻人人爽人人牛| 久久视频这里有精品| 男女激情免费视频| 人人妻人人澡人人爽欧美一区| av在线免费看片| 中文字幕永久有效| 亚洲一区二区福利视频| 五月天视频在线观看| 国产成人美女视频| 国产农村妇女精品久久| 在线黄色免费看| 欧美特黄aaa| 黄色影视在线观看| 免费视频爱爱太爽了| www.avtt| 少妇黄色一级片| 欧美一级小视频| 蜜臀av.com| www.国产在线播放| 国产 日韩 欧美在线| 91国视频在线| 欧美婷婷精品激情| 国产3p露脸普通话对白| a√天堂在线观看| 黄www在线观看| 天天干天天综合| 女女同性女同一区二区三区按摩| 草草草视频在线观看| 激情综合在线观看| 日韩av在线中文| 国产爆乳无码一区二区麻豆 | 国产麻豆电影在线观看| 青娱乐国产精品视频| 欧美少妇在线观看| 免费高清在线观看免费| 超碰91在线播放| 男人添女人下面高潮视频| 三级视频中文字幕| 免费高清一区二区三区| 午夜免费一区二区| 久久久国内精品| 少妇一级淫免费放| 国产美女主播在线| 欧美极品欧美精品欧美图片| 成人精品视频在线播放| 最近免费中文字幕中文高清百度| 无尽裸体动漫2d在线观看| 国产深夜男女无套内射| 一级片免费在线观看视频| 日本黄网站色大片免费观看| 五月天激情播播| 情侣黄网站免费看| 免费在线看黄色片| 日本不卡一区二区三区四区| 在线视频一二三区| 午夜免费看毛片| 国产激情在线观看视频| 妺妺窝人体色777777| 精品一区二区三区毛片| 日韩av在线中文| 黄色国产精品视频| 日韩小视频在线播放| 8x8x华人在线| 红桃一区二区三区| 国产福利片一区二区| 欧美午夜aaaaaa免费视频| 免费黄色一级网站| 日日碰狠狠躁久久躁婷婷| 韩国中文字幕av| heyzo亚洲| 欧美 日韩精品| 国产精品后入内射日本在线观看| 国产精品久久久久久久久电影网| 久久99国产精品一区| 最近中文字幕免费mv| 中文av字幕在线观看| 日本不卡一区二区在线观看| 国内国产精品天干天干| 国产永久免费网站| 国产不卡的av| 国产一级片91| 国产免费黄视频| 日本中文字幕在线视频观看| 日本xxxxxxxxxx75| 日韩激情免费视频| 最新中文字幕2018| 色哟哟精品视频| 少妇高潮流白浆| 欧美午夜性视频| 欧美亚洲日本在线观看| 热99这里只有精品| 精品视频在线观看一区| 欧美一区二区中文字幕| 国产又黄又猛又粗又爽的视频| 黄色片久久久久| 人人爽人人爽av| 僵尸世界大战2 在线播放| 男人的天堂99| 国产精品久久久久久久99| 五月天婷婷在线观看视频| 日韩极品视频在线观看| www日韩视频| 波多野结衣三级在线| 久久综合色视频| 亚洲欧美视频二区| 青青在线免费视频| 99视频精品免费| 男人c女人视频| 中文字幕黄色大片| 欧美日韩精品在线一区二区| 亚洲黄色片免费| 91视频最新入口| 美女av免费观看| 亚洲天堂一区二区在线观看| 国产免费黄视频| 男人天堂a在线| 美国av在线播放| 天堂v在线视频| 不卡的在线视频| 熟女少妇精品一区二区|