如何使用 GetExtendedTcpTable 在 Windows 中获取 TCP 连接的原始 PID?

How to get the original PID of a TCP connection in Windows using GetExtendedTcpTable?

我正在尝试从服务器内部获取与本地 http 服务器建立本地连接的进程的 PID。例如:Chrome-> HTTPREQ -> httpServer:8080。所以从 httpServer 我可以知道哪个进程正在建立连接,在这种情况下 Chrome.

我可以使用 GetExtendedTcpTable 和 TCP_TABLE_OWNER_MODULE_ALL 查询所有 tcp 连接,然后检查每一行并使用 row->dwOwningPid

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

问题似乎是因为我安装了一个拦截我的流量的 AV,所以我得到的是 AV 的 PID 而不是启动连接的原始应用程序。

chrome -> av wfp -> httpserver

在不向 AV 添加排除项的情况下,有没有一种方法可以检索启动请求的原始进程的 PID,而不是像 AV 网络过滤器这样的转发器?

提前致谢。

回答我自己的问题:

Chrome -> AV -> 世界粮食计划署

如果 AV (Xport) -> (Yport)WFP

通常:

Chrome (Xport -1) -> WFP.

这对我有用。