Delphi中获取进程连接端口的实现方法
在Delphi编程环境中,获取进程连接端口是一项重要的任务,特别是在系统监控、网络调试或安全分析中非常关键。将介绍如何在 Delphi 中通过调用 Windows API 函数实现这一功能,并提供具体代码示例。
1. 进程与端口概念
- 进程是程序执行的一个实例,具有唯一的进程 ID(PID)。
- 端口用于区分不同的网络服务,范围为 0 到 65535,0-1023 为系统保留端口。
2. 关键 Windows API 函数
在 Delphi 中获取连接端口时,需要以下 API 支持:
* CreateToolhelp32Snapshot:创建进程快照,可遍历系统中的所有进程。
* Process32First/Process32Next:遍历进程快照,获取进程 ID 等详细信息。
* GetModuleFileNameEx:获取指定进程的主模块文件名,通常是 .exe 文件。
* WSAStringToAddress:将 IP 字符串转换为 sockaddr 结构体,便于后续套接字操作。
* GetTcpTable2:获取 TCP 连接表,包含进程端口信息。
3. 代码示例
以下 Delphi 代码演示了如何获取指定进程的连接端口:
uses ..., Windows, Winsock2, Msinet, SysUtils;
function GetProcessPorts(const ProcName: string): TStringList;
var
SnapHandle: THandle;
ProcessEntry32: TProcessEntry32;
ModuleFileName: array[0..MAX_PATH] of Char;
TcpTable: PMibTcpTable2;
Size: DWORD;
IPAddrStr: array[0..15] of Char;
SocketAddr: TInetSocketAddr;
Index: Integer;
begin
Result := TStringList.Create;
SnapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if SnapHandle <> INVALID_HANDLE_VALUE then
try
ProcessEntry32.dwSize := SizeOf(ProcessEntry32);
if Process32First(SnapHandle, ProcessEntry32) then
begin
repeat
if CompareText(ProcessEntry32.szExeFile, ProcName) = 0 then
begin
GetModuleFileNameEx(SnapHandle, ProcessEntry32.th32ProcessID, ModuleFileName, MAX_PATH);
Size := 0;
GetTcpTable2(nil, Size, True);
SetLength(TcpTable, Size div SizeOf(TMibTcpRow2));
if GetTcpTable2(Pointer(TcpTable), Size, True) = NO_ERROR then
try
for Index := 0 to TcpTable.dwNumEntries - 1 do
begin
if TcpTable.Table[Index].dwLocalProcessId = ProcessEntry32.th32ProcessID then
begin
WSAStringToAddress(PAnsiChar(IntToHex(TcpTable.Table[Index].dwLocalPort, 4)), AF_INET, nil, SocketAddr, Size);
Result.AddFmt('%s - %d', [ModuleFileName, SocketAddr.sin_port]);
end;
end;
finally
VirtualFree(Pointer(TcpTable), 0, MEM_RELEASE);
end;
end;
until not Process32Next(SnapHandle, ProcessEntry32);
end;
finally
CloseHandle(SnapHandle);
end;
end;
4. 注意事项
请确保在项目中链接kernel32
、advapi32
、iphlpapi
、ws2_32
和mswsock
库。此外,此代码仅适用于 TCP 连接,若需获取 UDP 或其他类型的连接信息,需使用其他 API 函数。
通过 Delphi 对 Windows API 的深入理解和运用,可以高效地获取进程端口信息,从而进行更全面的系统网络监控。
200822522542727065.zip
预估大小:1个文件
Project1.exe
451KB
235.39KB
文件大小:
评论区