获取本地ip常用方法:
- InetAddress.getLocalHost().getHostAddress())容易得到 “127.0.0.1”
- NetworkInterface.getNetworkInterfaces();可以获取本地所有的ip地址,如docker服务相关的ip等。
// often returns "127.0.0.1"
System.out.println("Host addr: " + InetAddress.getLocalHost().getHostAddress());
//all ip
Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
for (; n.hasMoreElements(); ) {
NetworkInterface e = n.nextElement();
System.out.println("Interface: " + e.getName());
Enumeration<InetAddress> a = e.getInetAddresses();
for (; a.hasMoreElements(); ) {
InetAddress addr = a.nextElement();
System.out.println(" " + addr.getHostAddress());
}
}
3.通过建立UDP连接,让系统通过路由表自己选择一个主要的ip地址的方式。来获取ip地址。详细描述>>
try(final DatagramSocket socket = new DatagramSocket()){
socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
ip = socket.getLocalAddress().getHostAddress();
}
4.开源框架:
xxl-rpc-core中获取ip的方式可参考源码:https://github.com/xuxueli/xxl-rpc/blob/master/xxl-rpc-core/src/main/java/com/xxl/rpc/util/IpUtil.java#L169