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 (注:win7下是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 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://java.chinaitlab.com/net/782802.html
http://java.chinaitlab.com/net/782802_2.html
相关推荐
总的来说,InetAddress类在Java网络编程中起到了关键作用,它不仅提供了获取IP地址和主机名的方法,还能帮助开发者识别和处理各种特殊IP地址,以满足不同网络通信需求。理解和熟练运用InetAddress类的方法,可以大大...
InetAddress类在java.net包中,它是Java提供用来处理IP地址和域名的工具类。通过InetAddress,我们可以获取域名对应的IP地址,或者根据IP地址获取其对应的域名。具体方法包括: 1. `getByName(String s)`:此方法...
3. **IP地址转换**:工具类可能还包含了IP字符串与`InetAddress`对象之间的转换,以及IPv4和IPv6之间的转换功能。 4. **IP地址校验**:为了确保处理的IP地址有效,`IpUtils`可能包含了IP地址格式的验证函数。 5. *...
你可以通过InetAddress类的getByName()方法获取与特定主机名关联的IP地址,或者通过getAllByName()获取所有可用的IP地址。 下面是一些InetAddress类的关键方法: 1. `getLocalHost()`: 返回本地主机的InetAddress...
1. 利用InetAddress类确定特殊IP地址 2. Spring Cloud Netflix Eureka: 多网卡环境下Eureka服务注册IP选择问题
但是,在不同的网络环境下,IP地址会变化,如果不清空InetAddress类中的私有成员变量map,就可能会导致登录失败。 解决这个问题的方法是,使用反射技术来清空InetAddress类中的私有成员变量map。在Android系统中,...
InetAddress类的代码,用来获取主机名和IP地址
`InetAddress`是Java中的一个核心类,它在Android系统中同样适用,主要用于处理Internet上的主机名和它们对应的IP地址。这个类提供了将域名转换为IP地址,以及将IP地址转换为域名的功能。下面我们将深入探讨`...
在Java编程中,`InetAddress`类是用来处理网络上的主机名和对应的IP地址的。当你通过`InetAddress`获取IP地址时,返回的结果通常是一个`InetAddress`对象,但如果你需要处理IP地址的原始字节表示,你可以调用`...
`InetAddress`类表示Internet地址,即IP地址。它可以处理32位和64位的IP地址,并且支持IPv4和IPv6两种版本的地址类型。`InetAddress`类内部实际上包含了两个子类:`Inet4Address` 和 `Inet6Address`,分别对应IPv4和...
在Java编程语言中,`InetAddress`类是网络程序设计中的核心组件,它主要用于表示互联网协议(IP)地址。这个类及其相关方法提供了获取和解析主机名与IP地址的能力,无论是本地主机还是远程主机。在分布式系统中,`...
总结来说,这个小而精悍的Java程序利用了`InetAddress`类进行域名到IP地址的转换,并通过GUI提供用户交互。虽然界面简陋,但其功能实用,对于初学者理解网络编程和Java GUI设计具有一定的教学价值。
要获取本机的IP地址,可以使用`java.net.InetAddress`类的`getLocalHost()`方法。这个方法会返回与本地主机相关的`InetAddress`对象,包含了主机名和IP地址。在给出的代码中,创建了一个名为`NetTool`的类,其中`get...
通过以上分析,我们可以看到在不使用HTTP请求或套接字的方式下,利用Java标准库中的`InetAddress`类获取本地IP地址是一种简单有效的方法。这种方法不仅避免了网络通信带来的额外开销,同时也降低了代码的复杂度。...
9. IP 地址的遍历:可以使用 for 循环遍历局域网的 IP 地址,并使用 InetAddress 类判断 IP 地址是否可达。 10. GUI 编程:Java 中的 GUI 编程可以创建图形用户界面。可以使用 Swing 库创建窗口、面板、文本域、...
- **通过IP地址获取`InetAddress`实例**:`getByAddress(byte[] address)` 方法允许通过IP地址的字节数组形式创建`InetAddress`对象。 - 示例代码: ```java byte[] ipBytes = {(byte)192, (byte)168, (byte)1, ...
1. **InetAddress类**:Java的`java.net.InetAddress`类是处理IP地址的核心类,它提供了获取主机名、IP地址以及相关操作的方法。例如,`getLocalHost()`可以获取本地主机的InetAddress对象,而`getHostAddress()`则...
在Java中,我们可以使用`java.net`包下的`InetAddress`类来获取IP地址。以下是一个示例,展示了如何获取本地主机的IP地址: ```java import java.net.InetAddress; import java.net.UnknownHostException; public ...
这个过程中,需要使用InetAddress类来获取本机的IP地址和名称。在Java中,可以使用InetAddress.getLocalHost()方法来获取本机的IP地址和名称。 2.Operation_Log类 Operation_Log类是一个实例化对象,用于记录登录...
在Java中,我们可以使用`java.net.InetAddress`类来处理IP地址。`InetAddress`提供了`getByName()`方法,可以将字符串形式的IP地址转换为`InetAddress`对象,然后通过`getHostAddress()`方法获取IP地址,`get...