Java实现通过IP获取域名,通过域名获取IP
<h2 id="一通过linux命令实现">一、通过Linux命令实现</h2><pre><code>
ping www.baidu.com
nslookup www.baidu.com
nslookup 14.215.177.166
</code></pre>
<p><img src="https://img2018.cnblogs.com/blog/789766/201905/789766-20190530224336692-841057301.png" alt="" loading="lazy"></p>
<p>为什么这个命令会有一个<code>192.168.1.1</code>呢?</p>
<p><code>192.168.1.1</code>是默认的DNS服务器。</p>
<h2 id="二dns的理解">二、DNS的理解</h2>
<p>DNS的解析流程:</p>
<p>1.客户端访问www.baidu.com,检查浏览器是否有缓存,若无,往下走<br>
2.操作系统检查host文件,有无对应关系,若无,往下走<br>
3.在系统DNS缓存中找,若有返回域名对应的IP,若无,往下走<br>
4.找事先设置好的DNS服务器(主&备)去请求,若在DNS服务器的解析库中找不到,往下走<br>
5.向根发送请求,根看到要请求的是com,就将com所在的ns服务器告诉我们的DNS<br>
6.我们的DNS去请求com所在的ns服务器<br>
7.请求到达ns服务器,ns服务器看域名是baidu这个域下的,就把baidu所在的ns服务器地址告诉我们的DNS<br>
8.我们的DNS去请求baidu所在的ns服务器<br>
9.baidu的ns服务器看要访问www,就找到www对应的A记录的IP,将其返回给我们的DNS<br>
10.我们的DNS再把最终解析到的IP返回给客户端,客户端直接去访问。</p>
<p><img src="https://img2018.cnblogs.com/blog/789766/201905/789766-20190530231309996-1165699428.png" alt="" loading="lazy"></p>
<h2 id="三java实现通过ip获取域名">三、Java实现通过IP获取域名</h2>
<h4 id="引入依赖">引入依赖</h4>
<pre><code class="language-xml">
<!-- https://mvnrepository.com/artifact/dnsjava/dnsjava -->
<dependency>
<groupId>dnsjava</groupId>
<artifactId>dnsjava</artifactId>
<version>2.1.1</version>
</dependency>
</code></pre>
<h4 id="代码实现">代码实现</h4>
<pre><code class="language-java">
public class GetHostName {
public static void main(String[] args) {
try {
String hostName = Address.getHostName(InetAddress.getByName("14.215.177.166"));
System.out.println(hostName);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
</code></pre>
<p>执行结果(要去掉最后的点,最后面的点是根的意思。www.baidu.com.的意思就是根下的com下的baidu)</p>
<p><img src="https://img2018.cnblogs.com/blog/789766/201905/789766-20190530222903670-395843633.png" alt="" loading="lazy"></p>
<h2 id="三java实现通过域名获取ip">三、Java实现通过域名获取IP</h2>
<h4 id="代码">代码</h4>
<pre><code class="language-java">
public class GetIp {
public static void main(String[] args) {
try {
String name = "www.baidu.com";
InetAddress[] addresses = InetAddress.getAllByName(name);
for (int i = 0; i < addresses.length; i++) {
System.out.println(name + "[" + i + "]: "
+ addresses.getHostAddress());
}
} catch (UnknownHostException uhe) {
System.err.println("Unable to find: " + args);
}
}
}
</code></pre>
<p><img src="https://img2018.cnblogs.com/blog/789766/201905/789766-20190530223318288-442760146.png" alt="" loading="lazy"></p>
<h2 id="参考文档">参考文档</h2>
<p>: DNS深度理解 [ 一 ]<br>
: java通过ip拿不到域名的坑<br>
: 大规模爬虫为什么要管理DNS缓存</p>
</div>
<div id="MySignature" role="contentinfo">
<div id="cnblogs_post_body">
<h2 id="关于作者">关于作者</h2>
<p>
后端程序员,五年开发经验,从事互联网金融方向。技术公众号「清泉白石」。如果您在阅读文章时有什么疑问或者发现文章的错误,欢迎在公众号里给我留言。
</p>
<p>
<img src="https://images.cnblogs.com/cnblogs_com/fonxian/1480548/o_qrcode_for_gh_9424c5e5fcaa_258.jpg" alt="">
</p>
</div><br><br>
来源:https://www.cnblogs.com/fonxian/p/10952399.html
頁:
[1]