为什么我无法 ping 通 linux 上带有前导或尾随下划线的地址
Why can I not ping addresses with leading or trailing underscores on linux
在 windows:
- 在浏览器中访问
_.github.com
有效
nslookup _.github.com
有效
ping _.github.com
有效
在 linux 上(在两个独立的网络上测试):
- 在浏览器中访问
_.github.com
有效
host _.github.com
有效
ping _.github.com
没有
python -c "import requests; requests.get('_.github.com')"
不
这是怎么回事?
因为 Linux(更具体地说,它的某些组件,例如 libresolv 甚至 ping 本身)正在遵守 RFC。主机名中不允许使用下划线,主机名是您在使用 ping 时查找的内容。 (其他类型的 DNS 记录中允许使用下划线,例如 SRV 记录、TXT 记录,例如用于 DKIM 的记录...)
参见RFC 1123 section 2.1, and RFC 952。以下是有关此主题讨论的其他一些链接:
Stack Overflow - Can (hostname) subdomains have an underscore “_” in it?
Domainkey - Underscores in DNS
Quora - Why are underscores not allowed in DNS host names?
更新:正如一些人在评论中指出的那样,Linux ping 对 a_a.github.com
很满意。再做一些测试(在本例中为 CentOS 7):
ping: unknown host _.github.com
ping: unknown host a_.github.com
ping: unknown host _a.github.com
$ ping a_a.github.com
PING github.map.fastly.net (23.235.40.133) 56(84) bytes of data.
64 bytes from 23.235.40.133: icmp_seq=1 ttl=59 time=29.7 ms
所以看起来 Linux ping 并没有完全拒绝下划线,但它确实不允许它成为主机名。
在 windows:
- 在浏览器中访问
_.github.com
有效 nslookup _.github.com
有效ping _.github.com
有效
在 linux 上(在两个独立的网络上测试):
- 在浏览器中访问
_.github.com
有效 host _.github.com
有效ping _.github.com
没有python -c "import requests; requests.get('_.github.com')"
不
这是怎么回事?
因为 Linux(更具体地说,它的某些组件,例如 libresolv 甚至 ping 本身)正在遵守 RFC。主机名中不允许使用下划线,主机名是您在使用 ping 时查找的内容。 (其他类型的 DNS 记录中允许使用下划线,例如 SRV 记录、TXT 记录,例如用于 DKIM 的记录...)
参见RFC 1123 section 2.1, and RFC 952。以下是有关此主题讨论的其他一些链接:
Stack Overflow - Can (hostname) subdomains have an underscore “_” in it?
Domainkey - Underscores in DNS
Quora - Why are underscores not allowed in DNS host names?
更新:正如一些人在评论中指出的那样,Linux ping 对 a_a.github.com
很满意。再做一些测试(在本例中为 CentOS 7):
ping: unknown host _.github.com
ping: unknown host a_.github.com
ping: unknown host _a.github.com
$ ping a_a.github.com
PING github.map.fastly.net (23.235.40.133) 56(84) bytes of data.
64 bytes from 23.235.40.133: icmp_seq=1 ttl=59 time=29.7 ms
所以看起来 Linux ping 并没有完全拒绝下划线,但它确实不允许它成为主机名。