【问题标题】:Difference between GetExtendedUdpTable and netstat resultGetExtendedUdpTable 和 netstat 结果的区别
【发布时间】:2013-04-01 11:13:53
【问题描述】:

我使用此代码获取打开的 UDP 端口和使用每个端口的应用程序。

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 不同。在我的代码中,我有超过 10 次端口 0,但在 netstat 命令中,端口 0 不存在。

【问题讨论】:

    标签: c++ windows api port netstat


    【解决方案1】:

    您到处都有 UDP,但您要查询的函数是 TCP 函数 (GetExtendedTcpTable)。

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 2022-01-11
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多