C++實(shí)例(使用iphlpapi的未公開(kāi)函數(shù))

字號(hào):

#include
    #include
    #include
    #pragma comment(lib, "ws2_32.lib")
    #define ADDRESSLEN HOSTNAMELEN PORTNAMELEN
    char szProcessName[MAX_PATH];
    char szLocalName[256];
    char szRemoteName[256];
    char szRemotePort[256];
    char szLocalPort[256];
    char szLocalAddress[256];
    char szRemoteAddress[256];
    PCHAR GetPort(unsigned int port, char* pPort)
    {
    sprintf(pPort, "%d", htons( (WORD) port));
    return pPort;
    }
    PCHAR GetIp(unsigned int ipaddr, char* pIP)
    {
    unsigned int nipaddr;
    nipaddr = htonl(ipaddr);
    sprintf(pIP, "%d.%d.%d.%d",
    (nipaddr >> 24) & 0xFF,
    (nipaddr >> 16) & 0xFF,
    (nipaddr >> 8) & 0xFF,
    (nipaddr) & 0xFF);
    return pIP;
    }
    int main(int argc, char* argv[])
    {
    int nRetCode;
    DWORD i;
    WSADATA WSAData;
    PMIB_TCPEXTABLE TCPExTable;
    pAllocateAndGetTcpExTableFromStack = (PALLOCATE_AND_GET_TCPEXTABLE_FROM_STACK) GetProcAddress( LoadLibrary( "iphlpapi.dll"),
    "AllocateAndGetTcpExTableFromStack" );
    WSAStartup(MAKEWORD(1, 1), &WSAData);
    nRetCode = pAllocateAndGetTcpExTableFromStack(&TCPExTable, TRUE, GetProcessHeap(), 2, 2);
    for( i = 0; i < TCPExTable->dwNumEntries; i++ )
    {
    sprintf( szLocalAddress, "%s:%s",
    GetIp(TCPExTable->table[i].dwLocalAddr, szLocalName),
    GetPort(TCPExTable->table[i].dwLocalPort, szLocalPort));
    sprintf( szRemoteAddress, "%s:%s",
    GetIp(TCPExTable->table[i].dwRemoteAddr, szRemoteName),
    GetPort(TCPExTable->table[i].dwRemotePort, szRemotePort));
    printf("%-22s%-22s%-11s%d\n",
    szLocalAddress, szRemoteAddress,
    TcpState[TCPExTable->table[i].dwState],
    TCPExTable->table[i].dwProcessId
    );
    }
    WSACleanup();
    return 0;
    }