java 本地ip地址_java – 获取本地IP地址而不连接到互联网

所以,我试图获取我的机器的IP地址在我的本地网络(应为192.168.178.41)。

我的第一个意图是使用这样的东西:

InetAddress.getLocalHost().getHostAddress();

但它只返回127.0.0.1,这是正确的,但不是非常有用的我。

我搜索周围,发现这个答案http://stackoverflow.com/a/2381398/717341,它只是创建一个网页连接到某些网页(例如“google.com”),并从套接字获取本地主机地址:

Socket s = new Socket("google.com", 80);

System.out.println(s.getLocalAddress().getHostAddress());

s.close();

这对我的机器工作(它返回192.168.178.41),但它需要连接到互联网,以工作。由于我的应用程序不需要互联网连接,它可能看起来“可疑”的应用程序尝试连接到谷歌每次启动,我不喜欢使用它的想法。

所以,经过一些更多的研究,我偶然发现了NetworkInterface类,它(有一些工作)也返回所需的IP地址:

Enumeration interfaces = NetworkInterface.getNetworkInterfaces();

while (interfaces.hasMoreElements()){

NetworkInterface current = interfaces.nextElement();

System.out.println(current);

if (!current.isUp() || current.isLoopback() || current.isVirtual()) continue;

Enumeration addresses = current.getInetAddresses();

while (addresses.hasMoreElements()){

InetAddress current_addr = addresses.nextElement();

if (current_addr.isLoopbackAddress()) continue;

System.out.println(current_addr.getHostAddress());

}

}

在我的机器上,这会返回以下内容:

name:eth1 (eth1)

fe80:0:0:0:226:4aff:fe0d:592e%3

192.168.178.41

name:lo (lo)

它找到我的网络接口并返回所需的IP,但我不知道其他地址(fe80:0:0:0:226:4aff:fe0d:592e%3)的意思。

此外,我还没有找到一种方法从返回的地址过滤它(通过使用InetAddress对象的isXX()方法),然后使用RegEx,我发现非常“脏”。

任何其他的想法,使用RegEx或互联网?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Java根据MAC地址获取IP地址的方法: Java中可以使用InetAddress类来获取网络上的IP地址。但是,InetAddress类并没有提供直接的方法来获取MAC地址。在Java获取MAC地址需要通过操作系统提供的API来实现。下面是一种获取MAC地址的方法: ```java import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; public class MacUtil { public static String getMacAddress(String ipAddress) throws UnknownHostException, SocketException { InetAddress inetAddress = InetAddress.getByName(ipAddress); NetworkInterface network = NetworkInterface.getByInetAddress(inetAddress); byte[] mac = network.getHardwareAddress(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < mac.length; i++) { sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } return sb.toString(); } } ``` 2. Java根据本地IP获取MAC地址的方法: Java中同样可以使用InetAddress类来获取本地IP地址获取本地MAC地址同样需要通过操作系统提供的API来实现。下面是一种获取本地MAC地址的方法: ```java import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; public class MacUtil { public static String getMacAddress() throws UnknownHostException, SocketException { InetAddress inetAddress = InetAddress.getLocalHost(); NetworkInterface network = NetworkInterface.getByInetAddress(inetAddress); byte[] mac = network.getHardwareAddress(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < mac.length; i++) { sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } return sb.toString(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值