InetAddress 方法学习

原文链接:
https://blog.csdn.net/f641385712/article/details/105185361

https://blog.csdn.net/f641385712/article/details/105233229


IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础。

InetAddress是Java对IP地址的封装。


静态方法得到InetAddress实例

InetAddress并没有提供public的构造器,而是提供了6个静态方法让你构造实例:

# 给定主机名,返回其IP地址的数组,基于系统配置的DNS服务解析。host可以是域名或是ip地址
public static InetAddress[] getAllByName(String host); # 次方法原理 → InetAddress.getAllByName(host)[0]
public static InetAddress getByName(String host);public static InetAddress getByAddress(String host, byte[] addr);
public static InetAddress getByAddress(byte[] addr);public static InetAddress getLoopbackAddress();public static InetAddress getLocalHost();

1.2、用域名创建InetAddress对象

InetAddress[] inets = InetAddress.getAllByName("www.baidu.com");
for (InetAddress inet : inets) {# www.baidu.com/61.135.169.125# www.baidu.com/61.135.169.121System.out.println(inet);
}
# 网络域名
InetAddress inet = InetAddress.getByName("www.baidu.com");
System.out.println("域名:" + inet.getHostName());        域名:www.baidu.com
System.out.println("IP地址:" + inet.getHostAddress());   IP地址:61.135.169.125# 本地域名(本机)
inet = InetAddress.getByName("localhost");
System.out.println("域名:" + inet.getHostName());        域名:localhost
System.out.println("IP地址:" + inet.getHostAddress());   IP地址:127.0.0.1# 不存在的域名 抛出异常:java.net.UnknownHostException: aaaaaa.com
inet = InetAddress.getByName("aaaaaa.com");
System.out.println("域名:" + inet.getHostName());
System.out.println("IP地址:" + inet.getHostAddress());

注意事项:
1、对于外网域名的解析(如www.baidu.com),你的机器必须能够访问外网才能解析到IP地址。否则java.net.UnknownHostException
可以在Linux下通过resolv.conf指定了自己的域名解析器

2、域名不能加上协议。若你这么写http://www.baidu.com就抛错java.net.UnknownHostException

3、对于外网域名解析,每个人解析得到的地址可能不一样。比如此处我对www.baidu.com解析得到的地址是61.135.169.125,是因为我在北京所以得到的是北京的一个IP地址

4、为了方便你在windows里看到DNS缓存的效果,你可以使用这两个命令来查看:

ipconfig /displaydns      展示出当前的dns本地缓存
ipconfig /flushdns        清空本地缓存

5、有时不管运行多少次,getAllByName返回的永远是一个地址值,不禁发问,难道一个内网域名只绑定了一台机器?
其实不是的。一般来说对于微服务体系内的内网域名一般都会解析到你公司的Nginx那台机器,由它负责后端实例的负载均衡。

以上两个方法也叫:用域名创建InetAddress对象。这种方式想获得IP的话,必须经过DNS服务解析。如果你host传入的就是ip地址的话,就不会经过DNS解析了


3、根据提供的主机名以及 IP 地址创建InetAddress

InetAddress inet = InetAddress.getByAddress("www.baidu.com", new byte[]{61, (byte) 135, (byte) 169, 125});
System.out.println("域名:" + inet.getHostName());         域名:www.baidu.com
System.out.println("IP地址:" + inet.getHostAddress());    IP地址:61.135.169.125

通过IP构造一个InetAddress对象,因此你获取它的IP地址时将不再经过DNS解析。


4、在给定原始 IP 地址返回 InetAddress 对象

InetAddress inet = InetAddress.getByAddress(new byte[]{61, (byte) 135, (byte) 169, 125});
# 通过网络帮你找主机名,找不到就原样输出,一般比较耗时,不建议使用。  
System.out.println("域名:" + inet.getHostName());        域名:61.135.169.125
System.out.println("IP地址:" + inet.getHostAddress());   IP地址:61.135.169.125

通过IP构造一个InetAddress对象,因此你获取它的IP地址时将不再经过DNS解析。


5、回环地址

InetAddress inet = InetAddress.getLoopbackAddress();
System.out.println("域名:" + inet.getHostName());         域名:localhost
System.out.println("IP地址:" + inet.getHostAddress());    IP地址:127.0.0.1

6、获取本机的地址(非常鸡肋)

InetAddress inet = InetAddress.getLocalHost();
System.out.println("域名:" + inet.getHostName());          域名:zhangziwa
System.out.println("IP地址:" + inet.getHostAddress());     IP地址:192.168.1.109

方法介绍


# 获取主机名
public String getHostName();
# 获取主机名(每次方法解析DNS去获取主机名,而不从缓存中获取)
public String getCanonicalHostName();# 获取以字节数组形式的ip地址。
public byte[] getAddress();
# 获取点分四段式ip。
public String getHostAddress();# 可以根据指定timeout时间内测试网络是否可达,是否可以建立连接。
public boolean isReachable(int timeout);
# 可以指定从本机那个网卡、生存时间ttl 和指定时间来测试网络是否可达。
public boolean isReachable(NetworkInterface netif, int ttl, int timeout);#  当IP地址是广播地址(MulticastAddress)时返回true,否则返回false。
#  通过广播地址可以向网络中的所有计算机发送信息,而不是只向一台特定的计算机发送信息。
#  IPv4的广播地址的范围是224.0.0.0 ~ 239.255.255.255
#  IPv6的广播地址第一个字节是FF 其他的字节可以是任意值。
public boolean isMulticastAddress();#  当IP地址是通配符地址时返回true,否则返回false。
#  IPv4的通配符地址是0.0.0.0
#  IPv6的通配符地址是0:0:0:0:0:0:0:0,也可以简写成::。
public boolean isAnyLocalAddress();#  当IP地址是loopback地址时返回true,否则返回false。
#  loopback地址就是代表本机的IP地址。
#  IPv4的loopback地址的范围是127.0.0.0 ~ 127.255.255.255,也就是说,只要第一个字节是127,就是lookback地址。
#  IPv6的loopback地址是0:0:0:0:0:0:0:1,也可以简写成::1
public boolean isLoopbackAddress();#  当IP地址是本地连接地址(LinkLocalAddress)时返回true,否则返回false。
#  IPv4的本地连接地址的范围是169.254.0.0 ~ 169.254.255.255。
#  IPv6的本地连接地址的前12位是FE8,其他的位可以是任意取值,如FE88::和FE80::ABCD::都是本地连接地址。
public boolean isLinkLocalAddress();#  当IP地址是地区本地地址(SiteLocalAddress)时返回true,否则返回false。(是不是内网ip)
#  IPv4的地址本地地址分为三段:10.0.0.0 ~ 10.255.255.255、172.16.0.0 ~ 172.31.255.255、192.168.0.0 ~ 192.168.255.255
#  (企业内部或个人内部的局域网内部的ip都应该在此三个网段内 因为内网用ipv4足够)
#  IPv6的地区本地地址的前12位是FEC,其他的位可以是任意取值,如FED0:: 和 FEF1:: 都是地区本地地址。
public boolean isSiteLocalAddress();#  当IP地址是全球范围的广播地址时返回true,否则返回false。
#  全球范围的广播地址可以向Internet中的所有的计算机发送信息。
#  IPv4的广播地址除了224.0.0.0和第一个字节是239的IP地址都是全球范围的广播地址
#  IPv6的全球范围的广播地址中第一个字节是FF,第二个字节的范围是0E ~ FE,其他的字节可以是任意值,如FFBE::、FF0E::都是全球范围的广播地址。
public boolean isMCGlobal();#  当IP地址是本地接口广播地址时返回true,否则返回false。
#  本地接口广播地址不能将广播信息发送到产生广播信息的网络接口,即使是同一台计算机的另一个网络接口也不行。
#  所有的IPv4广播地址都不是本地接口广播地址。
#  IPv6的本地接口广播地址的第一个字节是FF,第二个节字的范围是01 ~ F1,其他的字节可以是任意值,如FFB1::、FF01:A123::都是本地接口广播地址。
public boolean isMCNodeLocal();#  当IP地址是子网广播地址时返回true,否则返回false。
#  IPv4的子网广播地址的范围是224.0.0.0 ~ 224.0.0.255。
#  IPv6的子网广播地址的第一个字节是FF,第二个字节的范围是02 ~ F2,其他的字节可以是任意值,如FFB2:: 和 FF02:ABCD:: 都是子网广播地址。
public boolean isMCLinkLocal();#  当IP地址是站点范围的广播地址时返回true,否则返回false。 
#  使用站点范围的广播地址,可以向站点范围内的计算机发送广播信息。
#  IPv4的站点范围广播地址的范围是239.255.0.0 ~ 239.255.255.255,如239.255.1.1、239.255.0.0都是站点范围的广播地址。
#  IPv6的站点范围广播地址的第一个字节是FF,第二个字节的范围是05 ~ F5,其他的字节可以是任意值,如FF05:: 和 FF45:: 都是站点范围的广播地址。
public boolean isMCSiteLocal();#  当IP地址是组织范围的广播地址时返回ture,否则返回false。
#  使用组织范围广播地址可以向公司或企业内部的所有的计算机发送广播信息。
#  IPv4的组织范围广播地址的第一个字节是239,第二个字节不小于192,第三个字节不大于195,如239.193.100.200、239.192.195.0都是组织范围广播地址。
#  IPv6的组织范围广播地址的第一个字节是FF,第二个字节的范围是08 ~ F8,其他的字节可以是任意值,如FF08:: 和 FF48::都是组织范围的广播地址。
public boolean isMCOrgLocal();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——队列(C语言)

需求:无 本篇文章将解决一下几个问题: 队列是什么?如何实现一个队列?什么场景下会用队列? 队列的概念: 队列:一种只允许一端进行插入数据操作,在另一端进行删除操作的特殊线性表。…

设计模式二十:观察者模式(Observer Pattern)

定义了一种一对多的依赖关系,允许多个观察者(也称为订阅者)对象同时监听一个主题对象,当主题对象发生变化时,所有依赖于它的观察者都会收到通知并自动更新。 观察者模式的使用场景 观察者模式在许多场景中都可以发挥…

springboot项目数据库配置类DatabaseConfig实现代码

1:yml配置类 spring:datasource:name: texturl: jdbc:mysql://192.168.11.50:3306/dsdd?characterEncodingUTF-8&useUnicodetrue&useSSLfalse&tinyInt1isBitfalse&allowPublicKeyRetrievaltrue&serverTimezoneUTCusername: rootpassword: roo…

Redis数据结构之List

Redis 中列表(List)类型是用来存储多个有序的字符串,列表中的每个字符串成为元素 Eelement),一个列表最多可以存储 2^32-1 个元素。 在 Redis 中,可以对列表两端插入(push)和弹出&am…

jenkins 是什么?

一、jenkins 是什么? Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行&#…

open cv学习 (一)像素的操作

open cv 入门 像素的操作 demo1 import cv2 import os import numpy as np# 1、读取图像 # imread()方法# 设置图像的路径 Path "./img.png" # 设置读取颜色类型默认是1代表彩色图 0 代表灰度图 # 彩色图 flag 1 # 灰度图 #flag 0# 读取图像,返回值…

小程序数据可视化:使用图表和可视化工具展示数据

在当今信息爆炸的时代,数据无疑是最珍贵的资源之一。然而,海量的数据如果不加以整理和展示,很难从中获取有价值的信息。这时候,数据可视化就发挥了重要作用,它能够通过图表和可视化工具将复杂的数据转化为直观的视觉形…

【爬虫练习之glidedsky】爬虫-基础2

题目 链接 爬虫往往不能在一个页面里面获取全部想要的数据,需要访问大量的网页才能够完成任务。 这里有一个网站,还是求所有数字的和,只是这次分了1000页。 思路 找到调用接口 可以看到后面有个参数page来控制页码 代码实现 import reques…

Vim学习(四)——命令使用技巧

命令模式 打开文本默认模式,按**【ESC】**重新进入 【/关键字】:搜索匹配关键字 G:最后一行 gg:第一行 hjkl:左下右上 yy: 复制一行 dd:删除一行 p:粘贴 u: 撤销插入模式 按**【i / a / o】**键均可进入文本编辑模式…

QT中按钮的基类QAbstractButton

QT中按钮的基类QAbstractButton 关于控件类的学习方法继承关系信号槽函数标题和图标按钮的 Check 属性 关于控件类的学习方法 控件类很多,API更多,但是不需要记忆知道控件对应的类名,通过帮助文档随用随查优先看帮助文档中控件对应的信号和槽…

【小沐学NLP】Python进行统计假设检验

文章目录 1、简介1.1 假设检验的定义1.2 假设检验的类型1.3 假设检验的基本步骤 2、测试数据2.1 sklearn2.2 seaborn 3、正态分布检验3.1 直方图判断3.2 KS检验(scipy.stats.kstest)3.3 Shapiro-Wilk test(scipy.stats.shapiro)3.…

回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)效果一览…

【LeetCode】盛最多水的容器

盛最多水的容器 题目描述算法分析编程代码 链接: 盛最多水的容器 题目描述 算法分析 编程代码 class Solution { public:int maxArea(vector<int>& height) {int left 0;int right height.size()-1;int ret 0;while(left < right){int n min(height[left],h…

LMLCCS_UPDATEFO2 LCL DB 方法 get_normvector 头寸 A 中RC 1 内部错误,过账时报错<转载>

原文链接&#xff1a;https://blog.csdn.net/XFYBB/article/details/129174579 物料的成本中心&#xff0c;作业价格没有维护 再用FCMLHELP&#xff0c;重新创建一下 se37&#xff0c;FCMLHELP_CHECK_TESTFLAG&#xff0c;打断点&#xff0c;跳过PW

Python快速检验数据分布

假设检验的前提是确定数据的分布&#xff0c;本文介绍Python检验数据样本是否服从一定分布。使用方法是柯尔莫可洛夫-斯米洛夫检验&#xff08;Kolmogorov–Smirnov test&#xff0c;K-S test&#xff09;&#xff0c;K-S检验方法适用于探索连续型随机变量的分布&#xff0c;对…

vue3 pdf、word等文件下载

效果&#xff1a; <div class"byLawBox"><div class"titleBox">规章制度公示</div><div class"contentBox"><TableList:loading"byLawloading"ref"byLawtablistRef":hasImport"false"…

基于Vue的3D饼图

先看效果&#xff1a; 再看代码&#xff1a; <template><div class"container"><div style"height: 100%;width: 100%;" id"bingtu3D"></div></div></template> <script> import "echarts-liqu…

springboot日志文件名称为什么叫logback-spring.xml

如题&#xff0c;为什么springboot日志配置文件叫logback-spring.xml&#xff1f; 在整个项目中搜索 logback-spring.xml 并没有搜索到。 先看一下 org.springframework.boot.context.logging.LoggingApplicationListener#initialize protected void initialize(ConfigurableEn…

亚信科技AntDB数据库通过GB 18030-2022最高实现级别认证,荣膺首批通过该认证的产品之列

近日&#xff0c;亚信科技AntDB数据库通过GB 18030-2022《信息技术 中文编码字符集》最高实现级别&#xff08;级别3&#xff09;检测认证&#xff0c;成为首批通过该认证的数据库产品之一。 图1&#xff1a;AntDB通过GB 18030-2022最高实现级别认证 GB 18030《信息技术 中文编…

【PostgreSQL】导出数据库表(或序列)的结构和数据

导出 PostgreSQL 数据库的结构和数据 要导出 PostgreSQL 数据库的结构和数据&#xff0c;你可以使用 pg_dump 命令行工具。pg_dump 可以生成一个 SQL 脚本文件&#xff0c;其中包含了数据库的结构&#xff08;表、索引、视图等&#xff09;以及数据。下面是如何使用 pg_dump 导…