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类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • SpringMVC+ZTree实现树形菜单权限配置的方法

    SpringMVC+ZTree实现树形菜单权限配置的方法

    本篇文章主要介绍了SpringMVC+ZTree实现树形菜单权限配置的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • mybatis一对多两种mapper写法实例

    mybatis一对多两种mapper写法实例

    这篇文章主要介绍了mybatis一对多两种mapper写法实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Eclipse添加xml文件提示及Hibernate配置学习

    Eclipse添加xml文件提示及Hibernate配置学习

    文件提示功能在开发过程中很实用的,本文实现了一个Eclipse添加xml文件提示,感兴趣的朋友可以了解下啊,希望本文对你有所帮助
    2013-01-01
  • JAVA实现线程的三种方法

    JAVA实现线程的三种方法

    这篇文章介绍了JAVA实现线程的三种方法,有需要的朋友可以参考一下
    2013-09-09
  • resty mail的简单发送邮件方法

    resty mail的简单发送邮件方法

    这篇文章主要为大家介绍了简单的resty mail发送邮件方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • 一文详解Redisson分布式锁底层实现原理

    一文详解Redisson分布式锁底层实现原理

    这篇文章主要详细介绍了Redisson分布式锁底层实现原理,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Spring中Bean扫描原理详情

    Spring中Bean扫描原理详情

    这篇文章主要介绍了Spring中Bean扫描原理详情,文章为荣啊主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Java编程实现递增排序链表的合并

    Java编程实现递增排序链表的合并

    这篇文章主要介绍了Java编程实现递增排序链表的合并,两种方法,代码分享给大家,供需要的朋友参考。
    2017-10-10
  • RocketMQ在Spring Boot上的基础使用

    RocketMQ在Spring Boot上的基础使用

    本文主要介绍了RocketMQ在Spring Boot上的基础使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • 在MyBatisPlus中使用@TableField完成字段自动填充的操作

    在MyBatisPlus中使用@TableField完成字段自动填充的操作

    这篇文章主要介绍了在MyBatisPlus中使用@TableField完成字段自动填充的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论