Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 297|回复: 0

[网络编程学习]Java网络编程从入门到精通(9):判断地址类型

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-6 00:04:19 | 显示全部楼层 |阅读模式
    IP地址分为普通地址和特殊地址。在前面的文章中所使用的大多数都是普通的IP地址,在本文中将介绍如何利用InetAddress类提供的十个方法来确定一个IP地址是否是一个特殊的IP地址。


          
       
        一、isAnyLocalAddress方法
       
       
            
        当IP
        地址是通配符地址时返回true
        ,否则返回false
        。这个通配符地址对于拥有多个网络接口(如两块网卡)的计算机非常拥有。使用通配符地址可以允许在服务器主机接受来自任何网络接口的客户端连接。IPv4
        的通配符地址是0.0.0.0
        。IPv6
        的通配符地址是0:0:0:0:0:0:0:0
        ,也可以简写成::
        。
       

       

       

       
       
       
        二、isLoopbackAddress方法
       
       
        当IP
        地址是loopback
        地址时返回true
        ,否则返回false
        。loopback
        地址就是代表本机的IP
        地址。IPv4
        的loopback
        地址的范围是127.0.0.0 ~ 127.255.255.255
        ,也就是说,只要第一个字节是127
        ,就是lookback
        地址。如127.1.2.3
        、127.0.200.200
        都是loopback
        地址。IPv6
        的loopback
        地址是0:0:0:0:0:0:0:1
        ,也可以简写成::1
        。我们可以使用ping
        命令来测试lookback
        地址。如下面的命令行所示:
       
      
       
       
         
       

         
       
      



      
      
       
      ping
      127.200.200.200
      
      
       
       
      

      运行结果:

      
      
       
      Reply from
      127.0.0.1
      : bytes
      =
      32
       time<1ms TTL
      =
      128
      
    Reply from
      127.0.0.1
      : bytes
      =
      32
       time<1ms TTL
      =
      128
      
    Reply from
      127.0.0.1
      : bytes
      =
      32
       time<1ms TTL
      =
      128
      
    Reply from
      127.0.0.1
      : bytes
      =
      32
       time<1ms TTL
      =
      128
      

    Ping statistics for
      127.200.200.200
      :
             Packets: Sent
      =
       
      4
      ,
       Received
      =
       
      4
      ,
       Lost
      =
       
      0
       (
      0
      % loss)
      ,
      
    Approximate round trip times in milli-seconds:
             Minimum
      =
       0ms
      ,
       Maximum
      =
       0ms
      ,
       Average
      =
       0ms

      
      
       
       
      

          虽然127.255.255.255
      也是loopback
      地址,但127.255.255.255
      在Windows
      下是无法ping
      通的。这是因为127.255.255.255
      是广播地址,在Windows
      下对发给广播地址的请求不做任何响应,而在其他操作系统上根据设置的不同,可能会得到不同的结果。

      
       
       
      

      三、isLinkLocalAddress方法
      

      

      当IP
      地址是本地连接地址(LinkLocalAddress)
      时返回true
      ,否则返回false
      。IPv4
      的本地连接地址的范围是169.254.0.0 ~ 169.254.255.255
      。IPv6
      的本地连接地址的前12
      位是FE8
      ,其他的位可以是任意取值,如FE88::
      、FE80::ABCD::
      都是本地连接地址。
      

      

      

      

      四、isSiteLocalAddress方法
      

      当IP
      地址是地区本地地址(SiteLocalAddress
      )时返回true
      ,否则返回false
      。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
      。IPv6
      的地区本地地址的前12
      位是FEC
      ,其他的位可以是任意取值,如FED0::
      、FEF1::
      都是地区本地地址。
      

      
    五、

      isMulticastAddress方法
               
      

      当IP
      地址是广播地址(
      MulticastAddress
      )时返回true
      ,否则返回false
      。通过广播地址可以向网络中的所有计算机发送信息,而不是只向一台特定的计算机发送信息。IPv4
      的广播地址的范围是224.0.0.0 ~ 239.255.255.255
      。IPv6
      的广播地址第一个字节是FF
      ,其他的字节可以是任意值。关于广播地址的详细内容将在以后的章节中讨论。
      

      
    六、

      isMCGlobal方法
      

          
      当IP
      地址是全球范围的广播地址时返回true
      ,否则返回false
      。全球范围的广播地址可以向Internet
      中的所有的计算机发送信息。IPv4
      的广播地址除了224.0.0.0
      和第一个字节是239
      的IP
      地址都是全球范围的广播地址。IPv6
      的全球范围的广播地址中第一个字节是FF
      ,第二个字节的范围是0E ~ FE
      ,其他的字节可以是任意值,如FFBE::
      、FF0E::
      都是全球范围的广播地址。
      

      
    七、

      isMCLinkLocal方法
      

          当IP
      地址是子网广播地址时返回true
      ,否则返回false
      。使用子网的广播地址只能向子网内的计算机发送信息。IPv4
      的子网广播地址的范围是224.0.0.0 ~ 224.0.0.255
      。IPv6
      的子网广播地址的第一个字节是FF
      ,第二个字节的范围是02 ~ F2
      ,其他的字节可以是任意值,如FFB2::
      、FF02:ABCD::
      都是子网广播地址。
      

      

      
    八、

      isMCNodeLocal方法
      

      当IP
      地址是本地接口广播地址时返回true
      ,否则返回false
      。本地接口广播地址不能将广播信息发送到产生广播信息的网络接口,即使是同一台计算机的另一个网络接口也不行。所有的IPv4
      广播地址都不是本地接口广播地址。IPv6
      的本地接口广播地址的第一个字节是FF
      ,第二个节字的范围是01 ~ F1
      ,其他的字节可以是任意值,如FFB1::
      、FF01:A123::
      都是本地接口广播地址。
      

      
    九、

      isMCOrgLocal方法
      

      

      当IP
      地址是组织范围的广播地址时返回ture
      ,否则返回false
      。使用组织范围广播地址可以向公司或企业内部的所有的计算机发送广播信息。IPv4
      的组织范围广播地址的第一个字节是239
      ,第二个字节不小于192
      ,第三个字节不大于195
      ,如239.193.100.200
      、239.192.195.0
      都是组织范围广播地址。IPv6
      的组织范围广播地址的第一个字节是FF
      ,第二个字节的范围是08 ~ F8
      ,其他的字节可以是任意值,如FF08::
      、FF48::
      都是组织范围的广播地址。
      

      
    十、

      isMCSiteLocal方法
      

      当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::
      都是站点范围的广播地址。
      
       
       
      

          下面的代码
      可以确定一个IP
      地址是否在上述十种地址类型的范围内:

      
      
       
      package
       test;


      import
       java.net.
      *
      ;

      import
       java.lang.reflect.
      *
      ;


      public
       
      class
       MyNet
    {
         
      public
       
      static
       
      void
       main(String[] args)
      throws
       Exception
         {
             
      if
       (args.length
      ==
       
      0
      )
                
      return
      ;
             InetAddress address
      =
       InetAddress.getByName(args[
      0
      ]);
             Method methods[]
      =
       InetAddress.
      class
      .getMethods();
             
      //
       以is开头并且没有参数的方法
      

             
      for
       (Method method : methods)
             {
                
      if
       (method.getName().matches(
      "
      is.*
      "
      )
      &&
       method.getParameterTypes().length
      ==
       
      0
      )
                 {
                     
      if
       (Boolean.parseBoolean(method.invoke(address).toString()))
                         System.out.println(method.getName()
      +
       
      "
       = true
      "
      );
                 }
             }
         }
    }

      
      
       测试1  
      
      

      执行如下命令:
      
      
       
      java test.MyNet
      224.0.0.1
      
      

         运行结果:
      

      
      
       
      isMCLinkLocal
      =
       true
    isMulticastAddress
      =
       true
      
      
       测试2  
      

      执行如下命令:
      
      
       
      java test.MyNet FFB1::
      

      运行结果:
      
      
       
      isMCNodeLocal
      =
       true
    isMulticastAddress
      =
       true
      

          
      如果未输出任何结果,说明指定的IP
      地址并不属性上述的十种IP
      地址类型的范围,只是一个普通的IP
      地址。

      
    本文出自 “软件改变整个宇宙” 博客,请务必保留此出处http://androidguy.blog.51cto.com/974126/214759



      
      
       
       

         
       

         
       
      
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 10:22 , Processed in 0.362334 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表