Java中InetAddress类的使用

 更新时间:2023年09月03日 09:52:50   作者:WM之辈  
InetAddress类是Java中用于表示IP地址的类,本文就来介绍一下Java中InetAddress类的使用,具有一定的参考价值,感兴趣的可以了解一下

概念:InetAddress类是 Java 中用于表示 IP 地址的类。它提供了一种标准的方法来处理 IP 地址,无论是 IPv4 还是 IPv6 地址。InetAddress 类位于 java.net 包中,是 Java 网络编程的一部分。

常用方法:

  • getLocalHost():这个方法获取本地主机的 InetAddress 对象,它表示当前计算机。在你的示例中,你获取了本地主机的 InetAddress 对象并打印了它。

  • getByName(String host):这个方法根据指定的主机名或域名获取对应的 InetAddress 对象。在你的示例中,你使用了两个不同的主机名(本地主机名和百度域名)来获取相应的 InetAddress 对象,并打印了它们。

  • getHostName():这个方法用于获取 InetAddress 对象的主机名。在你的示例中,你使用 host2 对象(百度域名)调用了 getHostName() 方法,以获取主机名并将其打印出来。

  • getHostAddress():这个方法用于获取 InetAddress 对象的 IP 地址。在你的示例中,你使用 host2 对象(百度域名)调用了 getHostAddress() 方法,以获取 IP 地址并将其打印出来。

代码:

public class API_ {
    public static void main(String[] args) throws UnknownHostException {
        //获取本机 InetAddress 对象 getLocalHost
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost);//LAPTOP-U9K8AF0S/172.21.202.203 获取到主机的信息(主机名和ip地址)
        //根据指定主机名/域名获取 ip 地址对象
        InetAddress host1 = InetAddress.getByName("LAPTOP-U9K8AF0S");//LAPTOP-U9K8AF0S主机名
        System.out.println(host1);//LAPTOP-U9K8AF0S/172.21.202.203,通过主机名来获取到ip地址,当然这边输出的是主机名和ip地址
        System.out.println(host1.getHostAddress());//172.21.202.203,获取到ip地址
        InetAddress host2 = InetAddress.getByName("www.baidu.com");//www.baidu.com域名
        System.out.println(host2);//www.baidu.com/153.3.238.102,通过域名来获取ip地址,当然这边输出的是域名和ip地址
        System.out.println(host2.getHostAddress());//153.3.238.102,获取ip地址
    }
}

InetAddress的常用方法

1.public String getHostName()

获得该InetAddress对象的主机名称

2.public  String getCanonicalHostName()

获取此IP地址的全限定域名

3.public bytes[] getHostAddress()

获取该InetAddress对象对应的IP地址字符串

4.public static InetAddress getLocalHost()

获取本机对应的InetAddress对象

5.public static InetAddress getByName(String host)

根据主机获得对应的InetAddress对象,参数host可以是IP地址或域名

6.public static InetAddress[] getAllByName(String host)

根据主机获得对应的InetAddress对象

7.public static InetAddress getByAddress(byte[] addr)

获取addr所封装的IP地址对应的Inet Address对象

8.public boolean isReachable(int timeout)

判断是否可以到达该地址

示例

1.小DEMO

通过一个demo来演示一下这些方法叭

package TEMP.Temp3;
//使用以上方法的小demo
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressDemo {
    public static void main(String[] args) {
        try{
            //获取自己本机地址信息
            InetAddress localIp=InetAddress.getLocalHost();
            //1获取此IP地址的全限定域名
            System.out.println("1.localIp.getCanonicalHostName()="
                    + localIp.getCanonicalHostName());
            //2获取该InetAddress对象对应的IP地址字符串
            System.out.println("2.localIp.getHostAddress()="
                    + localIp.getHostAddress());
            //3获得该InetAddress对象的主机名称
            System.out.println("3.localIp.getHostName()="
                    + localIp.getHostName());
            System.out.println("4.localIp.toString()="+localIp.toString());
            //5.判断是否可以到达该地址
            System.out.println("5.localIp.isReachable(5000)="
                    + localIp.isReachable(5000));
            System.out.println("====================================");
            System.out.println("====================================");
            //获取指定域名地址的信息([eg]百度)
            InetAddress baiduip = InetAddress.getByName("www.baidu.com");
            //1获取此IP地址的全限定域名
            System.out.println("1.baiduIp.getCanonicalHostName()="
                    + baiduip.getCanonicalHostName());
            //2获取该InetAddress对象对应的IP地址字符串
            System.out.println("2.baiduIp.getHostAddress()="
                    + baiduip.getHostAddress());
            //3获得该InetAddress对象的主机名称
            System.out.println("3.baiduIp.getHostName()="
                    + baiduip.getHostName());
            System.out.println("4.baiduIp.toString()="+baiduip.toString());
            //5判断是否可以到达该地址
            System.out.println("5.baiduIp.isReachable(5000)="
                    + baiduip.isReachable(5000));
            System.out.println("====================================");
            System.out.println("====================================");
            //获取指定原始IP地址信息
            InetAddress ip = InetAddress.getByAddress(new byte[]{127,0,0,1});
            // InetAddress ip = InetAddress.getByName("127.0.0.1");
            System.out.println("1.ip.getCanonicalHostName()=" + ip.getCanonicalHostName());
            System.out.println("2.ip.getHostAddress()= "+ ip.getHostAddress());
            System.out.println("3.ip.getHostName()="+ ip.getHostName());
            System.out.println("4.ip.toString()="+ ip.toString());
            System.out.println("5.ip.isReachable(5000)="
                    + ip.isReachable(5000));
        }catch(UnknownHostException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
//输出结果
//        1.localIp.getCanonicalHostName()=shizhanli.lan
//        2.localIp.getHostAddress()=192.168.30.151
//        3.localIp.getHostName()=shizhanli
//        4.localIp.toString()=shizhanli/192.168.30.151
//        5.localIp.isReachable(5000)=true
//        ====================================
//        ====================================
//        1.baiduIp.getCanonicalHostName()=14.215.177.38
//        2.baiduIp.getHostAddress()=14.215.177.38
//        3.baiduIp.getHostName()=www.baidu.com
//        4.baiduIp.toString()=www.baidu.com/14.215.177.38
//        5.baiduIp.isReachable(5000)=true
//        ====================================
//        ====================================
//        1.ip.getCanonicalHostName()=localhost
//        2.ip.getHostAddress()= 127.0.0.1
//        3.ip.getHostName()=localhost
//        4.ip.toString()=localhost/127.0.0.1
//        5.ip.isReachable(5000)=true

2.给定地址,找到主机名称

package TEMP.Temp3;
//给定地址,找出主机名
import java.net.InetAddress;
import java.net.UnknownHostException;
public class ReverseTest {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress ia = InetAddress.getByName("192.168.30.151");
        System.out.println(ia.getCanonicalHostName());
    }
}
//输出结果:
//shizhanli.lan

3.找到本地机器的IP地址

package TEMP.Temp3;
//找到本地机器的IP地址
import java.net.InetAddress;
import java.net.UnknownHostException;
public class MyAddress {
    public static void main(String[] args) {
        try{
            InetAddress me = InetAddress.getLocalHost();
            String dottedQuad = me.getHostAddress();//创建一个String类型的变量来接受返回的ip地址
            System.out.println("My address is " + dottedQuad);
        }catch (UnknownHostException ex){
            System.out.println("I'm sorry.I don't know my own address.");
        }
    }
}
//输出:My address is 192.168.30.151

InetAddress缓存

InetAddress类具有高速缓存以存储成功以及不成功的主机名解析。

默认情况下,安装安全管理器时,为了防止DNS欺骗攻击,主机名正确解决方案的结果将永久缓存。 

当没有安装安全管理器时,默认的行为是缓存条目以获得有限的(实现依赖的)时间段。 

不成功的主机名解析的结果被缓存很短的时间(10秒),以提高性能。

如果不需要默认行为,则可以将Java安全属性设置为不同的生存时间(TTL)值进行正缓存。 同样,系统管理员可以在需要时配置不同的缓存缓存TTL值。

Inet4Address和Inet6Address

Java使用了两个类Inet4Address和Inet6Address,来区分IPv4地址和IPv6地址.

1.public final class Inet4Address extends InetAddress
2.public final class Inet6Address extends InetAddress

地址类型

有些IP地址和地址模式有特殊的含义。Java提供了许多方法来测试InetAddress对象是否符合其中某个标准。

1.public boolean isAnylocalAdress()

如果是通配地址,方法返回true。通配地址可以匹配本地系统中的任何地址,在IPv4中,通配地址是0.0.0.0。在IPv6中,通配地址是0:0:0:0:0:0:0:0。

2.public boolean isLoopbackAdress()

如果是回送地址,方法返回true。回送地址直接在IP层连接同一台计算机,而不使用任务物理硬件。在IPv4中,这个地址是127.0.0.1。在IPv6中,这个回送地址是0:0:0:0:0:0:0:1。

3.public boolean isLinkLocalAddress()

如果地址是一个IPv6本地链接地址,方法返回true,否则返回false。

4.public boolean isSiteLocalAddress()

如果地址是一个IPv6本地网络地址,方法返回true,否则返回false。

5.public boolean isMulticastAddress()

如果地址是一个组播地址,方法返回true,否则返回false。

6.public boolean isMCGlobal()

如果地址是全球组播地址,方法返回true,否则返回false。

7.public boolean isMCNodeLocal()

如果地址是一个本地接口组播地址,方法返回true,否则返回false。

8.public boolean isMCLinkLocal()

如果地址是一个子网范围组播地址,方法返回true,否则返回false。

9.public boolean isMCSiteLocal()

如果地址是一个网站范围组播地址,方法返回true,否则返回false。

10.public boolean isMCOrgLocal()

如果地址是一个组织范围组播地址,方法返回true,否则返回false。

测试可达性 

InetAddress类有两个isReachable()方法,可以测试一个特定节点对当前主机是否可达哦。

方法①public boolean isReachable(int timeout) throws IOException
方法②public boolean isReachable(NetworkInterface interface, int ttl, int timeout) throws IOException

小小解析:

这些方法尝试使用traceroute查看指定地址是否可达。如果主机在timeout毫秒内响应,则方法返回true;否则返回false。如果出现网络错误则抛出IOException异常。第二个方法还允许指定从哪个本地网络接口建立连接,以及“生存时间”。

Object方法

1.public boolean equals(Object o)

若与一个InetAddress对象有相同的IP地址,并不要求这两个对象有相同的主机名,就返回true,否则返回false。

2.public int hasCode()

只根据IP地址来计算,不考虑主机名

3.public String toString()

生成的字符串有两种格式:主机名或点分四段地址。

到此这篇关于Java中InetAddress类的使用的文章就介绍到这了,更多相关Java InetAddress类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • RocketMQ NameServer 核心源码解析

    RocketMQ NameServer 核心源码解析

    这篇文章主要为大家介绍了RocketMQ NameServer 核心源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • java实现的计算器功能示例【基于swing组件】

    java实现的计算器功能示例【基于swing组件】

    这篇文章主要介绍了java实现的计算器功能,结合实例形式分析了java基于swing组件实现计算器功能相关运算操作技巧,需要的朋友可以参考下
    2017-12-12
  • Java SpringMVC数据响应超详细讲解

    Java SpringMVC数据响应超详细讲解

    Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,Spring MVC 角色划分清晰,分工明细,本章来讲解SpringMVC数据响应
    2022-04-04
  • Mybatis动态SQL实例详解

    Mybatis动态SQL实例详解

    这篇文章主要给大家介绍了关于Mybatis动态SQL的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 用Java设计实现多实例多库查询方式

    用Java设计实现多实例多库查询方式

    这篇文章主要介绍了用Java设计实现多实例多库查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java之jpa入门教程讲解

    Java之jpa入门教程讲解

    这篇文章主要介绍了Java之jpa入门教程讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • SpringBoot浅析缓存机制之Redis单机缓存应用

    SpringBoot浅析缓存机制之Redis单机缓存应用

    在上文中我介绍了Spring Boot使用EhCache 2.x来作为缓存的实现,本文接着介绍使用单机版的Redis作为缓存的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java由浅入深带你了解什么是包package

    Java由浅入深带你了解什么是包package

    为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间,一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能
    2022-03-03
  • 解决若依pageHelper在动态切换数据源问题

    解决若依pageHelper在动态切换数据源问题

    这篇文章主要介绍了解决pageHelper在动态切换数据源问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 详解springboot启动时是如何加载配置文件application.yml文件

    详解springboot启动时是如何加载配置文件application.yml文件

    这篇文章主要介绍了详解springboot启动时是如何加载配置文件application.yml文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论