将DNS查询映射到流程ID

时间:2017-01-16 11:11:39

标签: c# windows sockets dns udp

我希望将Windows系统中的DNS查询映射到进程ID。 到目前为止我找到了一个解决方案,但它是“苦乐参半”。

我有这个本地DNS服务器拦截DNS查询并将它们转发到真实服务器。这意味着我在UDP和TCP(主要是UDP)上监听127.0.0.1:53。 当我获得DNS查询时,我有客户端的端口并使用netstat跟踪它,因此我可以看到进行该查询的进程ID。

这里的问题是,我只获得了Chrome.exe和svchost.exe的pid。 这是因为Chrome可能有自己的DNS解析器,其中所有其他应用程序都使用可能位于svchost.exe中的默认Windows解析程序。 如果我创建一个简单的控制台应用程序并发出HTTP请求让我们说'Stack Overflow.com',我将从svchost.exe获得DNS请求。 我需要获得'consoleapplication1.exe'的pid。

我尝试使用netstat查看进程连接的IP,然后将它们与该DNS查询的已解析答案相关联,但这对我不起作用。 为什么?因为我使用此本地DNS服务器来阻止某些查询。因此,例如,如果我想阻止“abc.com”,那么该进程将永远不会连接到“abc.com”的IP,因为我正在阻止它从DNS服务器。

我只需要找到我阻止的过程。

0 个答案:

没有答案