关于 WINSOCK API 的问题(100分)

  • 主题发起人 主题发起人 flfqnet
  • 开始时间 开始时间
F

flfqnet

Unregistered / Unconfirmed
GUEST, unregistred user!
function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
ds: TCopyDataStruct;
hd: THandle;
begin
//这儿进行接收的数据处理
MessageBeep(1000); //简单的响一声
//调用直正的Recv函数
WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
Result := OldRecv(S, Buf, len, flags);
JmpCode.Address := @MyRecv;
WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);
end;

得到的Buf是对方发送的信息
如何得到对方的IP,端口等信息
 
◎ getpeername():获取连接成功之 Socket 的对方 IP 位址及 port number。
格 式:int PASCAL FAR getpeername( SOCKET s, struct sockaddr FAR *name, int FAR *namelen );
参 数:s Socket 的识别码
name 储存与此 Socket 连接的对方 IP 位址的暂存区
namelen name 的长度
传回值:成功 – 0
失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
说 明:此函式可用来取得已连接成功的 Socket 的彼端之位址资料。呼叫的方式如下:
struct sockaddr_in sa;
int salen = sizeof(sa);
getpeername( sd, (struct sockaddr FAR *)&sa, &salen )
 
太感谢了
 
你做的应该是拦截winsock api的功能吧,看了你上面贴的代码!
 
再问一下,如何得到发过来的数据的头信息
这里的 BUF是指对方发送的内容
包含双方IP端口等信息的信息内容如何取得
 
只有截取数据包才能获取头信息。要得到数据包还得往下走一层,不是那么简单的,不过论坛里也有些可参考的代码,自己搜搜就有了。
 
后退
顶部