
java 如何获取本地 ip
用户关注问题
如何在Java中获取当前机器的IP地址?
我在使用Java开发应用时,想知道如何通过代码获取当前电脑或服务器的本地IP地址。
使用Java获取本地IP地址的方法
可以通过Java标准库中的InetAddress类来获取本机IP地址。示例代码为:
import java.net.InetAddress;
public class GetLocalIP {
public static void main(String[] args) throws Exception {
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("本地IP地址: " + localHost.getHostAddress());
}
}
此代码会输出当前机器的默认IP地址。
Java如何获取所有网络接口的IP地址?
我想通过Java程序获取机器上所有网络接口(包括虚拟网卡和物理网卡)的IP地址,应该怎么实现?
利用网络接口类获取所有IP地址
Java的NetworkInterface类允许遍历所有网络接口,并获取它们绑定的所有IP地址。示例代码如下:
import java.net.*;
import java.util.*;
public class GetAllIP {
public static void main(String[] args) throws Exception {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface ni = interfaces.nextElement();
Enumeration<InetAddress> addresses = ni.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
System.out.println(ni.getName() + " : " + address.getHostAddress());
}
}
}
}
运行后,可以看到所有网络接口对应的IP地址。
如何获取Java程序在局域网中的内网IP?
我的电脑接入到局域网中,Java程序中如何准确获取当前计算机的局域网IP地址而不是127.0.0.1?
获取局域网内网IP的技巧
InetAddress.getLocalHost() 有时返回127.0.0.1,这样无法反映真实局域网IP。此时可以遍历所有网络接口,过滤出非回环、非虚拟并且是IPv4地址的IP,示例方法:
import java.net.*;
import java.util.*;
public class GetLocalIPv4 {
public static void main(String[] args) throws Exception {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface ni = interfaces.nextElement();
if (!ni.isLoopback() && ni.isUp()) {
Enumeration<InetAddress> addresses = ni.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
if (address instanceof Inet4Address && !address.isLoopbackAddress()) {
System.out.println("局域网IP: " + address.getHostAddress());
}
}
}
}
}
}
这样就能获取到正确的局域网内IP。