获取Delphi中所有连接的IP地址

Ala*_*inD -2 delphi winsock

以下代码返回计算机的第一个TCP/IP连接的IP地址.

uses WinSock;

// ...
function GetLocalIP() : String;
var
    addr: TSockAddrIn;
    phe: PHostEnt;
    szHostName: array[0..128] of Char;
    socketData: TWSADATA;
begin
    Result := '127.0.0.1';

    // Initialize the socket API
    if (WSAStartup($101, socketData) = 0) then
        begin
        // Get local machine name
        if (GetHostName(szHostName, 128) = SOCKET_ERROR) then
            Exit;

        // Use name to find IP address
        phe := GetHostByName(szHostName);
        if (phe = nil) then
            Exit;

        addr.sin_addr.S_addr := Longint(PLongint(phe^.h_addr_list^)^);

        // Convert IP address to PChar format
        Result := inet_ntoa(addr.sin_addr);
        end;
end;

// ...
Label1.Caption :=  GetLocalIP();
Run Code Online (Sandbox Code Playgroud)

我需要做什么修改才能获得所有TCP/IP网络连接的IP地址(哪个有多个)?

我在这篇相关文章中偶然发现了这一点: 获取有关已安装的网络适配器的信息,这些适配器 似乎使用Windows API"GetAdaptersInfo"使用不同的技术......这是要走的路吗?

Rem*_*eau 5

如果要枚举本地计算机的当前可用IP地址,请使用GetAdaptersInfo()GetAdaptersAddresses().

如果要枚举本地计算机的当前活动TCP/IP套接字连接,请使用GetTcpTable()GetTcpTable2()用于IPv4连接,GetTcp6Table()GetTcp6Table2()用于IPv6连接.