2013-04-01 34 views
1

我使用此代码获取打开的UDP端口和使用每个端口的应用程序。GetExtendedUdpTable和netstat结果之间的区别

DWORD (WINAPI *pGetExtendedUdpTable)(
    PVOID pUdpTable, 
    PDWORD pdwSize, 
    BOOL bOrder, 
    ULONG ulAf, 
    UDP_TABLE_CLASS TableClass, 
    ULONG Reserved 
); 
    MIB_UDPTABLE_OWNER_PID *pUDPInfo; 
    MIB_UDPROW_OWNER_PID *owner; 
    DWORD size; 
    DWORD dwResult; 

    HMODULE hLib = LoadLibrary((LPCWSTR)"iphlpapi.dll"); 

    pGetExtendedUdpTable = (DWORD (WINAPI *)(PVOID,PDWORD,BOOL,ULONG,UDP_TABLE_CLASS,ULONG)) 
     GetProcAddress(hLib, "GetExtendedTcpTable"); 

    if (!pGetExtendedUdpTable) 
    { 
     //printf("Could not load iphlpapi.dll. This application is for Windows XP SP2 and up.\n"); 

     return "Could not load iphlpapi.dll. This application is for Windows XP SP2 and up.\n"; 
    } 

    dwResult = pGetExtendedUdpTable(NULL,  &size, false, AF_INET, (UDP_TABLE_CLASS)5, 0); 
    pUDPInfo = (MIB_UDPTABLE_OWNER_PID*)malloc(size); 
    dwResult = pGetExtendedUdpTable(pUDPInfo, &size, false, AF_INET, (UDP_TABLE_CLASS)5, 0); 
// 
    if (dwResult != NO_ERROR) 
    { 
     printf("Couldn't get our IP table"); 

     return "Couldn't get our IP table"; 
    } 
    for (DWORD dwLoop = 0; dwLoop < pUDPInfo->dwNumEntries; dwLoop++) 
    { 
     owner = &pUDPInfo->table[dwLoop];  
     ApplicationName = GetNameByPID(owner->dwOwningPid); 
     OpenedPort = convertInt(ntohs(owner->dwLocalPort)); 
     LocalAdress = convertInt(ntohs(owner->dwLocalAddr)); 
    } 

不过,我也没有相同的结果,netstat的-ano.In我的代码,我有口0超过10次,但在netstat命令端口0不存在。

回答

0

你到处都是UDP,但你要查询的功能是TCP(GetExtendedTcpTable)。