如何判断是TCP包还是UDP包

xyfw07 2009-02-22 08:06:40
function MySend(s:TSocket;var Buf; len, flags: Integer):Integer;stdcall;
begin
{这里是对HOOK函数Send的处理}
{对s,buf数据的判断,如何判断是TCP包还是UDP包?}
end;
...全文
572 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyfw07 2009-02-23
  • 打赏
  • 举报
回复
成功了!原来我手头上的winsock2.pas我以前做过修改,我说呢会少一些结构,现在好了。谢谢相助。
xyfw07 2009-02-22
  • 打赏
  • 举报
回复
我手头上就有winsock2.pas,但是还是缺少SO_PROTOCOL_INFO, WSAPROTOCOL_LEN。
僵哥 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xyfw07 的回复:]
delphi中我没有找到SO_PROTOCOL_INFO, WSAPROTOCOL_INFO, WSAPROTOCOL_LEN的定义呀,是不是要重新定义这样的
结构?
[/Quote]
是的。或者找有相关字义的单元,比如某些winsock2.pas
xyfw07 2009-02-22
  • 打赏
  • 举报
回复
delphi中我没有找到SO_PROTOCOL_INFO, WSAPROTOCOL_INFO, WSAPROTOCOL_LEN的定义呀,是不是要重新定义这样的
结构?
willflyz 2009-02-22
  • 打赏
  • 举报
回复
学习!
僵哥 2009-02-22
  • 打赏
  • 举报
回复
还可以通过getsockopt(SocketHandle, SOL_SOCKET, SO_PROTOCOL_INFO, @WSAPROTOCOL_INFO, WSAPROTOCOL_LEN)
取得WSAPROTOCOL_INFO结构信息,然后dwServiceFlags1是否包含XP1_CONNECTIONLESS ,如果未包含则是TCP,否则就是其它无连接状态的协议,比如UDP。
僵哥 2009-02-22
  • 打赏
  • 举报
回复
也可以通过
       getsockopt(  SocketHandle
, SOL_SOCKET
, $700C{SO_CONNECT_TIME}
, @Connect_Time
, nSize)

由于SO_CONNECT_TIME仅对有连接的socket有效,所以也可以判断出来。
僵哥 2009-02-22
  • 打赏
  • 举报
回复
把socket/WSASocket和closesocket也一起hook掉,申请socket的时候记录下相应的socket类别,然后在closesocket当中再把记录清除。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧