delphi APIHOOK网络函数(50)

  • 主题发起人 主题发起人 xernet
  • 开始时间 开始时间
X

xernet

Unregistered / Unconfirmed
GUEST, unregistred user!
function MySend(s:TSocket;var Buf; len, flags: Integer):Integer;stdcall; begin {这里是对HOOK函数Send的处理} {我想这里将发送数据包封装特定的socks5报头,这么处理?} end; function MyRecv(s:TSocket;var Buf; len, flags: Integer):Integer;stdcall; begin {类似上面} end;
 
buf 就是你要发的内容,组个包发过去就是了。
 
连接代理服务器前才用socks5格式数据。连接后并不需要什么socks5报头。
 
我这样处理了,提示错误。怎么解决? function MySend(s:TSocket;var Buf; len, flags: Integer):Integer;stdcall; var Socks5buf: array [0..256] of byte; begin Socks5buf[0] := $05; Socks5buf[1] := $02; Socks5buf[2] := $00; Socks5buf[3] := $02; Buf:=Socks5buf;//执行到这里错误。end;错误] Operator not applicable to this operand type
 
不能直接修改Buf,而是Var mybuf:pchar; tempbuf:pchar;begin getmem(mybuf,len+sizeof(Socks5buf));try tempbuf:=myvuf+sizeof(Socks5buf); move(buf,tempbuf,len); Socks5buf[0] := $05; Socks5buf[1] := $02; Socks5buf[2] := $00; Socks5buf[3] := $02; result:=oldsend(s,myBuf,len+sizeof(Socks5buf));finally freemem(mybuf);end;end;
 
{我又HOOK了connect函数,想得到目标IP和目标端口。}{这样是否可行?}varip:pchar;port:integer;function Myconnect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; begin namelen:=sizeof(name); getpeername(s,name,namelen); ip:=inet_ntoa(name.sin_addr);//目标IP port:=ntohs(name.sin_port);//目标端口end;
 
多人接受答案了。
 
后退
顶部