DNS域名解析为IPv6地址杂集

1. Linux中查询某个域名的ipv6地址:

nslookup -query=AAAA betax.cc
DNS域名解析为IPv6地址杂集_第1张图片

2. Windows中查询某个域名的ipv6地址:

nslookup -q=AAAA betax.cc
DNS域名解析为IPv6地址杂集_第2张图片

3. Java/Groovy中根据域名获取IPv6的实现:

[1]调用getAll会获取所有的地址:

for (InetAddress i : InetAddress.getAllByName("betax.cc")) {
    println i
}
[2]最终会调用Native方法:

DNS域名解析为IPv6地址杂集_第3张图片
[3]该Native方法的源码在: src/windows/native/java/net/Inet6AddressImpl.c#Java_java_net_Inet6AddressImpl_lookupAllHostAddr

DNS域名解析为IPv6地址杂集_第4张图片

[4]该方法中调用了系统函数getaddrinfo - Linux:  http://man7.org/linux/man-pages/man3/getaddrinfo.3.html
Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/ms738520(v=vs.85).aspx

该函数会返回所有的IP地址, 然后根据是否preferIPv6 or preferIPv4 来决定返回顺序.

4. Windows 或者 linux 如果想正确解析出IPv6的地址

 你本地必须拥有一个IPv6地址, windows添加IPv6地址可以用这个 - http://blog.csdn.net/ssergsw/article/details/9125813

5. 一个抓包结果:

dns是一个应用层协议, 底层实现是用的UDP 

ipv4的记录:

DNS域名解析为IPv6地址杂集_第5张图片

DNS域名解析为IPv6地址杂集_第6张图片

ipv6记录:

DNS域名解析为IPv6地址杂集_第7张图片

DNS域名解析为IPv6地址杂集_第8张图片

Ref:

[1]Java网络相关配置:https://docs.oracle.com/javase/1.5.0/docs/guide/net/properties.html

你可能感兴趣的:(linux,windows,java)