go net: LookupHost IDN support

ryoqjall  于 24天前  发布在  Go
关注(0)|答案(3)|浏览(22)

你正在使用的Go版本是(go version):
go version go1.9 linux/amd64

你正在使用的操作系统和处理器架构是(go env):
GOARCH="amd64"
GOBIN="/home/oleg/go/work"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/oleg/go/"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build065227263=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"

你尝试解决包含特殊符号(如'/','=')的主机名,但遇到了“no such host”的错误。实用程序host、dig和nslookup提供了这个机会。此外,它们允许解析长度大于255个字符的主机名,而不是net.LookupHost。
示例:

_, err := net.LookupHost("/.yandex.ru")
fmt.Println(err)      // lookup /.yandex.ru: no such host

你期望看到的是什么?
例如,主机名:

$ host /.yandex.ru
/.yandex.ru has address 213.180.204.242
/.yandex.ru mail is handled by 10 not-for-mail.yandex.net.
pjngdqdw

pjngdqdw2#

请注意,这里有一个很好的文档:https://tools.ietf.org/html/rfc6055。它全面覆盖了所需的领域。

我认为将现有的查找API变得更通用名称解析并不是一个好主意,因为在任何环境下正确且安全地实现解析仍然很困难。相反,对于用户应用程序来说,由它们负责选择标签编码和递归服务器可能更好。net包可能会通过提供改进的type Resolver struct以及即将到来的DNS信号/消息传输功能来帮助这些应用程序在异构环境中运行。

ogq8wdun

ogq8wdun3#

https://golang.org/cl/99623提到了这个问题:dns/dnsmessage: fix handling of non-LDH domain names

相关问题