GetExtendedTcpTable не возвращает тот же результат, что и netstat -ano

Я использовал этот код, чтобы получить список открытых портов на моем ПК и приложения, которые используют каждый порт.

string Port::GetListOfTcpPorts()

{
string ApplicationName = "";
string result = "";
string aux = "";
string RemotePort = "";
DWORD (WINAPI *pGetExtendedTcpTable)(
PVOID pTcpTable,
PDWORD pdwSize,
BOOL bOrder,
ULONG ulAf,
TCP_TABLE_CLASS TableClass,
ULONG Reserved
);
MIB_TCPTABLE_OWNER_PID *pTCPInfo;
MIB_TCPROW_OWNER_PID *owner;
DWORD size;
DWORD dwResult;

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

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

dwResult = pGetExtendedTcpTable(NULL,       &size, false, AF_INET, TCP_TABLE_OWNER_PID_LISTENER, 0);
pTCPInfo = (MIB_TCPTABLE_OWNER_PID*)malloc(size);
dwResult = pGetExtendedTcpTable(pTCPInfo,   &size, false, AF_INET, TCP_TABLE_OWNER_PID_LISTENER, 0);
for (DWORD dwLoop = 0; dwLoop < pTCPInfo->dwNumEntries; dwLoop++)
{
owner = &pTCPInfo->table[dwLoop];
ApplicationName = GetNameByPID(owner->dwOwningPid);
OpenedPort = convertInt(ntohs(owner->dwLocalPort));
RemotePort = convertInt(ntohs(owner->dwRemotePort));
aux = "TCP ; " + OpenedPort + ";"+ RemotePort+";"+ ApplicationName + "\n";
result = result + aux;

}
return result;
}

Но если я сравню результат с результатом netstat -ano эта функция не возвращает все порты TCP.

3

Решение

использование TCP_TABLE_OWNER_PID_ALL на месте TCP_TABLE_OWNER_PID_LISTENER и вы получите все порты TCP.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]