主机名解析失败,包含utf-8字符的主机名出现“未知主机”错误

时间:2017-11-30 05:19:42

标签: utf-8 dns hostname getaddrinfo idn

我正在尝试从Linux客户端ping主机名“win-2k12r2-addc。阿伯测阿伯测ad.hai.com”。

我看到DNS请求通过线路传输,主机名以utf-8格式发送 并且我从DNS服务器获得了具有正确IP地址的响应。

但是ping失败并出现以下错误: ping:未知主机win-2k12r2-addc。阿伯测阿伯测ad.hai.com

如果我在/ etc / hosts中添加一个条目,它可以正常工作 我在/ etc / hosts中有以下条目。 ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++
127.0.0.1 localhost ava-dev
:: 1 localhost
10.141.33.93 win-2k12r2-addc。阿伯测阿伯测ad.hai.com
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++


/etc/nsswitch.conf文件具有以下主机条目 ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++
hosts:文件dns
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++

我有点怀疑当我们尝试解析地址时getaddrInfo()调用失败,即它无法正确处理主机名的DNS响应 包含unicode字符。

以前有人遇到过这个问题吗? 或者有没有人尝试从linux客户端解析unicode主机名?

我怀疑getaddrinfo()的原因是由于以下原因 除了ping之外,我尝试将以下ldap命令发送到同一主机,并且由于下面提到的错误而失败 ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++ ldapsearch -d 255 -x -h win-2k12r2-addc。阿伯测阿伯测ad.hai.com
ldap_create
ldap_url_parse_ext(LDAP://win-2k12r2-addc.%E9%98%BF%E4%BC%AF%E6%B5%8B%E9%98%BF%E4%BC%AF%E6%B5%8Bad.hai .COM)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host:TCP win-2k12r2-addc。阿伯测阿伯测ad.hai.com:389
ldap_connect_to_host:getaddrinfo失败:名称或服务未知 ldap_err2string
ldap_sasl_bind(SIMPLE):无法联系LDAP服务器(-1)
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++

在两个场景(ping / ldap)中,我看到DNS查询请求进入DNS服务器,并且DNS服务器的正确响应返回到linux客户端。 以下是DNS查询中发送的主机名的值

赢得-2k12r2-ADDC \ 351 \ 230 \ 277 \ 344 \ 274 \ 257 \ 346 \ 265 \ 213 \ 351 \ 230 \ 277 \ 344 \ 274 \ 257 \ 346 \ 265 \ 213ad.hai.com:输入A,类IN

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试在DNS系统中使用UTF-8或unicode,而DNS系统确实不喜欢这样。它想要ascii(参见RFC 5890,5891,5892,5893 - 但主要是5891)。转义utf-8字符不会将它们变成所需的ascii编码,称为punycode(以“xn--”为前缀)。您想使用具有punycode而不是UTF-8的IDN版本:

ping win-2k12r2-addc.xn--ad-tl3ca3569aba8944eca.hai.com