我正在尝试为golang可执行文件编写一个http(s)代理,这就是我所做的:
localhost
。预期: 我希望所有请求都重定向到localhost:80(443),这些请求将失败。
结果 :. dll注入后不会立即生效,请求仍然可以正常工作。我已经在那些“ getaddrinfo ...”函数中添加了MessageBox,它们没有被调用。
但是大约三分钟后,.dll似乎可以正常工作,所有请求均失败,并弹出MessageBox。
问题:我猜golang或Windows操作系统会缓存dns,并每隔几分钟刷新一次缓存吗?可以手动刷新缓存吗?因此,我可以使.dll立即生效。
答案 0 :(得分:0)
No Go(大多数语言标准库)不缓存DNS响应,而仅依赖于操作系统。 IIRC Windows和macOS默认情况下将缓存DNS,但Linux发行版通常不缓存。
如果您可以挂接到GetAddrInfoW
调用中,则可以绕过Windows的缓存(可以检查Go正在lookupIP
的{{1}}方法中调用syscall),但我没有认为您可以使用DLL,因为Go拥有自己的syscall实现。
除此之外,您还可以通过运行src/net/lookup_windows.go
命令来刷新Windows DNS缓存。