Delphi下获取进程连接端口.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Delphi下获取进程连接端口[转]

Windows操作系统提供了一个iphlpapi.dll文件,全称IP帮助API,通过这个函数库可以获取和修改电脑的网络配置、获取网络状态信息、管理网络活动,利用这个文件中两个未公开的函数AllocateAndGetTcpExTableFromStack和AllocateAndGetUdpExTableFromStack可以获得一个TCP连接表和一个UDP连接表,这两个连接表中包含了正在使用当前连接的进程ID号。

有的资料称只有WindowsXP及以上操作系统才提供了这些扩展IP帮助函数,但是在我的系统(Windows2000+SP4)中程序可以正常运行,我系统中的iphlpapi.dll文件版本号为5.0.2195.7097,程序使用Delphi7.0编写,对于不同的系统这个程序不知是否可以正常运行。

网上查到的很多例子都是VC++的,在VC++中调用这两个函数需要动态的从DLL文件中载入,因为对应的iphlpapi.lib文件中没有对这两个函数进行声明,但是在Delphi下没必要这么复杂,Delphi下调用DLL文件中的函数不需要对应的LIB文件,只要对函数进行声明再进行调用就可以了。这两个函数的声明如下:

//获取TCP连接表的IP帮助函数声明

functionAllocateAndGetTcpExTableFromStack(varpTcpTable;

bOrder:Bool;heap:THandle;zero:DWORD;flags:DWORD

):DWORD;stdcall;externaliphlpapi.dllnameAllocateAndGetTcpExTableFromStack;

//获取UDP连接表的IP帮助函数声明

functionAllocateAndGetUdpExTableFromStack(varpUdpTable;

bOrder:Bool;heap:THandle;zero:DWORD;flags:DWORD

):DWORD;stdcall;externaliphlpapi.dllnameAllocateAndGetUdpExTableFromStack;

在调用函数前还要自己定义几个结构,及TCP连接表和UDP连接表,代码如下:

//相关数据结构的定义const

ANY_SIZE=256;

type

MIB_TCPEXROW=record

dwState:DWORD; //连接状态dwLocalAddr:DWORD; //本地地址dwLocalPort:DWORD; //本地端口dwRemoteAddr:DWORD;//远程地址dwRemotePort:DWORD;//远程端口dwProcessId:DWORD; //进程ID号

end;

MIB_TCPEXTABLE=record

dwNumEntries:DWORD;//端口数量

table:array[0..ANY_SIZE-1]ofMIB_TCPEXROW;

end;

PMIB_TCPEXTABLE=^MIB_TCPEXTABLE;

MIB_UDPEXROW=record

dwLocalAddr:

DWORD;

//本地地址

dwLocalPort:

DWORD;

//本地端口

dwProcessId:

DWORD;

//进程ID号

end;

MIB_UDPEXTABLE=record

dwNumEntries:DWORD;//端口数量

table:array[0..ANY_SIZE-1]ofMIB_UDPEXROW;

end;

PMIB_UDPEXTABLE=^MIB_UDPEXTABLE;

这两个函数的调用代码如下:

AllocateAndGetTcpExTableFromStack(pTcpTab,true,GetProcessHeap(),2,2);

//获取TCP连接表AllocateAndGetUdpExTableFromStack(pUdpTab,true,GetProcessHeap(),2,2);

//获取UDP连接表

仅有进程ID号是不够的,还要获得进程对应可执行文件名,这个可以使用CreateToolhelp32Snapshot函数获得系统进程快照,利用Process32First函数和Process32Next函数从中查找出对应的进程,在Delphi中调用这几个函数要引用

文档评论(0)

dqy118 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体上海海滋实业有限公司
IP属地上海
统一社会信用代码/组织机构代码
91310115MA7DL1JF2N

1亿VIP精品文档

相关文档