【发布时间】:2018-11-02 16:55:30
【问题描述】:
我正在尝试为 golang 可执行文件编写一个 http(s) 代理,这就是我所做的:
- 编写一个 .dll 挂钩 'getaddrinfo'、'GetAddrInfoW'、'gethostbyname',将所有域重定向到
localhost。 - 将 .dll 注入 golang_target.exe(现在所有请求都重定向到 localhost)
预期: 我希望所有请求都被重定向到 localhost:80(443) 并且这些请求将失败。
结果:.dll注入后,并没有立即生效,requests仍然可以正常工作。我在那些'getaddrinfo ...'函数中添加了MessageBox,它们没有被调用。
但大约三分钟后,.dll 似乎可以工作,所有请求都失败,并且弹出 MessageBox。
问题:我猜是golang还是Windows操作系统缓存了dns,每隔几分钟刷新一次缓存?是否可以手动刷新缓存?所以我可以让.dll立即生效。
【问题讨论】:
-
Go 不会缓存 dns 结果,但取决于您构建应用程序的方式,操作系统可能会。您可能还必须考虑正在重复使用的活动 http 连接。
-
确实,正如 Jim 所说,Go 没有自己的 DNS 缓存。不过,Windows 肯定会这样做。