Как я могу получить анализируемый список удаленных UDP-адресов, как это видно в таких инструментах, как Windows Resource Monitor, Netlimiter и т. Д. - PullRequest
0 голосов
/ 09 апреля 2019

Как следует из названия, я ищу способ мониторинга сетевой активности.В частности, активность UDP и данные удаленных IP-адресов отправляются в / из.

Пример из встроенного монитора ресурсов Windows: example1

Столбец «Адреса» - это разрешенные IP-адресаиз (в данном случае) удаленных конечных точек UDP.

Пример из стороннего приложения "Netlimiter 4": example0

Первый столбец в этом случае - это неразрешенный удаленный IP-адрес, за которым следуетскорость передачи данных.

Учитывая эти две программы, я знаю, что это возможно сделать.Я просто в растерянности относительно того, как мне получить эти данные.

Итак, прежде всего, я уже попробовал команду netstat, которая не предоставляет никакой полезной информации (без удаленных адресов UDP).

Я также попробовал функцию GetExtendedUdpTable из iphlpapi.h (кажется, она также не дает мне то, что я хочу.)

Пример моего теста GetExtendedUdpTable code:

    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);

Я ищу решение, которое можно встроить в инструмент, который я хотел бы создать. (Не требуется, чтобы конечный пользователь загружал дополнительную стороннюю программу.)

Большая часть проекта будет написана на JS с использованием NodeJS / Electron, в котором говорится, что если я ищу общее решение, независимое от языка программирования.(Хотя было бы неплохо избежать python / java, чтобы я мог ограничить количество виртуальных машин, необходимых для запуска проекта.)

...