




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Delphi下获取进程连接端口 转Windows操作系统提供了一个iphlpapi.dll文件,全称IP帮助API,通过这个函数库可以获取和修改电脑的网络配置、获取网络状态信息、管理网络活动,利用这个文件中两个未公开的函数AllocateAndGetTcpExTableFromStack和AllocateAndGetUdpExTableFromStack可以获得一个TCP连接表和一个UDP连接表,这两个连接表中包含了正在使用当前连接的进程ID号。有的资料称只有Windows XP及以上操作系统才提供了这些扩展IP帮助函数,但是在我的系统(Windows2000+SP4)中程序可以正常运行,我系统中的iphlpapi.dll文件版本号为5.0.2195.7097,程序使用Delphi7.0编写,对于不同的系统这个程序不知是否可以正常运行。网上查到的很多例子都是VC+的,在VC+中调用这两个函数需要动态的从DLL文件中载入,因为对应的iphlpapi.lib文件中没有对这两个函数进行声明,但是在Delphi下没必要这么复杂,Delphi下调用DLL文件中的函数不需要对应的LIB文件,只要对函数进行声明再进行调用就可以了。这两个函数的声明如下:/获取TCP连接表的IP帮助函数声明function AllocateAndGetTcpExTableFromStack( var pTcpTable; bOrder : Bool; heap : THandle; zero : DWORD; flags : DWORD ): DWORD; stdcall; external iphlpapi.dll name AllocateAndGetTcpExTableFromStack;/获取UDP连接表的IP帮助函数声明function AllocateAndGetUdpExTableFromStack( var pUdpTable; bOrder : Bool; heap : THandle; zero : DWORD; flags : DWORD ): DWORD; stdcall; external iphlpapi.dll name AllocateAndGetUdpExTableFromStack;在调用函数前还要自己定义几个结构,及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 of MIB_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 of MIB_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中调用这几个函数要引用TlHelp32.pas单元,相关代码如下:/根据进程ID查找可执行文件名function IdToExeFile(hSnapshot : THandle; dwProcessId : DWORD): String;var lppe : TProcessEntry32; b : BOOL;begin lppe.dwSize:=SizeOf(lppe); /取第1个进程数据 b:=Process32First(hSnapshot,lppe); result:=; while b do begin if lppe.th32ProcessID=dwProcessId then begin result:=lppe.szExeFile; break; end; /取下一个进程 b:=Process32Next(hSnapshot,lppe); end;end;利用上面这个方法只能获得单一的可执行文件名,而无法获得可执行文件的路径,最好是获得可执行文件完整的路径,以判断可执行文件到底位于哪个文件夹,利用EnumProcessModules函数返回一个进程中的句柄,再调用GetModuleFileNameEx函数就可以获得可执行文件完整的路径,在Delphi下调用这两个函数要引用PsAPI.pas单元,相关代码如下:/根据进程ID查找可执行文件路径function IdToExeDir(dwProcessId : DWORD): String;var cbNeeded : DWORD; hProcess : THandle; hModules : HMODULE; lpFilename : array 0.1024-1 of Char;begin result:=; hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,dwProcessId); if hProcess=0 then exit; EnumProcessModules(hProcess,hModules,sizeof(hModule),cbNeeded); GetModuleFileNameEx(hProcess,hModules,lpFilename,1024); result:=lpFilename; CloseHandle(hProcess);end;获得了可执行文件完整的路径最好还要获得文件版本的相关信息,这样才能更好的判断文件是系统文件、应用程序文件、还是木马。获得文件版本信息可以调用GetFileVersionInfo函数和VerQueryValue函数,以下代码只提取文件版本信息中的文件说明和公司名称,用以对可执行文件的判断,相关代码如下:/根据文件名查找文件信息function ExeDirToFileInfo(Filename : String): String;var NameLen,BufLen,ValLen : DWORD; pBuf,pVal : Pointer; LangCode : String;begin result:=; NameLen:=Length(Filename); if NameLen=0 then exit; /获取版本信息 BufLen:=GetFileVersionInfoSize(PChar(Filename),NameLen); pBuf:=AllocMem(BufLen); if pBuf=nil then exit; if GetFileVersionInfo(PChar(Filename),0,BufLen,pBuf)=false then begin FreeMem(pBuf); exit; end; /获取代码页信息 if VerQueryValue(pBuf,VarFileInfoTranslation,pVal,ValLen)=false then begin FreeMem(pBuf); exit; end; LangCode:=Format(%.2x%.2x%.2x%.2x, BYTE(PChar(pVal)1), BYTE(PChar(pVal)0), BYTE(PChar(pVal)3), BYTE(PChar(pVal)2); /获取文件说明 if VerQueryValue(pBuf,PChar(StringFileInfo+LangCode+FileDescription),pVal,ValLen)=false then begin FreeMem(pBuf); exit; end; result:=PChar(pVal); /获取公司名称 if VerQueryValue(pBuf,PChar(StringFileInfo+LangCode+CompanyName),pVal,ValLen)=false then begin FreeMem(pBu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业废水处理与排放标准解读
- 工业废水处理技术与设备选择
- 工业污染治理与环保法规的协同作用
- 工业废水处理及回收利用技术
- 工业机器人技术及其产业前景
- 工业物联网技术发展趋势及挑战
- 工业自动化中的智能巡检技术应用研究
- 工业机械的自动化带式输送机的技术解析
- 工业节能减排技术推广与应用
- 工业遗址改造为生态公园的实践案例
- 《空腔脏器穿孔》课件
- 风湿免疫疾病的中医药治疗与辅助疗法
- 乒乓球培训协议书
- 无创呼吸机使用培训
- 园林植物病理学实习
- Animate动画设计实例教程高职全套教学课件
- DB22-T+3541-2023日间手术中心护理质量安全管理规范
- 小学六年级毕业动员会 课件( 26张ppt)
- 流体力学-大连理工大学中国大学mooc课后章节答案期末考试题库2023年
- 2023年度湖南省自然科学奖项目公示材料
- 2023-2024学年江苏省江都市小学语文三年级期末高分测试题详细参考答案解析
评论
0/150
提交评论