一、通过Linux命令实现


ping www.baidu.com
nslookup www.baidu.com
nslookup 14.215.177.166

为什么这个命令会有一个192.168.1.1呢?

192.168.1.1是默认的DNS服务器。

二、DNS的理解

DNS的解析流程:

1.客户端访问www.baidu.com,检查浏览器是否有缓存,若无,往下走

2.操作系统检查host文件,有无对应关系,若无,往下走

3.在系统DNS缓存中找,若有返回域名对应的IP,若无,往下走

4.找事先设置好的DNS服务器(主&备)去请求,若在DNS服务器的解析库中找不到,往下走

5.向根发送请求,根看到要请求的是com,就将com所在的ns服务器告诉我们的DNS

6.我们的DNS去请求com所在的ns服务器

7.请求到达ns服务器,ns服务器看域名是baidu这个域下的,就把baidu所在的ns服务器地址告诉我们的DNS

8.我们的DNS去请求baidu所在的ns服务器

9.baidu的ns服务器看要访问www,就找到www对应的A记录的IP,将其返回给我们的DNS

10.我们的DNS再把最终解析到的IP返回给客户端,客户端直接去访问。

三、Java实现通过IP获取域名

引入依赖


<!-- https://mvnrepository.com/artifact/dnsjava/dnsjava -->
<dependency>
<groupId>dnsjava</groupId>
<artifactId>dnsjava</artifactId>
<version>2.1.1</version>
</dependency>

代码实现


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();
} }
}

执行结果(要去掉最后的点,最后面的点是根的意思。www.baidu.com.的意思就是根下的com下的baidu)

三、Java实现通过域名获取IP

代码


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[i].getHostAddress());
}
} catch (UnknownHostException uhe) {
System.err.println("Unable to find: " + args[0]);
}
}
}

参考文档

[1]: DNS深度理解 [ 一 ]

[2]: java通过ip拿不到域名的坑

[3]: 大规模爬虫为什么要管理DNS缓存

Java实现通过IP获取域名,通过域名获取IP的更多相关文章

  1. 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容

    <?php /************************ * 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容 * 创建时间:2008-12-09 * 创建人:张宴(img. ...

  2. Java企业微信开发_15_查询企业微信域名对应的所有ip

    一.前言 二.方法 1.在线网站 百度搜索"域名查IP",可查到如下网站,输入域名即可查到所有IP: 站长工具 site.ip138.com tools.ipip.net 2.li ...

  3. 同一域名对应多个IP时,PHP获取远程网页内容的函数

    同一域名对应多个IP时,PHP获取远程网页内容的函数 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389 ...

  4. nslookup获取域名对应的的ip地址

    1.先用nslookup获得域名对应的主机ip:nslookup 域名 2.再根据主机ip获得对应的主机名称: host ip $ nslookup baidu.com Server: 127.0.1 ...

  5. 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程

    第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...

  6. 爬虫实现:根据IP地址反查域名

    域名解析与IP地址 域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务:IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址.域名解析 ...

  7. java 抓取百度根据关键词搜索域名

    package baidusearch; import com.sun.glass.ui.SystemClipboard; import java.util.*; import java.util.H ...

  8. [转帖]一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS

    一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS https://home.cnblogs.com/u/beyang/ 一台服务器,两个域名 首先购买https,获取到CA证 ...

  9. TCP/IP网络编程之域名及网络地址

    域名系统 DNS是对IP地址和域名进行互相转换的系统,其核心是DNS服务器.提供网络服务的服务端也是通过IP地址来区分的,但由于IP地址难于记忆,因此通过容易记忆并表述的域名来取代IP地址 在浏览器地 ...

  10. 用花生壳实现内网映射,决解无域名、无公网IP、无服务器空间问题

    无域名.无公网IP.无服务器空间用花生壳提供的免费内网映射吧.你的PC就是服务器,花生壳提供的自定义二级域名轻松访问你的个人网站. 1.首先你得注册哦,然后申请免费的域名(2个) 2.设置路由器,下面 ...

随机推荐

  1. vue的事件对象

    事件对象: v-on:click/mouseover 简写:     @click=""   @click="show($event)" <input t ...

  2. 解决github提示安全漏洞的问题

    今天在提交代码的时候发现github提示了这样的错误: We found potential security vulnerabilities in your dependencies. Only t ...

  3. jupyter修改默认目录

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10841241.html 一.修改 win10 ...

  4. Apache老版本下载地址

    有时候我们想做测试或者使用旧版本软件时,往往发现官方网站已经下架,以Apache为例: Apache旧版本下载地址:http://archive.apache.org/dist/httpd/ .... ...

  5. __init__、__new__方法详解

    __init__详解 class Dog(object): def __init__(self): print('init方法') def __del__(self): print('del方法') ...

  6. HTML的BODY内标签介绍

    一.基本标签 <body> <b>加粗</b> <i>斜体</i> <u>下划线</u> <s>删除线& ...

  7. python-----图像去重(imagededup)

    安装库: pip install imagededup 安装可能遇到的问题参考: Cannot uninstall 'wrapt'. It is a distutils installed proje ...

  8. vue + jenkins 自动部署到指定的目录

    1. 首先选择自由风的构建方式 2. 我的源码在gitlab上,在源码管理下,提供仓库URL和凭证,以及gitlab的分支 3. 在构建环境下选择提供Node &npm bin/folder ...

  9. linux网络编程之socket编程(六)

    经过一个国庆长假,又有一段时间没有写博文了,今天继续对linux网络编程进行学习,如今的北京又全面进入雾霾天气了,让我突然想到了一句名句:“真爱生活,珍惜生命”,好了,言归正传. 回顾一下我们之间实现 ...

  10. Git 的用法

    对于GIT  的用法,最近一直在寻找方法.网上也能找到一些方法.但是感觉说的不是很清楚,在这里我基于自己经验写一些. 对于任何一种方法都要安装GIT. 我是基于VS Code 2015 来做的. 在安 ...