ipconfig如果没有解析输出,那么有没有人有100%的纯java方式呢?
我的问题与这个问题类似.我想获得我的机器的真实IP(不是127.0.0.1)但很奇怪,我的Ubuntu中的以下代码返回127.0.1.1
InetAddress.getLocalHost().getHostAddress()
Run Code Online (Sandbox Code Playgroud)
下面是我完整的代码,最初发布在SO在这里
public String getMachineIP() {
try {
String hostIP = InetAddress.getLocalHost().getHostAddress();
if (!hostIP.equals("127.0.0.1")) {
return hostIP;
}
/*
* Above method often returns "127.0.0.1", In this case we need to
* check all the available network interfaces
*/
Enumeration<NetworkInterface> nInterfaces = NetworkInterface
.getNetworkInterfaces();
while (nInterfaces.hasMoreElements()) {
Enumeration<InetAddress> inetAddresses = nInterfaces
.nextElement().getInetAddresses();
while (inetAddresses.hasMoreElements()) {
String address = inetAddresses.nextElement()
.getHostAddress();
if (!address.equals("127.0.0.1")) {
return address;
}
}
}
} catch (UnknownHostException e1) {
System.err.println("Error = " …Run Code Online (Sandbox Code Playgroud) 对于这个链接了使用设置来产生IP地址的代码.
String ip;
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
// filters out 127.0.0.1 and inactive interfaces
if (iface.isLoopback() || !iface.isUp())
continue;
Enumeration<InetAddress> addresses = iface.getInetAddresses();
while(addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
ip = addr.getHostAddress();
System.out.println(iface.getDisplayName() + " " + ip);
}
}
} catch (SocketException e) {
throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)
我已经实现了确切的代码来获取IP地址,但它提供了IPv4和IPv6地址.以下是生成的值.
Qualcomm Atheros AR5BWB222 Wireless Network Adapter 192.168.1.5
Qualcomm Atheros AR5BWB222 Wireless Network Adapter fe80:0:0:0:a874:xxxx:xxxx:9150%wlan0
Run Code Online (Sandbox Code Playgroud)
(IPv6地址编辑)
有什么方法我只能获得IPv4值,而不是两者兼而有之?