问题描述
在DNS服务器进行处理DNS查询时,如果此时查询的域名是中文域名,那么DNS的处理函数把它转换为dns.Question的类型时,域名名称会乱码。
原因是:miekg/dns在进行传输域名时,仅仅支持ASCII编码,而中文域名是非ASCII编码,所以在解码的时候会出现问题。
解决方法
为了正确解析包含非 ASCII 字符的域名,需要进行 Punycode 编码和解码。Punycode 是一种将非 ASCII 字符转换为 ASCII 字符的编码方案。
golang.org/x/net/idna
输出
idna.ToASCIIxn--__d201_gyc_hk2-k52xbqg16ic51ccn7f1g2b1cxbidna.ToUnicode北航_学院路校区_D201_gyc_hk2
golang.org/x/net/idna
因此,在接收到该乱码域名后,进行一次Punycode解码即可。
注意事项
另外需要注意的是,域名是大小写不敏感的,若将域名记录写到数据库时,要注意全部小写,或者全部大写,保持一致性,不然会出现无法解析域名的问题。