欢迎来到天天文库
浏览记录
ID:37919498
大小:35.50 KB
页数:5页
时间:2019-06-02
《Delphi下获取进程连接端口》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Delphi下获取进程连接端口[转]Windows操作系统提供了一个iphlpapi.dll文件,全称IP帮助API,通过这个函数库可以获取和修改电脑的网络配置、获取网络状态信息、管理网络活动,利用这个文件中两个未公开的函数AllocateAndGetTcpExTableFromStack和AllocateAndGetUdpExTableFromStack可以获得一个TCP连接表和一个UDP连接表,这两个连接表中包含了正在使用当前连接的进程ID号。 有的资料称只有WindowsXP及以上操作系统才提
2、供了这些扩展IP帮助函数,但是在我的系统(Windows2000+SP4)中程序可以正常运行,我系统中的iphlpapi.dll文件版本号为5.0.2195.7097,程序使用Delphi7.0编写,对于不同的系统这个程序不知是否可以正常运行。 网上查到的很多例子都是VC++的,在VC++中调用这两个函数需要动态的从DLL文件中载入,因为对应的iphlpapi.lib文件中没有对这两个函数进行声明,但是在Delphi下没必要这么复杂,Delphi下调用DLL文件中的函数不需要对应的LIB文件,只要对
3、函数进行声明再进行调用就可以了。这两个函数的声明如下://获取TCP连接表的IP帮助函数声明functionAllocateAndGetTcpExTableFromStack( varpTcpTable; bOrder:Bool; heap:THandle; zero:DWORD; flags:DWORD ):DWORD;stdcall;external'iphlpapi.dll' name'AllocateAndGetTcpExTableFromStack'
4、;//获取UDP连接表的IP帮助函数声明functionAllocateAndGetUdpExTableFromStack( varpUdpTable; bOrder:Bool; heap:THandle; zero:DWORD; flags:DWORD ):DWORD;stdcall;external'iphlpapi.dll' name'AllocateAndGetUdpExTableFromStack'; 在调用函数前还要自己定义几个结构,及TCP连接
5、表和UDP连接表,代码如下://相关数据结构的定义const ANY_SIZE=256;type MIB_TCPEXROW=record dwState:DWORD; //连接状态 dwLocalAddr:DWORD; //本地地址 dwLocalPort:DWORD; //本地端口 dwRemoteAddr:DWORD;//远程地址 dwRemotePort:DWORD;//远程端口 dwP
6、rocessId: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;//本地地址 dwLocal
7、Port:DWORD;//本地端口 dwProcessId:DWORD;//进程ID号 end; MIB_UDPEXTABLE=record dwNumEntries:DWORD;//端口数量 table:array[0..ANY_SIZE-1]ofMIB_UDPEXROW; end; PMIB_UDPEXTABLE=^MIB_UDPEXTABLE; 这两个函数的调用代码如下:AllocateAndGetTcpExTableFromS
8、tack(pTcpTab,true,GetProcessHeap(),2,2);//获取TCP连接表AllocateAndGetUdpExTableFromStack(pUdpTab,true,GetProcessHeap(),2,2);//获取UDP连接表 仅有进程ID号是不够的,还要获得进程对应可执行文件名,这个可以使用CreateToolhelp32Snapshot函数获得系统进程快照,利用Process32First函数和Process32Ne
此文档下载收益归作者所有