如果是在windows環境: 使用InetAddress.getLocalHost()方法即可.
-
import java.net.InetAddress;
-
-
public
class Main {
-
public static void main(String[] args)
-
throws Exception {
-
InetAddress addr = InetAddress.getLocalHost();
-
System.out.println(
"Local HostAddress:
-
"+addr.getHostAddress());
-
String hostname = addr.getHostName();
-
System.out.println(
"Local host name: "+hostname);
-
}
-
}
代碼運行結果:
-
Local HostAddress:
192.168.42.2
-
Local host name: f19ca2b695da
在linux下上述獲取IP的方式有時候會得到127.0.0.1.
從JDK1.4開始,Java提供了一個NetworkInterface類。這個類可以得到本機所有的物理網絡接口和虛擬機等軟件利用本機的物理網絡接口創建的邏輯網絡接口的信息,NetworkInterface可以通過getNetworkInterfaces方法來枚舉本機所有的網絡接口。我們也可以利用getNetworkInterfaces得到的網絡接口來枚舉本機的所有IP地址。當然,也可以通過InetAddress類的getAllByName來得到本機的所有IP地址:
public static Enumeration<NetworkInterface> getNetworkInterfaces() throws SocketException
但getNetworkInterfaces方法可以按網絡接口將這些IP地址進行分組,這對於只想得到某個網絡接口上的所有IP地址是非常有用的。NetworkInterface類提供了三個方法可以分別得到網絡接口名(getName方法)、網絡接口別名(getDisplayName方法)以及和網絡接口綁定的所有IP地址(getInetAddresses方法):
public String getName()
public String getDisplayName()
public Enumeration<InetAddress> getInetAddresses()
下面給出windows和linux下通用的獲取本機IP的方法:
-
import java.net.Inet4Address;
-
import java.net.InetAddress;
-
import java.net.NetworkInterface;
-
import java.util.Enumeration;
-
-
-
public
class Main {
-
-
public static void main(String[] args) {
-
System.out.println(
"本機IP:" + getIpAddress());
-
}
-
-
public static String getIpAddress() {
-
try {
-
Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();
-
InetAddress ip =
null;
-
while (allNetInterfaces.hasMoreElements()) {
-
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
-
if (netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp()) {
-
continue;
-
}
else {
-
Enumeration<InetAddress> addresses = netInterface.getInetAddresses();
-
while (addresses.hasMoreElements()) {
-
ip = addresses.nextElement();
-
if (ip !=
null && ip
instanceof Inet4Address) {
-
return ip.getHostAddress();
-
}
-
}
-
}
-
}
-
}
catch (Exception e) {
-
System.err.println(
"IP地址獲取失敗" + e.toString());
-
}
-
return
"";
-
}
-
-
}
表示對網絡接口進行篩選,非回送接口 且 非虛擬網卡 且 正在使用中
注:
netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp() 用於排除回送接口,非虛擬網卡,未在使用中的網絡接口.
本文參考:
http://www.runoob.com/java/net-localip.html