通过hook send截封包
function send(s: TSocket;Buf: Pchar; len, flags: Integer): Integer; stdcall;
要把buf转换hex数据
for i := 1 to length(buf) do
begin
str:=str + inttohex(ord(buf[i]),2);
end;
我发现ip port size 与封包助手一致,hex数据不正确,不知道那里出错了
function send(s: TSocket;Buf: Pchar; len, flags: Integer): Integer; stdcall;
要把buf转换hex数据
for i := 1 to length(buf) do
begin
str:=str + inttohex(ord(buf[i]),2);
end;
我发现ip port size 与封包助手一致,hex数据不正确,不知道那里出错了
var
Str: string;
begin
SetLength(Str, Len * 2);
BinToHex(Buf, PChar(Str), len);
end;
另:send中buf参数应该是: var buf;是不是写错了。
改为 var buf 显示正确了 可是为什么这样定义
msdn
int send(
__in SOCKET s,
__in const char *buf,
__in int len,
__in int flags
);
如何定义BUF呢?
直接这样传是有问题的
var
Buf:Pchar;
begin
send(s,Buf,strlen(buf),0);
end;
定义为PCHAR 不正确我想知道BUF如何定义
Buf:pchar;
s:string;
begin
s:='12345';
Buf:=pchar(s);
Re:Integer;
Buf:Pchar;
str:string;
begin
str:='!';
buf:=Pchar(str);
Re:=send(s,Buf,strlen(buf),0);
if Re=SOCKET_ERROR then
begin
showmessage('发送数据失败');
exit;
end;
end;
封包助手拦截后, hex数据显示0C 应该为21 才是正确的
var
c:pchar;
s:string;
begin
s:='!';
c:=pchar(s);
showmessage(inttostr(ord(c[0])));//显示33就是16进制21
end;
我在用move 转换 第一个字符显示是正确的