您的位置:首页 > 编程语言 > Java开发

关于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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: