Java 实现获取真实IP与MAC地址的解决方案
需积分: 9 144 浏览量
更新于2024-09-17
收藏 17KB DOCX 举报
"在Java编程中,获取本机IP地址是一项常见的任务,特别是在处理网络通信或需要连接服务器时。然而,初学者可能会遇到困惑,因为`InetAddress.getLocalHost()`方法返回的是本地主机的IP地址,而非网卡的实际IP,这通常会是`127.0.1.1`或`localhost`。这个问题源于操作系统中的`etc/hosts`文件,该文件将`localhost`映射到本机的环回地址。
解决这个问题,你需要通过更底层的网络接口操作来获取真实的IP地址。Java提供了一套API,如`java.net.NetworkInterface`和`java.net.InetAddress`,可以帮助我们实现这一目标。以下是一个示例程序,展示了如何在Linux环境下获取网卡的IP地址和MAC地址:
```java
import java.net.*;
import java.util.*;
public class GetIP {
public static void main(String[] args) {
GetIP t = new GetIP();
System.out.println("本地IP地址: " + t.getLocalIP());
System.out.println("MAC地址: " + t.getMacAddr());
}
public String getLocalIP() {
try {
Enumeration<NetworkInterface> e1 = NetworkInterface.getNetworkInterfaces();
while (e1.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) e1.nextElement();
if (!ni.isUp() || ni.isLoopback() || ni.isVirtual()) continue; // 忽略不适用的接口
InetAddress addr = ni.getInetAddresses();
for (InetAddress inet : addr) {
if (!inet.equals(InetAddress.getByName("127.0.0.1"))) { // 不是环回地址
return inet.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}
public String getMacAddr() {
String macAddr = "";
try {
NetworkInterface nic = NetworkInterface.getByName("eth0"); // 可能需要根据实际网卡名称替换
byte[] buf = nic.getHardwareAddress();
for (int i = 0; i < buf.length; i++) {
macAddr += byteToHex(buf[i]);
}
macAddr = macAddr.toUpperCase();
} catch (SocketException e) {
e.printStackTrace();
System.exit(-1);
}
return macAddr;
}
// 辅助函数,将字节转换为十六进制字符串
private String byteToHex(byte b) {
int n = b & 0xff;
return Integer.toHexString(n).toUpperCase();
}
}
```
在这个示例中,`getLocalIP()`方法遍历所有网络接口,查找第一个非环回地址的IP,而`getMacAddr()`方法则用于获取网卡的物理地址(MAC地址)。请注意,实际应用中可能需要根据具体的网络设备名称(如`eth0`)进行调整。通过执行这段代码,你将能够在控制台看到计算机的真实IP地址和MAC地址,而不是仅限于`127.0.1.1`。
2011-06-15 上传
2008-06-30 上传
2023-07-11 上传
点击了解资源详情
2023-07-28 上传
coolit_zhm
- 粉丝: 0
- 资源: 52
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码