说明: 本文不涉及底层的 DNS 协议, 直接使用Java平台提供的API进行操作。

DNS也就是 Domain Name Service,即 域名服务。

我们知道, Java中与网址有关的类包括 java.net.URL 和 java.net.URI 等, 其中 URI 是资源定位符, 可能包括 file: 之类的协议。

所以此处我们使用 URL 类, 获取端口号的代码如下:

/**

* 获取端口号

*

* @param href 网址, ftp, http, nntp, ... 等等

* @return

* @throws IOException

*/

public static int parsePort(String href) throws IOException {

//

URL url = new URL(href);

// 端口号; 如果 href 中没有明确指定则为 -1

int port = url.getPort();

if (port < 0) {

// 获取对应协议的默认端口号

port = url.getDefaultPort();

}

return port;

}

URL 类是Java早期就存在的一个类。 内部逻辑比较复杂, 有兴趣可以自己查看相关的JDK实现代码。

其中获取端口号的2个方法:

getPort() 就是获取网址里面指明的端口号, 如果没有指定, 则返回 -1。

getDefaultPort() 是获取协议对应的默认端口号, 如 http 协议默认端口号为 80, https 协议默认端口号是 443 等。

然后我们看提取 Host 部分的代码:

/**

* 获取Host部分

*

* @param href 网址, ftp, http, nntp, ... 等等

* @return

* @throws IOException

*/

public static String parseHost(String href) throws IOException {

//

URL url = new URL(href);

// 获取 host 部分

String host = url.getHost();

return host;

}

本质上, 也可以通过正则表达式或者String直接截取 Host, 但如果碰上复杂情况, 也不好处理, 例如: https://yourname:passwd@gitee.com/mumu-osc/NiceFish.git 这样的复杂网址。

提取出域名之后, 可以通过 java.net.InetAddress 类来查找IP地址。

代码如下所示:

/**

* 根据域名(host)解析IP地址

*

* @param host 域名

* @return

* @throws IOException

*/

public static String parseIp(String host) throws IOException {

// 根据域名查找IP地址

InetAddress inetAddress = InetAddress.getByName(host);

// IP 地址

String address = inetAddress.getHostAddress();

return address;

}

可以看到,我们使用了 InetAddress.getByName() 静态方法来查找IP。

该类也提供了其他静态方法, 但一般不怎么使用, 有兴趣可以点开源码看看。

然后, 我们通过 main() 方法进行简单的测试:

public static void main(String[] args) throws IOException {

//

String href = "http://www.cncounter.com/tools/shorturl.php";

// 端口号

int port = parsePort(href);

// 域名

String host = parseHost(href);

// IP 地址

String address = parseIp(host);

//

System.out.println("host=" + host);

System.out.println("port=" + port);

System.out.println("address=" + address);

}

执行结果为:

host=www.cncounter.com

port=80

address=198.11.179.83

知道IP和端口号, 我们就可以直接通过 Socket 来进行连接了。

当然, 如果是 http 协议, 可以使用 Apache 的 HttpClient 工具, 功能强大而且使用方便。 但这个库有个不好的地方在于,各个版本之间并不兼容, API 也经常换, 编程时需要根据特定版本号来进行处理。

完整的代码如下所示:

import java.io.IOException;

import java.net.*;

/**

* 查找IP地址

*/

public class TestFindDNS {

public static void main(String[] args) throws IOException {

//

String href = "http://www.cncounter.com/tools/shorturl.php";

// 端口号

int port = parsePort(href);

// 域名

String host = parseHost(href);

// IP 地址

String address = parseIp(host);

//

System.out.println("host=" + host);

System.out.println("port=" + port);

System.out.println("address=" + address);

}

/**

* 获取端口号

*

* @param href 网址, ftp, http, nntp, ... 等等

* @return

* @throws IOException

*/

public static int parsePort(String href) throws IOException {

//

URL url = new URL(href);

// 端口号; 如果 href 中没有明确指定则为 -1

int port = url.getPort();

if (port < 0) {

// 获取对应协议的默认端口号

port = url.getDefaultPort();

}

return port;

}

/**

* 获取Host部分

*

* @param href 网址, ftp, http, nntp, ... 等等

* @return

* @throws IOException

*/

public static String parseHost(String href) throws IOException {

//

URL url = new URL(href);

// 获取 host 部分

String host = url.getHost();

return host;

}

/**

* 根据域名(host)解析IP地址

*

* @param host 域名

* @return

* @throws IOException

*/

public static String parseIp(String host) throws IOException {

// 根据域名查找IP地址

InetAddress.getAllByName(host);

InetAddress inetAddress = InetAddress.getByName(host);

// IP 地址

String address = inetAddress.getHostAddress();

return address;

}

}

OK, 请根据具体情况进行适当的封装和处理。

总结

以上所述是小编给大家介绍的Java 根据网址查询DNS/IP地址的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

java获取dns_Java 根据网址查询DNS/IP地址的方法相关推荐

  1. java 根据ip获取dns_Java技巧: 根据网址查询DNS/IP地址

    需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的IP地址和端口号. 说明: 本文不涉及底层的 DNS 协议, ...

  2. Java技巧: 根据网址查询DNS/IP地址

    需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的IP地址和端口号. 说明: 本文不涉及底层的 DNS 协议, ...

  3. 使用Java获取发送请求的电脑的IP地址

    介绍 客户端所有的请求信息都可以通过HttpServletRequest获得,获取客户端ip可以通过getRemoteAddr()获取. 但是如果客户端是通过代理访问我们的服务器,那么getRemot ...

  4. java域名查询_Java技巧: 根据网址/域名查询DNS/IP地址

    需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的IP地址和端口号. 说明: 本文不涉及底层的 DNS 协议, ...

  5. Java技巧: 根据网址/域名查询DNS/IP地址

    需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的IP地址和端口号. 说明: 本文不涉及底层的 DNS 协议, ...

  6. java 获取linux mac_java在linux获得ip地址和mac

    以前在linux下获取ip和mac一般使用jni,调用linux的ioctl.当然也有使用shell获取的. 发现在jdk 6下已经实现了,java.net.NetworkInterface上面有静态 ...

  7. java获取请求者真实的公网ip地址

    在java程序中获取浏览者真实的公网ip地址,程序健壮性极好,代码如下: public void downLoad(HttpServletRequest request) {String ip = n ...

  8. 电脑查询ip地址的方法,第一种最为简单

    一般来说,每台电脑都会有固定的一个ip地址.部分电脑则是动态ip地址,每次连接网络时会自动分配.当我们需要查询ip地址的时候,该怎么操作呢?看完你就知道了. 更多系统教程尽在小白系统重装官网 系统:w ...

  9. java什么是网络接口_java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)...

    使用java进行网络程序的开发,可以说是一件令人愉悦的事情,对于用惯了C++网络接口编程的人来说,当他们首次使用Java开发网络应用程序,会发现java开发网络应用是如此的简单,甚至仅用几分钟时间,您 ...

最新文章

  1. 深入解析Windows操作系统笔记——CH1概念和术语
  2. HDU——2874 Connections between cities
  3. 主席树有关的一些题目(持续更新)
  4. 【Python CheckiO 题解】The Most Numbers
  5. 几幅图,拿下 HTTPS
  6. 获取数据后插入到jsp页面(自用,没内容)
  7. CNCC2018 即将开幕,报名优惠截止倒计时5天!
  8. MSU 出品的 H.264 编码器比较 (2011.5)
  9. 2017 ACM/ICPC(北京)总结
  10. Visual Studio2010安装步骤
  11. 大学生应该怎么学习Java?
  12. python datetime库的基本使用
  13. QQ微信支付宝三合一收款码原理及代码实现
  14. 在家搭建 Minecraft 服务器,和远程小伙伴一起联机
  15. 工作篇 之 解决谷歌地图与 NestedScrollView 滑动冲突
  16. JAVA经典垃圾收集器与内存分配策略
  17. 用Python实现无条件重复循环
  18. 【逻辑题】人与熊过河
  19. panda开始python的数据科学
  20. 【历史上的今天】1 月 15 日:维基百科上线;信息安全大师出生;英特尔推出 Viiv

热门文章

  1. script 标签上的 defer 和 async 属性是什么?
  2. unity使用WASD最简单的控制移动方式
  3. 我的世界多人在线服务器,我的世界2b2t服务器-1.16.X网红多人在线生存服务器
  4. 微信公众号JSAPI分享功能踩坑记录
  5. 10大顶级网络监控软件和可见性工具
  6. 我送大家两句“名言”
  7. 计算机网络实验室建设,中职计算机网络实验室建设
  8. Windows 10 下支付宝无法安装数字证书解决方法
  9. php 获取临时素材,php微信获取临时素材的方法(附代码)
  10. android打不出字母来,英雄联盟游戏里打不了字-不能打字解决方法