亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? myipshow.c

?? 純真IP數據庫
?? C
字號:


//訪問純真IP數據庫


//參考:純真IP數據庫格式詳解

//date:2009/3/28
//author:芭蕉   
//site:bajiaoye.cublog.cn
//usage: init("QQWry.dat")  queryIp("11.11.11.11");

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


#define STRLEN  256

#define REDIRECT_MODE_1 0x01
#define REDIRECT_MODE_2 0x02

#define byte  unsigned char 
#define ulong unsigned long 

/*IP記錄由country、area兩部分組成*/
typedef struct IPLocation_s
{  
   byte country[STRLEN];
   byte area[STRLEN];
}IPLocation;

//純真IP數據庫頭
typedef struct dbHeader_s
{
        ulong firstStartIpOffset;
        ulong lastStartIpOffset;
}dbHeader;

byte* data= NULL;  //指向純真IP數據庫的指針
dbHeader dbheader; //IP數據庫頭

// 將純真IP數據庫中的所有數據讀入全局數組data
int init(byte* file);
// 查詢ipStr
IPLocation  queryIp(byte* ipStr);

// 二分法獲得IP記錄偏移量
ulong getOffsetOfIp(ulong ip);

// 從索引區獲得IP地址
ulong getIpFromIndex(ulong left,ulong* addr);
// 從記錄區獲得IP地址
ulong getIpFromRecord(ulong endIpOff);

// 將字符數組轉成一個整數
ulong getInt32(byte* buf,int num);
// 將ip從字符串形式轉化為一個長整數
ulong IpToLong(byte* ipStr);

// 給定一個ip國家地區記錄的偏移,返回一個IPLocation結構
IPLocation getIPLocation(ulong offset);
// 從offset偏移開始解析后面的字節,讀出一個地區名
int readArea(ulong offset,byte* buf);
// 將純真IP數據庫中的所有數據讀入全局數組data
int  readString(ulong offset,byte* buf);


int main()
{
        IPLocation loc;  
        int ret;      
              
        if(1 == init("QQWry.dat"))
        {
                printf("初始化失敗!\n");
                return 1;
        }

        loc=queryIp("22.192.168.229");  
          printf("\n%s\t%s\n",loc.country,loc.area);

        return 0;
}

// 功能:將純真IP數據庫中的所有數據讀入全局數組data
// 參數:file 文件字符串
// 返回值: 0 成功 

int init(byte* file)
{
        ulong fileSize;    //文件長度
        FILE* fp     ;
        
        fp=fopen(file,"rb");
        if(fp == NULL)
                return 1;
        
        //獲取文件長度
        fseek(fp,   0,   SEEK_END);  
    fileSize   =   ftell(fp);  

        //將純真IP數據庫中的所有數據讀入數組
        data=(byte*)malloc(fileSize* sizeof(byte));
        fseek(fp,0,SEEK_SET);
        fread(data,1,fileSize,fp);
        if(data == NULL)
                return 2;
        fclose(fp);
        fp=NULL;

        //讀取IP數據庫文件頭
        dbheader.firstStartIpOffset=getInt32(&data[0],4); 
        dbheader.lastStartIpOffset=getInt32(&data[4],4); 
        //printf("%ld   %ld  \n",dbheader.firstStartIpOffset,dbheader.lastStartIpOffset);

        return 0;
}


// 功能:查詢ipStr
IPLocation  queryIp(byte* ipStr)
{
        ulong ip;
        ulong offset;

        ip=IpToLong(ipStr);

        offset=getOffsetOfIp(ip);

        //printf("ip:%u ,offset: %u",ip,offset);

        return  getIPLocation(offset);
}

//功能: 二分法獲得IP記錄偏移量
//參數:ip 待查詢ip
//返回值:相對于文件頭的偏移量 (0  失敗)
ulong getOffsetOfIp(ulong ip)
{
        ulong low=0;
        ulong high=(dbheader.lastStartIpOffset-dbheader.firstStartIpOffset)/7; 
        ulong endIpOff;
        ulong mid;

        while(low<high-1)
        {
                mid=(low+high)/2;
                if(ip<getIpFromIndex(mid,&endIpOff))
                        high=mid;
                else
                        low=mid;
        }

        //printf("\nlow:%ld \n",low);
        if(ip>=getIpFromIndex(low,&endIpOff)&&ip<=getIpFromRecord(endIpOff))
        {
                return endIpOff;
        }

        return  0L;
}


// 功能:從索引區獲得IP地址
// 參數:left 索引
// 返回值:起始Ip地址
//        endIpOff 該索引所對應的結束Ip偏移量
         
ulong getIpFromIndex(ulong left,ulong* addr)
{
        ulong leftOffset = dbheader.firstStartIpOffset + (left * 7L);
        *addr=getInt32(&data[leftOffset+4],3);
        return getInt32(&data[leftOffset],4);
}


// 功能:從記錄區獲得IP地址
ulong getIpFromRecord(ulong endIpOff)
{
        return getInt32(&data[endIpOff],4);
}

// 功能:將字符數組轉成一個整數
ulong getInt32(byte* buf,int num)
{
    ulong ret=0;
        int i;

        for(i=0;i<num;i++)
        {
                ret+=(buf[i]<<(8*i));
        }
        return ret ;
}

//將ip從字符串形式轉化為一個長整數
ulong IpToLong(byte* ipStr)
{
        byte* p=ipStr;
        byte ch;
        int i=0;
        int shift=24;
        ulong ret=0,temp;

        for(i=0;i<4;i++)
        {
                temp=0;
                while((ch=*p++)!='.' && ch)
                        temp=temp*10+(ch -'0');
                ret+=(temp<<shift);
                shift-=8;
        }
        if(i!=4)
                return -1;
        return ret;
}


// 功能:給定一個ip國家地區記錄的偏移,返回一個IPLocation結構
// 參數: offset 國家記錄的起始偏移
// 返回值:IPLocation對象

IPLocation getIPLocation(ulong offset)
{
        IPLocation loc;
        byte flag_char;
        

        // 跳過4字節ip,讀取隨后字節判斷是否為標志字節
    flag_char=data[offset+4];
        
        if(flag_char == REDIRECT_MODE_1) {
                // 讀取國家偏移(3個字節)
                ulong countryOffset=getInt32(&data[offset+5],3);        
                
                // 再檢查一次標志字節,因為這個時候這個地方仍然可能是個重定向
                flag_char=data[countryOffset];
                if(flag_char == REDIRECT_MODE_2) {
                        // 讀取國家偏移        
                        int temp;
                        temp=getInt32(&data[countryOffset+1],3);
                        readString(temp,loc.country);
                } else
                        readString(countryOffset,loc.country);
                // 讀取地區標志
                readArea(countryOffset+4,loc.area); 
        } else if(flag_char == REDIRECT_MODE_2) {
        ulong countryOffset=getInt32(&data[offset+5],3);
                readString(countryOffset,loc.country);
                readArea(offset + 8,loc.area);
        } else {
                readString(offset+4,loc.country) ;
                readArea(offset+4+strlen(loc.country)+1,loc.area);
        }
        return loc;
}


// 功能:從offset偏移開始解析后面的字節,讀出一個地區名
// 參數:offset 地區記錄的起始偏移
// 返回值:0 成功 , 1 失敗

int readArea(ulong offset,byte* buf)
{
        byte flag_char;

        flag_char=data[offset];
        if(flag_char== REDIRECT_MODE_1 || flag_char == REDIRECT_MODE_2) {
                ulong areaOffset=getInt32(&data[offset+1],3);
                readString(areaOffset,buf);
        } else
        {
                readString(offset,buf);
        }
        return 0;
}

// 功能:從offset偏移處讀取一個以0結束的字符串至buf中
// 參數: offset 字符串起始偏移
// 返回值:0 成功  1 失敗

int readString(ulong offset,byte* buf)
{
        int i;
        
        buf[0]=data[offset];
        for(i = 0; buf[i] != 0;)
        {
                i++;
                offset++;
                buf[i]  = data[offset];
        }
        if(i != 0)
                return 0;
        return  1;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天亚洲婷婷| 亚洲色图在线视频| 久久精品视频一区二区三区| 欧美日韩国产精品自在自线| 日韩精品一区二区三区在线观看| 欧美大胆人体bbbb| 国产精品伦一区二区三级视频| 综合激情网...| 污片在线观看一区二区| 国产最新精品免费| 在线观看免费视频综合| 日韩精品一区二| 一区二区三区美女视频| 韩国精品一区二区| 欧美视频你懂的| 久久久777精品电影网影网 | 久久99国内精品| 国产aⅴ精品一区二区三区色成熟| 国产精品1区2区| 欧美日韩不卡在线| 亚洲日本在线看| 免费成人小视频| 一本一本久久a久久精品综合麻豆| 日韩免费福利电影在线观看| 亚洲人吸女人奶水| 国内成人精品2018免费看| 欧美综合亚洲图片综合区| 久久人人超碰精品| 日产国产欧美视频一区精品| 欧美性色黄大片| 一区在线观看视频| 国产成人精品免费看| 91精品国产欧美日韩| 亚洲一区二区三区美女| 99久久婷婷国产| 国产亚洲婷婷免费| 国产在线精品一区二区三区不卡 | 日韩亚洲欧美成人一区| 国产精品欧美一区喷水| 韩国一区二区视频| 日韩欧美你懂的| 一区二区三区日本| 91视频在线观看免费| 久久九九全国免费| 国产激情一区二区三区| 欧美videos中文字幕| 久久66热偷产精品| 中文字幕av一区二区三区高| 99精品国产91久久久久久| 亚洲一卡二卡三卡四卡无卡久久| 欧美久久久久久久久久| 免费观看久久久4p| 国产午夜三级一区二区三| 91在线你懂得| 同产精品九九九| 久久一区二区三区国产精品| 91免费在线看| 日本成人在线网站| 中文字幕一区免费在线观看| 精品视频在线看| 国产一区 二区 三区一级| 亚洲欧美在线高清| 日韩一级片在线观看| 不卡视频一二三| 日韩成人一级片| 亚洲素人一区二区| 日韩一区二区电影| 97aⅴ精品视频一二三区| 喷水一区二区三区| 亚洲视频免费看| 欧美tk丨vk视频| 在线免费观看成人短视频| 老司机午夜精品99久久| 中文字幕一区视频| 久久综合色婷婷| 欧美日韩一区不卡| 大陆成人av片| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品国产三级国产a| 在线成人免费观看| www.久久精品| 国产精品中文有码| 日韩精彩视频在线观看| 国产精品电影一区二区三区| 日韩欧美国产午夜精品| 欧美日韩精品福利| 色狠狠av一区二区三区| 国产福利精品一区二区| 久久精品国产亚洲a| 亚洲一区在线观看视频| 亚洲少妇30p| 亚洲欧洲一区二区在线播放| 欧美sm极限捆绑bd| 日韩一级视频免费观看在线| 欧美日韩一区小说| 在线精品亚洲一区二区不卡| 成人国产视频在线观看| 国产成人在线影院| 激情综合网av| 久久精品99国产国产精| 日韩精品午夜视频| 亚洲电影你懂得| 亚洲精品中文字幕乱码三区| 中文字幕中文字幕在线一区 | 亚洲一区在线免费观看| 亚洲欧洲综合另类| 一区二区三区四区在线| 亚洲激情男女视频| 亚洲色图欧美激情| 日韩理论片中文av| 夜夜精品浪潮av一区二区三区| 亚洲欧美区自拍先锋| 有码一区二区三区| 亚洲亚洲人成综合网络| 亚洲一区二区欧美激情| 亚洲风情在线资源站| 日韩国产在线观看一区| 日韩二区三区在线观看| 蜜桃视频免费观看一区| 精品一区二区三区免费毛片爱| 久久精品国产亚洲a| 日本vs亚洲vs韩国一区三区二区| 免费一级片91| 久久99精品久久久| 国产99久久久久| 91香蕉国产在线观看软件| 91丨porny丨首页| 欧美日本一区二区三区四区| 91精品国产黑色紧身裤美女| 欧美一区日韩一区| 精品国精品国产| 国产女人aaa级久久久级| 亚洲美女电影在线| 午夜一区二区三区在线观看| 狂野欧美性猛交blacked| 国产成人综合网| 色婷婷综合久久久| 91精品国产福利| 国产欧美日产一区| 亚洲午夜免费电影| 黄色日韩网站视频| 一本一本久久a久久精品综合麻豆| 欧美精品一级二级三级| 精品国一区二区三区| 中文字幕一区av| 视频一区二区国产| 国产精品99久久久久久宅男| 色综合久久88色综合天天6| 91精品国产aⅴ一区二区| 国产精品成人免费精品自在线观看| 一区二区三区91| 国产精品亚洲视频| 欧美系列亚洲系列| 久久这里只有精品视频网| 亚洲欧美激情视频在线观看一区二区三区 | 国产91精品一区二区麻豆亚洲| 91在线视频免费观看| 欧美成人精品高清在线播放| 国产精品天天摸av网| 亚洲大尺度视频在线观看| 国产成人精品www牛牛影视| 欧美乱熟臀69xxxxxx| 日本一区二区三区国色天香 | 亚洲制服欧美中文字幕中文字幕| 美女视频黄 久久| 在线亚洲欧美专区二区| 久久精品亚洲一区二区三区浴池| 亚洲成av人在线观看| 成人午夜在线播放| 日韩一区二区免费在线电影| 亚洲色图视频网站| 国产91丝袜在线18| 欧美大度的电影原声| 亚洲一区成人在线| 91色porny在线视频| 久久精品一区蜜桃臀影院| 日本美女视频一区二区| 欧美三级三级三级爽爽爽| 国产精品超碰97尤物18| 丰满少妇久久久久久久| 日韩精品一区国产麻豆| 亚洲成人精品影院| 色婷婷久久一区二区三区麻豆| 中文字幕国产精品一区二区| 麻豆精品久久精品色综合| 欧美日本在线一区| 亚洲国产精品一区二区久久恐怖片| 成人av网站在线观看免费| 久久久久国色av免费看影院| 麻豆精品精品国产自在97香蕉| 欧美精品日韩一区| 亚洲一二三四区不卡| 91国产成人在线| 亚洲美女电影在线| 色拍拍在线精品视频8848| 国产精品久久三| 99久久伊人网影院| 国产精品美女久久久久久| 成人精品电影在线观看| 国产情人综合久久777777|