是否可以使用 LSP/SPI 拦截 dns 查询?

bla*_*sun 3 dns winsock winsock-lsp

我写了我自己的 LSP,它工作正常。但是,我无法捕获 dns 查询。例如,没有像 WSPGetHostByName 或 WSPGetAddrInfo 这样的函数。

我的 lsp 也支持 UDP 协议,但它不起作用。如果我从控制台 (cmd.exe) 运行 nslookup,它似乎可以工作,但我无法捕获 gethostbyname。有谁知道这是怎么做到的吗?我不认为编写 NSP(名称服务提供商)是一种解决方案。但我可能错了。

谢谢

小智 5

我们开发了一个可以“拦截”DNS 查询的 LSP。唯一的方法是连接所有 DNS 功能,请记住,您需要解决一些挑战:

  1. 您需要使用一个支持 32 位和 64 位代码的良好挂钩库。
  2. 库许可必须适合您的应用程序,有一些免费库,但只能在免费项目中自由使用。
  3. 当您挂钩函数时,您需要确保不要修改某些不是基于 IP 的值并将查询推迟到真正的函数。

拦截 UDP 将不起作用,因为查询是从 MS DNS 客户端发出的,因此除非您编写低级驱动程序,例如:TDI、NDIS 或 WFP,否则您必须挂钩函数(或编写 NSP)。NSLookup 对您有用,因为它自己创建 DNS 查询。