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

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

?? unttqqwry.pas

?? 冰河2008遠程控制迎奧運版,國內鼎鼎大名的老牌遠控
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
procedure TQQWry.GetIPLocationByEndIPOffset(EndIPOffset: int64; var IPLocation: PChar);
const
  //實際信息字串存放位置的重定向模式
  REDIRECT_MODE_1 = 1;
  REDIRECT_MODE_2 = 2;
var
  RedirectMode: byte;
  pSplit: PChar;
  CountryFirstOffset, CountrySecondOffset: int64;
  IPCountryLen: integer;
  IPArea: PChar;
  ///**
  //* 給定一個地區信息偏移值,返回在數據文件中該偏移量下的地區信息
  //* @param  (AreaOffset, IPArea) (地區信息在文件中的偏移值, 返回的地區信息)
  //* @return
  //*/  
  procedure ReadIPAreaByAreaOffset(AreaOffset: int64; var IPArea: PChar);
  var
    ModeByte: byte;
    ReadAreaOffset: int64;
  begin
    try
      ModeByte:=0;
      ReadAreaOffset:=0;
      
      //取內存文件映射首地址
      pQQWryPos:=pQQWryMapFile;
      //移到偏移處
      inc(pQQWryPos, AreaOffset);
      //讀模式
      CopyMemory(@ModeByte, pQQWryPos, 1);
      //模式1或2,后3字節為偏移
      if (ModeByte = REDIRECT_MODE_1) or (ModeByte = REDIRECT_MODE_2) then begin
        //讀偏移
        Inc(pQQWryPos);
        CopyMemory(@ReadAreaOffset, pQQWryPos, 3);
        //若偏移為0,則為未知地區,對于以前的數據庫有這個錯誤
        if ReadAreaOffset=0 then IPArea:='未知地區'
        else begin  //去偏移處讀字符串
          pQQWryPos:=pQQWryMapFile;
          Inc(pQQWryPos, ReadAreaOffset);
          CopyMemory(IPArea, PChar(pQQWryPos), StrLen(PChar(pQQWryPos)));
        end;
      //沒有模式,直接讀字符串
      end else begin
        pQQWryPos:=pQQWryMapFile;
        Inc(pQQWryPos, AreaOffset);
        CopyMemory(IPArea, PChar(pQQWryPos), StrLen(PChar(pQQWryPos)));
      end;
    except
      on E: Exception do begin
        raise Exception.Create(E.Message);
        exit;
      end;      
    end;
  end;
begin
  try
    RedirectMode:=0;
    pSplit:=' ';
    CountryFirstOffset:=0;
    CountrySecondOffset:=0;
    
    //取內存文件映射首地址
    pQQWryPos:=pQQWryMapFile;
    //根據記錄ID號移到該記錄號的索引處
    Inc(pQQWryPos, EndIPOffset + 4);

    CopyMemory(@RedirectMode, pQQWryPos, 1);
    //重定向模式1的處理
    if RedirectMode = REDIRECT_MODE_1 then begin
      Inc(pQQWryPos);
      //模式值為1,則后3個字節的內容為國家信息的偏移值
      CopyMemory(@CountryFirstOffset, pQQWryPos, 3);
      //進行重定向
      pQQWryPos:=pQQWryMapFile;
      Inc(pQQWryPos, CountryFirstOffset);
      //第二次讀取國家信息的重定向模式
      CopyMemory(@RedirectMode, pQQWryPos, 1);
      //第二次重定向模式為模式2的處理
      if RedirectMode = REDIRECT_MODE_2 then begin
          //后3字節的內容即為第二次重定向偏移值
          Inc(pQQWryPos);
          CopyMemory(@CountrySecondOffset, pQQWryPos, 3);
          //讀取第二次重定向偏移值下的字符串值,即為國家信息
          pQQWryPos:=pQQWryMapFile;
          Inc(pQQWryPos, CountrySecondOffset);
          IPCountryLen:=StrLen(PChar(pQQWryPos));
          CopyMemory(IPLocation, PChar(pQQWryPos), IPCountryLen);
          //用空格分割國家和地區
          CopyMemory(@IPLocation[IPCountryLen], pSplit, 1);
          
          //若第一次重定向模式為1,進行重定向后讀取的第二次重定向模式為2,
          //則地區信息存放在第一次國家信息偏移值的后面
          IPArea:=PChar(@IPLocation[IPCountryLen + 1]);
          ReadIPAreaByAreaOffset(CountryFirstOffset + 4, IPArea);

      //第二次重定向模式不是模式2的處理
      end else begin
          IPCountryLen:=StrLen(PChar(pQQWryPos));
          CopyMemory(IPLocation, PChar(pQQWryPos), IPCountryLen);
          //用空格分割國家和地區
          CopyMemory(@IPLocation[IPCountryLen], pSplit, 1);
          //讀地區信息
          IPArea:=PChar(@IPLocation[IPCountryLen + 1]);
          ReadIPAreaByAreaOffset(CountryFirstOffset + IPCountryLen + 1, IPArea);
      end;

    //重定向模式2的處理
    end else if RedirectMode = REDIRECT_MODE_2 then begin
      Inc(pQQWryPos);
      //模式值為2,則后3個字節的內容為國家信息的偏移值
      CopyMemory(@CountrySecondOffset, pQQWryPos, 3);
      //進行重定向
      pQQWryPos:=pQQWryMapFile;
      Inc(pQQWryPos, CountrySecondOffset);
      //國家信息
      IPCountryLen:=StrLen(PChar(pQQWryPos));
      CopyMemory(IPLocation, PChar(pQQWryPos), IPCountryLen);
      //用空格分割國家和地區
      CopyMemory(@IPLocation[IPCountryLen], pSplit, 1);
      
      //地區信息
      IPArea:=PChar(@IPLocation[IPCountryLen + 1]);
      ReadIPAreaByAreaOffset(EndIPOffset + 8, IPArea);
    //不是重定向模式的處理,存放的即是IP地址信息
    end else begin
      //國家信息
      IPCountryLen:=StrLen(PChar(pQQWryPos));
      CopyMemory(IPLocation, PChar(pQQWryPos), IPCountryLen);
      //用空格分割國家和地區
      CopyMemory(@IPLocation[IPCountryLen], pSplit, 1);

      //地區信息
      IPArea:=PChar(@IPLocation[IPCountryLen + 1]);
      ReadIPAreaByAreaOffset(EndIPOffset + 4 + IPCountryLen + 1, IPArea);
    end;
  except
    on E: Exception do begin
      raise Exception.Create(E.Message);
      exit;
    end;
  end;
end;

///**
//* 給定一個IP地址信息記錄號,返回該項記錄的信息,用Stringlist接收該條信息,效率較低
//* @param  (IPRecordID, IPData) (IP地址信息記錄號, 返回的該條信息:①起始IP ②結束IP ③國家 ④地區)
//* @return 無
//*/
procedure TQQWry.GetIPDataByIPRecordID(IPRecordID: int64; var IPData: TStringlist);
var
  aryIPData: array[0..254] of char;
  pIPData: PChar;
  i: integer;
begin
  try
    FillChar(aryIPData, SizeOf(aryIPData), #0);
    pIPData:=PChar(@aryIPData[0]);
    
    GetIPDataByIPRecordID(IPRecordID, pIPData);
    //去掉結尾的回車符
    pIPData[StrLen(pIPData) - 2]:=#0;
    IPData.CommaText:=StrPas(pIPData);
    //有可能地區為空,也有可能地區中含有空格
    for i:=1 to 4 - IPData.Count do
      IPData.Add('無');
    for i:=5 to IPData.Count do
      IPData[3]:=IPData[3] + ' ' + IPData[i - 1];    
  except
    on E: Exception do begin
      raise Exception.Create(E.Message);
      exit;
    end;
  end;
end;

///**
//* 給定一個IP地址(四段點分字符串形式),返回該IP的數值
//* @param  (IP)  (IP地址,四段點分字符串形式)
//* @return 該IP的數值
//*/
function TQQWry.GetIPValue(IP: string): int64;
var
  slIP: TStringlist;
  i: integer;
  function SplitStringToStringlist(aString: string; aSplitChar: string): TStringlist;
  begin
    Result:=TStringList.Create;
    while pos(aSplitChar, aString)>0 do begin
      Result.Add(copy(aString, 1, pos(aSplitChar, aString)-1));
      aString:=copy(aString, pos(aSplitChar, aString)+1, length(aString)-pos(aSplitChar, aString));
    end;
    Result.Add(aString);
  end;
begin
  try
    slIP:=SplitStringToStringlist(IP, '.');
    Result:=0;
    for i:=3 downto 0 do begin
      Result:=Result + StrToInt(slIP[i]) * trunc(power(256, 3-i));
    end;
  except
    on E: Exception do begin
      raise Exception.Create('無效的IP地址!');
      exit;
    end;      
  end;
end;

///**
//* 給定一個IP地址(四段點分字符串形式),返回該IP地址所在的記錄號
//* @param  IP  IP地址(四段點分字符串形式)  string
//* @return 該IP地址所在的記錄號  Cardinal
//*/
function TQQWry.GetIPDataID(IP: string): int64;
  function SearchIPDataID(IPRecordFrom, IPRecordTo, IPValue: int64): int64;
  var
    CompareIPValue1, CompareIPValue2: int64;
  begin
    Result:=0;
    CompareIPValue1:=0;
    CompareIPValue2:=0;
    
    pQQWryPos:=pQQWryMapFile;
    Inc(pQQWryPos, FirstIPIndexOffset + ((IPRecordTo - IPRecordFrom) div 2 + IPRecordFrom - 1) * 7);
    CopyMemory(@CompareIPValue1, pQQWryPos, 4); 
    pQQWryPos:=pQQWryMapFile;
    Inc(pQQWryPos, FirstIPIndexOffset + ((IPRecordTo - IPRecordFrom) div 2 + IPRecordFrom) * 7);
    CopyMemory(@CompareIPValue2, pQQWryPos, 4);
    //找到了
    if (IPRecordFrom=IPRecordTo) or ((IPValue>=CompareIPValue1) and (IPValue<CompareIPValue2)) then begin
      Result:=(IPRecordTo - IPRecordFrom) div 2 + IPRecordFrom;
    end else
      //后半段找
      if IPValue>CompareIPValue1 then begin
        Result:=SearchIPDataID((IPRecordTo - IPRecordFrom) div 2 + IPRecordFrom + 1, IPRecordTo, IPValue);
      end else
        //前半段找
        if IPValue<CompareIPValue1 then begin
          Result:=SearchIPDataID(IPRecordFrom, (IPRecordTo - IPRecordFrom) div 2 + IPRecordFrom - 1, IPValue);
        end;
  end;
begin
  try
    Result:=SearchIPDataID(1, GetIPDataNum, GetIPValue(IP));
  except
    on E: Exception do begin
      Destroy;
      raise Exception.Create(E.Message);
      exit;
    end;    
  end;
end;

///**
//* 將IP地址數據庫解壓成文本文件
//* @param  (ATxtFileName) (解壓后的文本文件全名)
//* @return -1為解壓失敗,非-1值為解壓所耗時間,單位毫秒
//*/
function TQQWry.ExtractIPDataToTxtFile(ATxtFileName: string): integer;
var
  QQWryMemoryStream: TMemoryStream;
  i: integer;
  IPData, NowPos: PChar;
  TimeCounter: DWORD;
  pReturn: PChar;
begin
  result:=-1;
  try
    IPData:=StrAlloc(41943040);
    NowPos:=IPData;

    TimeCounter:=GetTickCount;
    for i:=1 to GetIPDataNum do begin
      GetIPDataByIPRecordID(i, NowPos);
      Inc(NowPos, StrLen(NowPos));
    end;
    pReturn:=#13#10;
    NowPos:=StrECopy(NowPos, pReturn);
    NowPos:=StrECopy(NowPos, pReturn);
    NowPos:=StrECopy(NowPos, PChar(format('IP數據庫共有數據 : %d 條', [GetIPDataNum])));
    NowPos:=StrECopy(NowPos, pReturn);

    QQWryMemoryStream:=TMemoryStream.Create;
    QQWryMemoryStream.SetSize(NowPos - IPData);
    QQWryMemoryStream.WriteBuffer(IPData^, NowPos - IPData);
    QQWryMemoryStream.SaveToFile(ATxtFileName);
    StrDispose(IPData);
    QQWryMemoryStream.Destroy;
    result:=GetTickCount-TimeCounter;
  except
    on E: Exception do begin
      raise Exception.Create(E.Message);
      exit;
    end;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区日韩二区欧美三区| 亚洲国产乱码最新视频| 欧美精品欧美精品系列| 91在线免费视频观看| 成人爱爱电影网址| 成人一区二区三区视频| 国产麻豆成人传媒免费观看| 国产精品一区专区| 国产成人自拍在线| av毛片久久久久**hd| 成人免费视频视频| 91在线云播放| 69av一区二区三区| 精品欧美一区二区三区精品久久| 精品久久久久久久一区二区蜜臀| 欧美不卡激情三级在线观看| 久久久久久亚洲综合影院红桃| 久久青草国产手机看片福利盒子 | 色婷婷综合久久久中文字幕| 一本到不卡精品视频在线观看| 一本一本久久a久久精品综合麻豆| 91美女片黄在线观看| 欧美精品第1页| 久久蜜桃av一区二区天堂| 国产精品乱码人人做人人爱| 亚洲欧美电影一区二区| 日韩成人精品在线| 国产不卡视频在线观看| 欧日韩精品视频| 日韩美女视频一区二区在线观看| 亚洲国产高清不卡| 一区二区欧美在线观看| 精品一区二区三区久久| 成人av午夜影院| 欧美精品乱码久久久久久按摩| 亚洲精品一区二区三区四区高清| 国产精品久久久久久久午夜片| 亚洲第一成人在线| 国产69精品久久久久777| 欧美午夜不卡视频| 国产欧美在线观看一区| 亚洲 欧美综合在线网络| 国产精品一区2区| 91福利小视频| 日本一区二区三区四区在线视频| 亚洲另类一区二区| 国产乱国产乱300精品| 欧美在线视频你懂得| 久久精品一区二区三区不卡| 一区二区在线观看免费| 丁香婷婷综合五月| 欧美一级片免费看| 伊人性伊人情综合网| 国产成人av电影在线播放| 91精品国产综合久久香蕉麻豆| 久久综合资源网| 天天综合网 天天综合色| 99久久综合99久久综合网站| wwww国产精品欧美| 天堂蜜桃一区二区三区| 色婷婷国产精品久久包臀| 亚洲国产精品激情在线观看| 奇米精品一区二区三区在线观看一| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩女优电影在线观看| 亚洲一区二区三区激情| 色综合天天综合在线视频| 国产精品美女久久久久久久久| 久久99久久99| 精品国产91久久久久久久妲己| 中文字幕一区二区在线观看| 成人午夜激情片| 欧美国产一区在线| 成人美女视频在线看| 国产嫩草影院久久久久| 国产成人综合在线| 国产女主播一区| 高潮精品一区videoshd| 中文字幕+乱码+中文字幕一区| 国产精品一区二区久久精品爱涩| 欧美成人伊人久久综合网| 九九精品视频在线看| 欧美成人午夜电影| 国产一区二区三区高清播放| 久久女同精品一区二区| 国产精品一区二区免费不卡| 久久亚洲捆绑美女| 国产91在线观看丝袜| 国产精品成人免费| 91麻豆自制传媒国产之光| 亚洲特黄一级片| 欧美午夜免费电影| 天天免费综合色| 欧美成人a在线| 成人午夜又粗又硬又大| 亚洲欧美在线观看| 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品午夜在线| 91免费版在线| 美女视频黄频大全不卡视频在线播放 | 亚洲午夜免费电影| 欧美一区二区三区日韩| 国产精品77777竹菊影视小说| 中文字幕第一区综合| 日本道在线观看一区二区| 午夜精品一区在线观看| 国产亚洲一本大道中文在线| 99精品久久久久久| 日韩不卡一二三区| 国产精品视频一二三| 欧美精品一二三区| 成人激情小说网站| 日韩有码一区二区三区| 亚洲国产成人私人影院tom| 欧洲精品中文字幕| 狠狠色丁香久久婷婷综| 亚洲欧美韩国综合色| 日韩一区二区精品| 色婷婷狠狠综合| 国产一区二区三区四区在线观看| 亚洲精品国产a久久久久久 | 国产a精品视频| 亚洲国产另类av| 国产精品网站导航| 日韩一卡二卡三卡| 在线观看网站黄不卡| 国产经典欧美精品| 日本特黄久久久高潮| 一区二区三区国产精华| 国产目拍亚洲精品99久久精品| 777精品伊人久久久久大香线蕉| eeuss鲁片一区二区三区| 精品一区二区日韩| 亚洲va欧美va人人爽| 亚洲欧美国产三级| 国产精品电影一区二区三区| 国产精品资源在线| 日韩精品电影一区亚洲| 国产精品三级av在线播放| 日韩视频中午一区| 欧美无砖砖区免费| 色8久久人人97超碰香蕉987| 国产高清精品久久久久| 国产一区二区不卡在线| 视频在线观看国产精品| 一区二区免费看| 一区二区在线看| 亚洲少妇中出一区| 国产精品拍天天在线| 国产日韩v精品一区二区| 亚洲精品一区二区三区香蕉| 日韩欧美视频一区| 日韩三级.com| 精品久久久久久久人人人人传媒 | 一区二区三区鲁丝不卡| 亚洲美女区一区| 亚洲欧美另类综合偷拍| 亚洲黄色性网站| 一级女性全黄久久生活片免费| 1区2区3区国产精品| 亚洲精品大片www| 国产精品毛片久久久久久| 国产欧美日韩不卡免费| 国产精品高潮呻吟久久| 中文字幕一区二区三区蜜月 | 国产乱子伦视频一区二区三区 | 在线综合视频播放| 日韩午夜精品电影| 久久久天堂av| 国产精品每日更新| 亚洲国产综合在线| 日韩电影在线一区二区三区| 奇米色一区二区| 国产一区在线不卡| www.在线欧美| 欧美三区在线观看| www国产精品av| 亚洲日本在线看| 久久精品亚洲国产奇米99| 欧美在线视频不卡| 欧美丰满少妇xxxxx高潮对白| 欧美成人午夜电影| 国产精品久久久久一区 | 日韩西西人体444www| 久久影院视频免费| 一区二区在线免费观看| 蜜桃视频免费观看一区| 国产一区二区在线视频| 日本丶国产丶欧美色综合| 日韩女同互慰一区二区| 亚洲视频一二三区| 看电视剧不卡顿的网站| 99视频国产精品| 日韩精品一区在线| 亚洲视频香蕉人妖| 激情国产一区二区| 在线免费精品视频| 国产日韩欧美不卡在线| 图片区小说区区亚洲影院| 国产精品影视天天线|