我试图为golang可执行文件编写一个http(s)代理,这就是我所做的:
localhost。预期的:我预期所有请求都重定向到本地主机:80(443),这些请求将失败。
结果:当注入.dll时,它不会立即生效,请求仍然正常工作。我在那些'getaddrinfo‘中添加了MessageBox .函数,它们不被调用。
但是大约过了三分钟,.dll似乎就工作了,所有请求都失败了,MessageBox弹出了。
问题:我想戈朗或Windows会缓存dns,并每隔几分钟刷新一次缓存?是否可以手动刷新缓存?这样我就可以使.dll立即生效。
发布于 2018-11-03 12:09:03
不,Go (和大多数语言标准库)不缓存DNS响应,只依赖于操作系统。默认情况下,IIRC窗口和macOS将缓存DNS,但Linux发行版通常不会缓存。
如果您可以连接到GetAddrInfoW调用,就可以绕过Windows的缓存(您可以检查Go是否正在调用src/net/lookup_windows.go中的lookupIP方法中的syscall ),但我认为您不可能连接到使用DLL,因为Go有自己的syscall实现。
除此之外,还可以通过运行ipconfig /flushdns命令来刷新Windows缓存。
https://stackoverflow.com/questions/53122861
复制相似问题