我使用 Cisco IPsec 连接到我的工作场所 VPN。我使用 OS X 的本机 Cisco IPSec 客户端进行连接。我们有一个内部 DNS 服务器,用于保存内部站点的记录,例如scotty.infinidat.com. 使用 curl 联系内部站点按预期工作。使用以下 Python 代码也可以:
import requests
resp = requests.get("http://www.google.com")
resp.raise_for_status()
resp = requests.get("http://scotty.infinidat.com")
resp.raise_for_status()
但是,尝试在 Go 中实现等价物失败:
包主
import (
"fmt"
"net/http"
)
func main() {
_, err := http.Get("http://google.com/") // This works
if err != nil {
panic(fmt.Sprintf("Error contacting Google: %s", err))
}
_, err = http.Get("http://scotty.infinidat.com/") // This doesn't
if err != nil {
panic(fmt.Sprintf("Error contacting an internal site: %s", err))
}
}
在连接到 VPN 时运行上述程序会产生以下输出:
panic: Error contacting internal site: Get http://scotty.infinidat.com/: dial tcp: lookup scotty.infinidat.com on 10.135.1.1:53: no such host
goroutine 1 [running]:
panic(0x290ca0, 0xc82010a490)
/usr/local/Cellar/go/1.6.2/libexec/src/runtime/panic.go:481 +0x3e6
main.main()
/Users/roeyd/src/go/src/webtest/main.go:16 +0x2af
其中 10.135.1.1 是我本地网络的 DNS 服务器。据我了解,纯 Go DNS 解析器在 OS X 上不可用。通过设置强制 Go 使用 cgo DNS 解析器GODEBUG=netdns=cgo没有任何区别。
森林海
大话西游666
相关分类