关于InetAddress和NetworkInterface的用法。
最近看到有些朋友在问答区贴了关于IP地址和网卡相关的问题(
http://www.iteye.com/problems/7462),自己正好也刚看了Java Networking Programming一书,有些小小的总结和大家分享一下。
1. DNS,主机名及IP地址
大家对DNS都不陌生,这是Internet上的一种通用服务,用于在数字形式的ip地址和人类容易记忆的主机名两种形式之间进行转换。如果你想要使用主机名来访问Internet上的主机,那么一般来说你所在的局域网内必定有本地DNS的存在。
Ip地址和主机名之间不一定是1对1的映射关系,还可以是:
a) 一个ip地址对应到多个主机名.
这其实很自然的,本质上是多个网络服务对应到一个ip地址(一台真正的计算机)。主机名和ip的对应关系可以改变,这样即使把服务迁移到其他机器上,只要客户是使用主机名(服务名),那就不会到受影响。
b) 一个主机名对应多个ip地址(即多个主机)
这也很常见,如www.microsoft.com就对应了多个ip地址(多台真正的计算机)。这种用法一般用于负载均衡。
2. 类InetAddress (这个类其实主要是和DNS打交道的)
在使用合适的工厂初始化之后(初始化时一般你传入ip或主机地址中的任意一个),InetAddress实例中会存储主机名和ip地址信息(多数是查询DNS得来的,但你也可以自己任意指定从而创造出实际上是非法或不存在的主机名/ip地址组合)。
使用这个类,我们可以通过主机名来获取ip地址,也可以通过ip地址来获取主机。我们还可以通过InetAddress.getLocalHost()方法来获取本地的ip地址和主机名,但要注意地是,这里的查询结果是登记在本地dns中的信息。而不是大家可能会想到的枚举本地网卡。
想要枚举本地网卡或者查询本地网络接口的信息,则要使用类 NetworkInterface。
InetAddress的equals方法比较特殊,它仅仅比较了ip地址,而没有比较主机名。所以多个映射到同一个ip地址(同一台计算机)的主机名被认为是相同的。而一个主机名被映射到多个ip地址,那么这些地址即使主机名相同,也会被认为是不同的InetAddress。
3. 类 NetworkInterface(这个类代表了本地的网络接口)
本类可以代表实际的硬件(网卡)或虚拟的网络地址。你可以使用getNetworkInterfaces方法来枚举本地网络接口。也可以通过传入网卡名(如eth0或lo)来获得本类的实例。
分享到:
- 2008-11-25 17:05
- 浏览 1479
- 评论(0)
- 论坛回复 / 浏览 (0 / 3111)
- 查看更多
相关推荐
首先,获取服务器的IP地址通常涉及到`java.net`包中的类,如`InetAddress`和`NetworkInterface`。以下是一个简单的示例方法,用于获取本地服务器的IP地址: ```java public static String getLocalIP() { String ...
综上所述,JAVA通过InetAddress和NetworkInterface类提供了获取IP地址和MAC地址的能力,这在开发涉及网络通信的应用时非常有用。通过理解这些基础知识,开发者能够更好地管理和识别网络上的设备。
2. 使用`NetworkInterface`类的`getByName`方法获取指定网卡对应的`NetworkInterface`对象。 3. 调用`getHardwareAddress`方法读取MAC地址。 示例代码如下: ```java import java.net.*; // 获取网卡eth0对应的...
2. 使用`NetworkInterface.getNetworkInterfaces()`方法枚举所有网络接口。 3. 遍历枚举器,对每个`NetworkInterface`对象调用`getHardwareAddress()`方法获取MAC地址。 4. `getHardwareAddress()`返回的是字节数组...
Java根据本地IP获取MAC地址的方法 ...Java根据本地IP获取MAC地址的方法可以通过使用InetAddress和NetworkInterface两个类来实现。同时,我们需要注意获取MAC地址和客户端请求地址时的权限和异常处理问题。
在本文中,我们将深入探讨如何使用Java GUI(图形用户界面)来调用`NetworkInterface` API,以便在桌面应用程序中管理网络接口。首先,确保你已经安装了集成开发环境(IDE)如IntelliJ IDEA(简称IDEA)以及Java ...
- 获取所有网络接口的IP:可以使用`NetworkInterface`类的`getNetworkInterfaces()`获取所有网络接口,然后遍历每个接口的`InetAddress`。 4. **Java获取MAC地址**: - `NetworkInterface`类:首先通过`Network...
这可以通过调用 `NetworkInterface.getInetAddresses()` 方法来实现,该方法同样返回一个 `Enumeration<InetAddress>` 对象,遍历该枚举即可获取每个接口的所有 IP 地址。 ```java for (Enumeration<InetAddress> ...
总结来说,Java中获取本机IP地址涉及到`InetAddress`和`NetworkInterface`类的使用,以及对网络接口的理解。对于公网IP的获取,通常需要借助外部服务。在实际开发中,根据具体需求选择合适的方法。在提供的`GetIp....
networkInterface.isUp() || networkInterface.isLoopback() || networkInterface.isVirtual()) { continue; } byte[] mac = networkInterface.getHardwareAddress(); if (mac != null) { StringBuilder sb = ...
我们可以使用`NetworkInterface.getNetworkInterfaces()`方法获取系统中所有网络接口的枚举,然后遍历这些接口,获取其名称、描述和相关配置。 在给定的代码中,可以看到以下关键步骤: 1. 检查操作系统是否为...
NetworkInterface类提供了一个方法getInetAddresses(),该方法返回一个Enumeration对象,包含了网络接口的所有InetAddress对象。我们可以使用这个方法来获取Linux服务器上的IP地址。 例如,我们可以使用以下代码来...
3. **Java编程实现**:在Java中,可以使用`java.net.NetworkInterface`和`java.net.InetAddress`类来获取本地网络接口和它们关联的IP地址。同时,可以使用`java.net.Socket`或`java.net.DatagramSocket`发送和接收...
Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses(); while (inetAddresses.hasMoreElements()) { InetAddress inetAddress = inetAddresses.nextElement(); // 检查是否为IPv4地址...
总的来说,要实现"andriod获取局域网内的设备ip跟mac地址",你需要理解Android的网络编程,包括使用`InetAddress`和`NetworkInterface`类,以及处理权限问题。同时,了解如何在Eclipse或类似HBuilder这样的工具中...
在探讨如何在Android环境中获取设备的IP地址时,我们首先需要理解几个关键概念:网络接口(NetworkInterface)、IP地址(InetAddress)以及如何通过Java代码在Android应用中安全地执行网络操作。以下是对“Android获取IP...
综上所述,获取系统IP地址在Java中主要通过`InetAddress`和`NetworkInterface`类实现。对于浏览器环境,需要考虑到安全策略和API限制。在实际应用中,开发者应当充分理解网络编程的概念,同时关注浏览器和Java平台的...
2. 使用`NetworkInterface`类:如果需要获取所有网络接口的IP,可以使用`java.net.NetworkInterface`类。遍历所有网络接口,然后获取每个接口的IP地址。 ```java import java.net.NetworkInterface; import java...
这通常涉及到`NetworkInterface.getNetworkInterfaces()`方法,以及`Enumeration<InetAddress>`接口的使用。这种方法可以获取到多个网络接口的IP地址,包括IPv4和IPv6。 现在,让我们结合`GetPhoneIP`这个示例代码...
2. **Java代码实现**:在Android中,可以通过`java.net.NetworkInterface`和`java.net.InetAddress`类来操作网络接口。以下是一个简单的示例,展示如何设置静态IP: ```java public void setStaticIpAddress(String...