我正在寻找从Windows系统映射DNS查询进程ID。 到目前为止,我只find一个解决scheme,但它是“苦乐参半”的。
我有这个本地的DNS服务器,截获DNS查询,并将其转发到真正的服务器。 这意味着我在UDP和TCP(主要是UDP)上都监听127.0.0.1:53。 当我得到一个DNS查询,我有客户端的端口,并用netstat跟踪它,因此我可以看到进行该查询的进程ID。
这里的问题是,我只得到Chrome.exe和svchost.exe的pid。 这是因为Chrome可能拥有自己的DNSparsing器,其他所有应用程序都使用svchost.exe中的默认Windowsparsing器。 如果我创build一个简单的控制台应用程序并发出一个HTTP请求来让我们说'Stack Overflow.com',我会从svchost.exe得到一个DNS请求。 我需要获取“consoleapplication1.exe”的pid。
我尝试使用netstat来查看进程连接到的IP,然后将它们与DNS查询的已解决答案关联起来,但这对我不起作用。 为什么? 因为我正在使用本地DNS服务器来阻止某些查询。 因此,例如,如果我想阻止“abc.com”,那么这个过程将永远不会连接到“abc.com”的IP,因为我阻止了它从DNS服务器。
我只需要find我阻止的过程。