gpt4 book ai didi

go - Golang如何在Win10上缓存DNS?

转载 作者:数据小太阳 更新时间:2023-10-29 03:21:27 25 4
gpt4 key购买 nike

我正在尝试为 golang 可执行文件编写一个 http(s) 代理,这就是我所做的:

  1. 编写一个 Hook 'getaddrinfo'、'GetAddrInfoW'、'gethostbyname' 的 .dll,将所有域重定向到 localhost
  2. 将 .dll 注入(inject) golang_target.exe(现在所有请求都重定向到本地主机)

预期:我希望所有请求都重定向到 localhost:80(443) 并且这些请求将失败。

结果:注入(inject).dll后,并没有立即生效,requests仍然正常。我在那些“getaddrinfo ...”函数中添加了 MessageBox,它们没有被调用。

但大约三分钟后,.dll 似乎可以正常工作,所有请求都失败,并弹出 MessageBox。

问题:我猜 golang 或 Windows 操作系统会缓存 dns,并每隔几分钟刷新一次缓存?是否可以手动刷新缓存?这样我就可以让.dll立即生效。

最佳答案

No Go(和大多数语言的标准库)不缓存 DNS 响应,只依赖于操作系统。 IIRC Windows 和 macOS 默认会缓存 DNS,但 Linux 发行版通常不会。

如果您可以挂接到 GetAddrInfoW 调用,您将绕过 Windows 的缓存(您可以检查 Go 是否在 src/中的 lookupIP 方法中调用系统调用net/lookup_windows.go) 但我不认为你可以使用 DLL,因为 Go 有自己的系统调用实现。

除此之外,您还可以通过运行 ipconfig/flushdns 刷新 Windows DNS 缓存
命令。

关于go - Golang如何在Win10上缓存DNS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53122861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com