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

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

?? http.pas

?? 網絡掃描
?? PAS
字號:
{
    websniffer - HTTP.pas (Ver1.1) (HTTP connection analysis)
    Copyright (C) 2005 Josef Sch黷zenberger

    websniffer is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    websniffer is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with websniffer; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
}
unit HTTP;

interface
uses
  Classes,PcapNet,buffer;
type
 THTTPContext=class
 private
   procedure Reset;
 public
   FHasFoundGet,FHasFoundHTTPReply,FChunked,FDone,FIsGZIP:Boolean;
   FHTTPReplyCode,FContentLengthOrig,FContentLength,FChunkLen:integer;
   FRangeFrom,FRangeTo,FRangeTotal:integer;
   FFileName,FHost,FChunkLenStrPart:String;
   FQuota:Single;                             
   FOwner:TList;
   constructor create(Owner:TList);
   function onRequestStream(buf:PChar;Len:integer;var replybuf:TBuf):Pchar;
   function onReplyData(buf:PChar;Len:integer;const replybuf:TBuf):Pchar;
   procedure WriteFile(const replybuf:TBuf);
 end;
implementation
uses StrUtils,SysUtils,conitem;
constructor THTTPContext.create(Owner:TList);
begin
  FHasFoundGet:=false;
  FHasFoundHTTPReply:=false;
  FChunkLen:=-1;
  FDone:=false;
  FContentLengthOrig:=-1;
  FOwner:=Owner;
end;
function THTTPContext.onRequestStream(buf:PChar;Len:integer;var replybuf:TBuf):Pchar;
var s,g:String;i,k:integer;
begin
  result:=SearchBuf(Buf,Len, 0, 0,#13+#10+#13+#10,[soDown]);
  if result<>nil then begin
    result:=result+4;
    s:=URLDecode(buf,result-buf);
    if Pos('GET',s)=1 then
    begin
      FHasFoundGet:=true;
      i:=PosEx(' ',s,5);
      FFileName:=copy(s,5,i-5);
{  if pos('sb7-040805-SQUID' ,ffilename) >0 then
  s:=s;
   if pos('milkyway' ,ffilename) >0 then
  s:=s;}
      i:=Pos('Host: ',s);
      k:=PosEx(#13#10,s,i);
      if (i>0) and (k>i) then FHost:=Copy(s,i+6,k-i-6);
      FQuota:=0;
//             TConlist(FOwner).OnPaMessage('-----ContentLength '+FHost+FFileName,2);
      i:=Pos('Accept-Language: ',s);
      k:=PosEx(#13#10,s,i);
      if i>0 then
      begin
          i:=PosEx(';',s,i);
          if (i>0) and (i<k) then i:=PosEx('q=',s,i);
          if (i>0) and (i<k) then
          begin
            g:=Copy(s,i+2,k-i-2);
            Val(g,FQuota,i);
            if i>0 then FQuota:=0;
          end;
      end;
      FRangeFrom:=0;
      i:=Pos('Range: bytes=',s);
      if i>0 then
      begin
        k:=PosEx('-',s,i);
        g:=Copy(s,i+13,k-i-13);
        if TryStrToInt(g,FRangeFrom)then
        begin
          if (FRangeFrom>0) and (replybuf.DataLen<>cardinal(FRangeFrom)) then
          if TConlist(FOwner).ExchangeBuffer(FHost,FFileName,FRangeFrom,replybuf) then
          begin
            replybuf.DataLen:=FRangeFrom;
            FRangeFrom:=0;
          end else
          begin
            TConlist(FOwner).OnPaMessage('Partial Content File '+FHost+FFileName,2);
          end;
        end else Assert(false,'Range error '+FHost+FFileName);
      end;
    end;
  end;
end;

function GetChunkLen(var buf:PChar;Len:integer):integer;
var i:integer;s:string;start:Boolean;
begin
  s:='$';start:=false;
  for i:=0 to Len-1 do
  begin
    if (buf[i]>='0') then begin s:=s+buf[i]; start:=true; end;
    if start and (buf[i]<'0')  then break;
  end;
  if TryStrToint(s,result) then
  begin
    buf:=buf+i+2;
  end else begin
    result:=-1;
    buf:=buf+Len;
  end;
end;

function GetChunkLenStr(buf:String):String;
var i,k,len:integer;
begin
    len:=Length(buf);
    result:='';k:=1;
    if len=0 then  exit;
    if buf[k]<>#13 then exit;
    result:=buf[k];
    if k>=Len then exit;
    inc(k);
    if buf[k]<>#10 then exit;
    result:=result+buf[k];
    if k>=Len then exit;
    for i:=k+1 to len do begin
      if (buf[i]<'0') then break;
      result:=result+buf[i];
    end;
    k:=i;
    if buf[k]<>#13 then exit;
    result:=result+buf[k];
    if k>=Len then exit;
    inc(k);
    if buf[k]<>#10 then exit;
    result:=result+buf[k];
end;

function StrToLength(S:string):integer;
begin
  result:=-1;
  if (length(s)<4) or (s[length(s)]<>#10) then exit;
  s:='$'+copy(s,3,length(s)-4);
  if not TryStrToint(s,result) then result:=-1;
end;

function THTTPContext.onReplyData(buf:PChar;Len:integer;const replybuf:TBuf):Pchar;
var s,cont:String;i,k,j,CLen:integer;P,T:PChar;
begin
  result:=nil;
  if not FHasFoundGet then
  begin
    exit;
  end;
  P:=buf;
//   if pos('milkyway.jpg' ,ffilename) >0 then
//  s:=s;
  if not FHasFoundHTTPReply then
  begin
    P:=SearchBuf(Buf,Len, 0, 0,#13+#10+#13+#10,[soDown]);
    if P<>nil then
    begin
      P:=P+4;
      s:=URLDecode(buf,P-buf);
      if Pos('HTTP',s)=1 then
      begin
        FHasFoundHTTPReply:=true;
        i:=Pos(' ',s);
        if i>0 then TryStrToint(Copy(s,i+1,3),FHTTPReplyCode);
        i:=Pos('Content-Length: ',s);
        if i=0 then i:=Pos('Content-length: ',s);
        k:=PosEx(#13#10,s,i);
        if (i>0) and (k>i) then TryStrToint(Copy(s,i+16,k-i-16),FContentLengthOrig);
        FContentLength:=FContentLengthOrig;
        i:=Pos('Content-Encoding: ',s);
        k:=PosEx(#13#10,s,i);
        FIsGZIP:=(i>0) and (k>i) and (Copy(s,i+18,k-i-18)='gzip');
        i:=Pos('Transfer-Encoding: ',s);
        k:=PosEx(#13#10,s,i);
        if (i>0) and (k>i) then cont:=Copy(s,i+19,k-i-19);
        if cont='chunked' then
        begin
          FChunked:=true;
          FChunkLen:=GetChunkLen(P,Len-(P-buf));
          if  FChunkLen=400 then
          begin
            FDone:=FDone;
           end;
          if  FChunkLen<0 then
          begin
            FDone:=true;
            TConlist(FOwner).OnPaMessage('FChunkLen-error',2);
          end;
        end;
        if  FHTTPReplyCode=206 then    //Partial Content
        begin
          i:=Pos('Content-Range: bytes ',s);
          k:=PosEx(#13#10,s,i);
          if i>0 then
          begin
            j:=PosEx('-',s,i+9);
            i:=PosEx('/',s,i);
            cont:=Copy(s,j+1,i-j-1);
            TryStrToint(cont,FRangeTo);
            i:=PosEx('/',s,i);
            cont:=Copy(s,i+1,k-i-1);
            TryStrToint(cont,FRangeTotal);
            assert(FRangeTotal>0,'FRangeTotal-error');
          end;
        end;  //if  FHTTPReplyCode=206
      end;
    end;
  end; //if  not FHasFoundHTTPReply
  if not FHasFoundHTTPReply then exit;
  if Fchunked and (FChunkLen>-1) and not FDone then begin
    T:=P;CLen:=0;
    while ((FChunkLen)< Len-(T-buf)) and not FDone do
    begin
      T:=T+FChunkLen+CLen;
      s:=FChunkLenStrPart;
      k:=Len-(T-buf)-1;
      if k<=0 then break;//Error
      if k>10 then k:=10;
      for i:=0 to k do s:=s+T[i];
      s:=GetChunkLenStr(s);
      FChunkLen:=StrToLength(s);
      if FChunkLen=0 then FDone:=true;
      CLen:=length(s)-length(FChunkLenStrPart);
      if FChunkLen<0 then FChunkLenStrPart:=s else FChunkLenStrPart:='';
      if FDone then CLen:=CLen+2;
      Move(P^, (P+CLen)^, T-P);
      P:=P+CLen;
      if FChunkLen < 0 then break;
    end;
    FChunkLen:=FChunkLen-(Len-(T-buf)-Clen);
    if FChunkLen<0 then FChunkLen:=0;
    if  FChunkLen=0 then FDone:=true;
  end;
  if FContentLengthOrig>0 then
  begin
    FContentLength:=FContentLength-(Len-(P-buf));
    if FContentLength<0 then
            TConlist(FOwner).OnPaMessage('Error ContentLength '+FHost+FFileName,2);
    Assert( FContentLength>=0,'Error ContentLength');
    if  FContentLength<=0 then FDone:=true;
  end;
  result:=P;
  if  (FHTTPReplyCode=304) or (FHTTPReplyCode=404)       //304 Not Modified    404 Not Found
   or (FHTTPReplyCode=302) or (FHTTPReplyCode=301) then // 302 Moved Temporarily  301 Moved Permanently
  begin
    if Assigned(TConlist(FOwner).FOnHTTPReplyCode) then
      TConlist(FOwner).FOnHTTPReplyCode(FFilename,FHost,FHTTPReplyCode);
    Reset;
    replybuf.DataLen:=0;
    result:=nil;
  end;
end;

procedure THTTPContext.Reset;
begin
  FHasFoundGet:=false;
  FHasFoundHTTPReply:=false;
  FDone:=false;
  FChunkLen:=-1;
  FChunked:=false;
  FFileName:='';
  FContentLengthOrig:=-1;
  FIsGZIP:=false;
  FRangeFrom:=0;
  FRangeTo:=0;
  FRangeTotal:=0;
end;

procedure THTTPContext.WriteFile(const replybuf:TBuf);
var fs1 : TFileStream;dir,FileName:String;
begin
  fs1:=nil;
  if replybuf.DataLen=0 then
  begin
    Reset;
    exit;
  end;
  if Pos(':',FHost)=0 then FileName:=FHost+FFileName else
     FileName:=copy(FHost,1,Pos(':',FHost)-1)+FFileName;
  FileName:=AnsiReplaceText(FileName,'/','\');
  if Pos('?',FileName)>0 then FileName:=copy(FileName,1,Pos('?',FileName)-1);
  if  ExtractFileName(FileName)='' then
    FileName:=IncludeTrailingPathDelimiter(Filename)+'index.htm';
  if ExtractFileExt(FileName)='' then Filename:=Filename+'.htm';
  FileName:=AnsiReplaceText(FileName,'*','_');
  if FIsGZIP then FileName:=ChangeFileExt(FileName,'.zip');
  TConlist(FOwner).OnFileSave(Filename,FHost,replybuf.DataLen);
  if Filename<>''then
  begin
    dir:=ExtractFileDir(''+FileName);
    try
      ForceDirectories(Dir);
      if  FHTTPReplyCode=206 then    //Partial Content
      begin
        if FileExists(FileName) then begin
          fs1 := TFileStream.Create(FileName,fmOpenReadWrite);
          if fs1.Size>=FRangeFrom then
          begin                                
            fs1.Position:=FRangeFrom;
            fs1.WriteBuffer(replybuf.Buffer^,replybuf.DataLen);
          end;
        end else
        begin
          fs1 := TFileStream.Create(FileName, fmCreate or fmOpenReadWrite);
        //  fs1.Position:=FRangeFrom;
          fs1.WriteBuffer(replybuf.Buffer^,replybuf.DataLen);
        end;
      end else
      begin
        fs1 := TFileStream.Create(FileName, fmCreate or fmOpenWrite);
        fs1.WriteBuffer(replybuf.Buffer^,replybuf.DataLen);
      end;
    except
      TConlist(FOwner).OnErrorMsg('Cannot create '+FileName);
    end;
    if fs1 <> nil then fs1.Free;
  end;
  replybuf.DataLen:=0;
  Reset;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线一区二区三区| 91精品国产全国免费观看| 欧美喷水一区二区| 国产精品成人免费| 美女爽到高潮91| 在线亚洲人成电影网站色www| 欧美一区二区视频免费观看| 1024成人网色www| 国产精品一级黄| 欧美一区二区免费观在线| 亚洲一级在线观看| 91麻豆精品在线观看| 国产欧美日本一区视频| 麻豆精品一区二区av白丝在线| 欧美性淫爽ww久久久久无| 国产精品污网站| 丁香啪啪综合成人亚洲小说 | 麻豆国产一区二区| 欧美在线一二三四区| 中文字幕日韩一区| 成人禁用看黄a在线| 国产视频一区二区在线观看| 精品一区二区三区免费观看| 91精品国产免费| 五月天一区二区| 欧美日韩第一区日日骚| 亚洲国产成人av网| 欧美日韩的一区二区| 午夜欧美大尺度福利影院在线看| 91高清在线观看| 亚洲超碰精品一区二区| 在线观看视频一区二区欧美日韩| 亚洲色欲色欲www| 91美女片黄在线| 亚洲国产wwwccc36天堂| 欧美三级一区二区| 亚洲成a人v欧美综合天堂| 欧美女孩性生活视频| 日韩影视精彩在线| 欧美v国产在线一区二区三区| 精品影视av免费| 国产日本亚洲高清| 菠萝蜜视频在线观看一区| ...av二区三区久久精品| 99国产精品久| 午夜一区二区三区视频| 91精品国产综合久久久蜜臀粉嫩 | 亚洲精品高清在线观看| 色综合天天性综合| 香蕉影视欧美成人| 精品国偷自产国产一区| 成人视屏免费看| 亚洲精品日韩专区silk| 欧美老人xxxx18| 国产河南妇女毛片精品久久久| 欧美高清在线一区| 欧美影院午夜播放| 精品一区二区在线播放| 中文子幕无线码一区tr| 在线观看日产精品| 国产在线播放一区| 一区二区三区在线观看动漫| 91精品黄色片免费大全| 国产91富婆露脸刺激对白| 亚洲福利视频三区| 欧美极品xxx| 欧美日韩一区小说| 国产69精品久久777的优势| 亚洲一区视频在线观看视频| www成人在线观看| 91免费国产在线| 国产酒店精品激情| 亚洲国产cao| 国产精品福利一区二区三区| 欧美老年两性高潮| 91最新地址在线播放| 精品在线视频一区| 亚洲va欧美va天堂v国产综合| 久久精品视频免费| 日韩欧美国产麻豆| 欧美性大战久久久久久久| 国产99久久久精品| 日av在线不卡| 一区二区久久久久久| 国产午夜精品一区二区三区视频| 91精品国产综合久久久久| av激情综合网| 国产成人在线网站| 蜜桃视频在线观看一区二区| 亚洲综合av网| 亚洲欧美二区三区| 国产精品三级视频| 久久久久国产一区二区三区四区| 欧美中文字幕一区| 色婷婷综合五月| 91麻豆国产香蕉久久精品| 成人性生交大片免费看中文网站| 蜜桃一区二区三区四区| 日韩国产一区二| 亚洲图片欧美综合| 亚洲一区二区四区蜜桃| 亚洲视频在线一区| 国产精品国产自产拍高清av | 国产日韩欧美综合一区| 欧美一区二区私人影院日本| 精品视频色一区| 欧美日韩精品一区二区| 欧美性一区二区| 欧美日韩精品一区二区| 欧美日韩在线播| 欧美日韩一区不卡| 欧美视频一区二区三区四区| 欧美性大战久久久久久久| 在线中文字幕一区| 欧美老肥妇做.爰bbww视频| 欧美老人xxxx18| 日韩欧美国产午夜精品| 精品国产一区二区三区久久影院 | 6080日韩午夜伦伦午夜伦| 欧美欧美欧美欧美首页| 欧美一区二区三级| 久久青草国产手机看片福利盒子 | 午夜一区二区三区视频| 午夜精品成人在线视频| 日本成人在线电影网| 理论电影国产精品| 国产99精品国产| 91免费观看在线| 欧美日韩成人激情| 久久久国际精品| 综合亚洲深深色噜噜狠狠网站| 亚洲乱码中文字幕| 三级久久三级久久久| 久久国产精品99精品国产| 成人在线视频首页| 色综合激情五月| 欧美一区二区三区白人| 国产精品免费免费| 日韩电影免费在线看| 国产福利视频一区二区三区| 色综合天天综合狠狠| 日韩午夜av电影| 国产精品国产三级国产普通话蜜臀 | 色琪琪一区二区三区亚洲区| 欧美日韩视频一区二区| 欧美电影精品一区二区| 综合亚洲深深色噜噜狠狠网站| 亚洲18色成人| 成人深夜视频在线观看| 欧美日韩国产精选| 国产日韩欧美综合一区| 亚洲成人自拍偷拍| 成人ar影院免费观看视频| 制服视频三区第一页精品| 欧美激情综合五月色丁香| 丝袜亚洲另类欧美综合| 风间由美一区二区三区在线观看 | 久久一二三国产| 亚洲免费观看高清完整| 麻豆精品国产传媒mv男同| 91福利在线观看| 国产欧美一区二区三区在线看蜜臀 | 欧美一区二区人人喊爽| 亚洲人成小说网站色在线 | 日本韩国欧美一区| 久久综合色一综合色88| 亚洲福利国产精品| 91在线观看一区二区| 精品sm捆绑视频| 午夜精品福利久久久| 日本福利一区二区| 中文字幕亚洲电影| 福利视频网站一区二区三区| 精品国产成人在线影院| 午夜一区二区三区视频| 色香色香欲天天天影视综合网| 国产精品三级在线观看| 国产成人综合视频| 欧美本精品男人aⅴ天堂| 日韩高清在线不卡| 欧美亚洲高清一区二区三区不卡| 国产精品毛片a∨一区二区三区 | 中文在线一区二区| 国产伦精品一区二区三区免费迷 | 波多野结衣亚洲一区| 精品粉嫩aⅴ一区二区三区四区| 亚洲自拍与偷拍| 欧洲精品在线观看| 18欧美乱大交hd1984| 不卡的av电影| 中文字幕中文乱码欧美一区二区| 国产在线不卡一卡二卡三卡四卡| 91精品国产91久久久久久最新毛片| 亚洲综合在线免费观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 日本一区中文字幕| 欧美一级高清大全免费观看| 日韩精品一级中文字幕精品视频免费观看| av激情亚洲男人天堂| 亚洲欧美国产高清|