关于JAVA取本机ip的一些传说
2016-04-19 17:07
585 查看
先看一段代码:the IP address of the local host. 在大多数机器上都可以取到本机ip
Java代码
InetAddress.getLocalHost().getHostAddress()
但是多网卡配置的时候,就悲剧了:下图这个机器使用上面的命令取回的是127.0.0.1。
用ifconfig看网卡:
这个时候就需要枚举多网卡判断了
Java代码
Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
然后结合IP4的地址段做区分,主要利用以下两个方法:
Java代码
ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
最终方法如下(从网上copy来的..)
Java代码
/**
* 多IP处理,可以得到最终ip
* @return
*/
public static String getIp() {
String localip = null;// 本地IP,如果没有配置外网IP则返回它
String netip = null;// 外网IP
try {
Enumeration<NetworkInterface> netInterfaces = NetworkInterface
.getNetworkInterfaces();
InetAddress ip = null;
boolean finded = false;// 是否找到外网IP
while (netInterfaces.hasMoreElements() && !finded) {
NetworkInterface ni = netInterfaces.nextElement();
Enumeration<InetAddress> address = ni.getInetAddresses();
while (address.hasMoreElements()) {
ip = address.nextElement();
// System.out.println(ni.getName() + ";" + ip.getHostAddress()
// + ";ip.isSiteLocalAddress()="
// + ip.isSiteLocalAddress()
// + ";ip.isLoopbackAddress()="
// + ip.isLoopbackAddress());
if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":") == -1) {// 外网IP
netip = ip.getHostAddress();
finded = true;
break;
} else if (ip.isSiteLocalAddress()
&& !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":") == -1) {// 内网IP
localip = ip.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
if (netip != null && !"".equals(netip)) {
return netip;
} else {
return localip;
}
}
Java代码
InetAddress.getLocalHost().getHostAddress()
但是多网卡配置的时候,就悲剧了:下图这个机器使用上面的命令取回的是127.0.0.1。
用ifconfig看网卡:
这个时候就需要枚举多网卡判断了
Java代码
Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
然后结合IP4的地址段做区分,主要利用以下两个方法:
Java代码
ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
最终方法如下(从网上copy来的..)
Java代码
/**
* 多IP处理,可以得到最终ip
* @return
*/
public static String getIp() {
String localip = null;// 本地IP,如果没有配置外网IP则返回它
String netip = null;// 外网IP
try {
Enumeration<NetworkInterface> netInterfaces = NetworkInterface
.getNetworkInterfaces();
InetAddress ip = null;
boolean finded = false;// 是否找到外网IP
while (netInterfaces.hasMoreElements() && !finded) {
NetworkInterface ni = netInterfaces.nextElement();
Enumeration<InetAddress> address = ni.getInetAddresses();
while (address.hasMoreElements()) {
ip = address.nextElement();
// System.out.println(ni.getName() + ";" + ip.getHostAddress()
// + ";ip.isSiteLocalAddress()="
// + ip.isSiteLocalAddress()
// + ";ip.isLoopbackAddress()="
// + ip.isLoopbackAddress());
if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":") == -1) {// 外网IP
netip = ip.getHostAddress();
finded = true;
break;
} else if (ip.isSiteLocalAddress()
&& !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":") == -1) {// 内网IP
localip = ip.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
if (netip != null && !"".equals(netip)) {
return netip;
} else {
return localip;
}
}
相关文章推荐
- Java基础--反射、内省
- JAVA虚拟机之二:Java体系结构
- JAVA虚拟机之三:CMS垃圾收集器
- JAVA虚拟机之一:垃圾回收(GC)机制
- java实现Base64加密解密算法
- (15)Spring Boot使用Druid和监控配置【从零开始学Spring Boot】
- java并发编程-synchronized
- springboot hessian
- 创建 xlx java
- 总结一下java中的位操作,运算优先级
- Java 将15位身份证号转化为18位返回,非15位身份证号原值返回
- Spring声明式事务配置管理方法
- jdk 的一些性能工具(jvm读书笔记)
- 文件创建 file txt java
- (java)求power OF num
- Java 将18位身份证号转化为15位返回,非18位身份证号原值返回 单例
- java.uti.Random类nextInt方法中随机数种子为47的奇怪问题
- spring中jdbctemplate的使用以及c3p0
- Eclipse中mybatis自动生成代码
- JDK高性能编程之容器