Java实现通过IP获取域名,通过域名获取IP
一、通过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的更多相关文章
- 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容
<?php /************************ * 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容 * 创建时间:2008-12-09 * 创建人:张宴(img. ...
- Java企业微信开发_15_查询企业微信域名对应的所有ip
一.前言 二.方法 1.在线网站 百度搜索"域名查IP",可查到如下网站,输入域名即可查到所有IP: 站长工具 site.ip138.com tools.ipip.net 2.li ...
- 同一域名对应多个IP时,PHP获取远程网页内容的函数
同一域名对应多个IP时,PHP获取远程网页内容的函数 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389 ...
- nslookup获取域名对应的的ip地址
1.先用nslookup获得域名对应的主机ip:nslookup 域名 2.再根据主机ip获得对应的主机名称: host ip $ nslookup baidu.com Server: 127.0.1 ...
- 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程
第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...
- 爬虫实现:根据IP地址反查域名
域名解析与IP地址 域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务:IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址.域名解析 ...
- java 抓取百度根据关键词搜索域名
package baidusearch; import com.sun.glass.ui.SystemClipboard; import java.util.*; import java.util.H ...
- [转帖]一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS
一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS https://home.cnblogs.com/u/beyang/ 一台服务器,两个域名 首先购买https,获取到CA证 ...
- TCP/IP网络编程之域名及网络地址
域名系统 DNS是对IP地址和域名进行互相转换的系统,其核心是DNS服务器.提供网络服务的服务端也是通过IP地址来区分的,但由于IP地址难于记忆,因此通过容易记忆并表述的域名来取代IP地址 在浏览器地 ...
- 用花生壳实现内网映射,决解无域名、无公网IP、无服务器空间问题
无域名.无公网IP.无服务器空间用花生壳提供的免费内网映射吧.你的PC就是服务器,花生壳提供的自定义二级域名轻松访问你的个人网站. 1.首先你得注册哦,然后申请免费的域名(2个) 2.设置路由器,下面 ...
随机推荐
- vue的事件对象
事件对象: v-on:click/mouseover 简写: @click="" @click="show($event)" <input t ...
- TortoiseSVN-1.7.12.24070-x64-svn-1.7.9安装包和汉化包
链接:https://pan.baidu.com/s/1NbrQW44N_kTh7VN0Fz0zVA 提取码:nhd9 先安装TortoiseSVN-1.7.12.24070-x64-svn-1.7. ...
- 学习笔记之Google
Google Pro Tip: Use Back-of-the-envelope-calculations to Choose the Best Design - High Scalability - ...
- vue-cli项目开发运行时内存暴涨卡死电脑
最近开发一个vue项目时遇到电脑卡死问题,突然间系统就非常卡,然后卡着卡着就死机了,鼠标也动不了了,只能冷启动.而且因为是突然卡死,没来得及打开任务管理器. 最开始以为是硬盘的问题,但是在卡死几次后, ...
- npm查看包版本
点击跳转 ~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0 ^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包 ...
- Java中异常关键字throw和throws使用方式的理解
Java中应用程序在非正常的情况下停止运行主要包含两种方式: Error 和 Exception ,像我们熟知的 OutOfMemoryError 和 IndexOutOfBoundsExceptio ...
- python常用内置方法
常用内建函数# 如何在遍历一个列表的同时获取当前下标? # 普通人的做法 list = [1, 2, 3, 4, 5, 6] index = 0 for i in list: print('下标%s' ...
- webpack 配置react脚手架(六):api
1 访问网址 https://cnodejs.org/api 可以调取api 2.//该body-parser 可以将请求的body数据,转变成 json 格式数据://express-session ...
- Gitlab,Mac下生成SSH Key222
git是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置.简单的说,Git - 版本控制工具:Github是一个网站,提供给用户空间创建git仓储 ...
- pyharm无法安装包的问题
1.换成下面这个网址 https://github.com/pypa/pip/issues/5236 2.下载最新的pip 3. 然后换回 https://pypi.org/simple/