Мониторы ресурсов Windows & quot; Сетевая активность & quot; Переполнение стека

Я пытаюсь выяснить, как получить всю сетевую активность для данного процесса. В приложении Windows «Resource Monitor» в поле «Сетевая активность» вы можете видеть все соединения tcp / udp, отправляемые данные и т. Д. Сначала я попытался использовать команду netstat cmd и собирался проанализировать это, но быстро понял, что «пропускает» целую кучу соединений udp. Так что это было вне. Теперь я искал в использовании iphlpapi.h в C ++ вместе с его GetExtendedUdpTable функция. Но даже это, кажется, не показывает все данные, которые показывает Resource Monitor. Может кто-нибудь направить меня к надлежащему API Windows, который может получить ту же информацию, что и на вкладке «Сетевая активность» в разделе «Монитор ресурсов». Я долго искал, и все, что я нашел, очень старое, я надеюсь использовать любой современный / современный подход. Это не обязательно должно быть обратно совместимо, хорошо только для windows 10.

По сути, моей конечной целью является создание приложения, которое может автоматически определять местоположение ip с использованием базы данных для целевого приложения (включая соединения UDP). Теперь я уверен, что есть много библиотек / приложений, которые уже могут это сделать. Я просто хочу сделать это как учебный процесс, поэтому я хотел бы избегать любых библиотек / API, кроме предоставляемых Windows.

Это то, с чем я сейчас работаю, пожалуйста, прости использование плохих практик, таких как использование printf и не используя static_cast и т.д. Я буду переписывать все правильно, как только найду способ получения информации, которую я ищу.

    MIB_UDPTABLE_OWNER_PID* pUdpTable;
MIB_UDPROW_OWNER_PID* owner;

DWORD dwSize;
DWORD dwResult;

dwResult = GetExtendedUdpTable(NULL, &dwSize, false, AF_INET, UDP_TABLE_OWNER_PID, 0);
pUdpTable = (MIB_UDPTABLE_OWNER_PID*)MALLOC(dwSize);
dwResult = GetExtendedUdpTable(pUdpTable, &dwSize, false, AF_INET, UDP_TABLE_OWNER_PID, 0);

for (DWORD dwLoop = 0; dwLoop < pUdpTable->dwNumEntries; dwLoop++) {
owner = &pUdpTable->table[dwLoop];
printf("%ld ", owner->dwOwningPid);

HANDLE Handle = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE,
owner->dwOwningPid
);
if (Handle) {
TCHAR Buffer[MAX_PATH];
if (GetModuleFileNameEx(Handle, 0, Buffer, MAX_PATH)) {
printf(Buffer);
printf("\n");
} else {
printf("Error GetModuleFileNameEx : %lu\n", GetLastError());
}
CloseHandle(Handle);
} else {
printf("Error OpenProcess : %lu\n", GetLastError());
}
}

FREE(pUdpTable);

4

Решение

Задача ещё не решена.

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

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

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