Как получить исходный PID TCP-подключения в Windows с помощью GetExtendedTcpTable?

Я пытаюсь получить PID процесса, устанавливающего локальные соединения с локальным http-сервером изнутри сервера. например: Chrome — > HTTPREQ — > > httpServer:8080. Таким образом, из httpServer я могу знать, какой процесс делает соединение, в данном случае Chrome.

Я могу запросить все tcp-соединения, используя GetExtendedTcpTable с TCP_TABLE_OWNER_MODULE_ALL, а затем проверить каждую строку и использовать row — >dwOwningPid

8080 == ntohs(row->dwRemotePort) &&
row->dwLocalAddr == inet_addr("127.0.0.1") && 
row->dwRemoteAddr == inet_addr("127.0.0.1")

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

chrome -> av wfp -> httpserver

Без добавления исключений в AV, есть ли способ получить PID исходного процесса, который запустил запрос, а не сервер пересылки, как сетевой фильтр AV?

Спасибо заранее.

1 ответ

  1. Ответ на мой собственный вопрос:

    Chrome — > AV — > > WFP

    Если AV (Xport) — > (Yport)ВПП

    Обычно:

    Chrome (Xport -1) — > WFP.

    Это сработало для меня.