转载自:http://blog.csdn.net/thunder09/article/details/5360251

在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一下.突然之间很想把自己的IP地址给获取了,虽然用系统自带命令可以得到,但自己想写一个程序获取一下,到网上搜索了一下java获取本机IP地址的方法,结果居然发现没有一个是可以用的,气的我老人家吐血,

这些人闭着眼睛写程序,写完了就往网上发,也不测试一下,害的我以为自己RP问题,老是获取不到正确的IP地址,强烈谴责!!!
为了表示鄙视,现把网上找到的主要的两种方法的不足给指出一下
方法一(只能在Windows上使用,Linux平台就gei屁了):

try

System.out.println("本机的IP = " + InetAddress.getLocalHost());
} catch (UnknownHostException e)

e.printStackTrace();
}

在Linux下的执行结果是:本机的IP = xxx/127.0.1.1 (其中xxx是你的计算机名,偶这里马赛克了)

方法二(宣称可以在Linux下执行)

Enumeration netInterfaces=NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while(netInterfaces.hasMoreElements())
{
NetworkInterface ni=(NetworkInterface)netInterfaces.nextElement();
System.out.println(ni.getName());
ip=(InetAddress) ni.getInetAddresses().nextElement();
if( !ip.isSiteLocalAddress() 
&& !ip.isLoopbackAddress() 
&& ip.getHostAddress().indexOf(":")==-1)
{
System.out.println ("本机的ip=" + ip.getHostAddress());
break;
}
else
{
ip=null;
}
}
从红色部分的代码可以看到,该代码对于获取到的第一个NetworkInterface的IP地址的获取,没有循环的获取,只是对第一个IP地址进行了处理,这样就导致了如果第一个IP地址不是一个
Inet4Address的地址而是一个< span
id="ArticleContent1_ArticleContent1_lblContent">Inet6Address,这个判断 ip.getHostAddress().indexOf(":")==-1将永远是false,这个if条件进不去呀,多害人,强烈鄙视!

不过方法二思路是对了,就是有些小毛病,让偶修改了一下,最终版的可以在 Linux下正确执行的代码如下:
Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while (allNetInterfaces.hasMoreElements())
{
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
System.out.println(netInterface.getName());
Enumeration addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements())
{
ip = (InetAddress) addresses.nextElement();
if (ip != null && ip instanceof Inet4Address)
{
System.out.println("本机的IP = " + ip.getHostAddress());

}
}

java获取本机IP地址的更多相关文章

  1. 详谈再论JAVA获取本机IP地址

    首先,你如果搜索“JAVA获取本机IP地址”,基本上搜到的资料全是无用的.比如这篇:http://www.cnblogs.com/zrui-xyu/p/5039551.html实际上的代码在复杂环境下 ...

  2. java获取本机ip地址(写出来的)

    /** * @author 豪弟 * @param request * @return * @throws IOException */ public final static String getI ...

  3. java获取本机IP地址和MAC地址的方法

    // 获取ip地址 public static String getIpAddress() { try { Enumeration<NetworkInterface> allNetInte ...

  4. java获取本机IP地址,非127.0.0.1

    综合了网上找的代码,整理的,Windows和Linux都可以用. private static String getHostIp(){ try{ Enumeration<NetworkInter ...

  5. java 获取本机ip地址

    /** * 取当前系统站点本地地址 linux下 和 window下可用 * * @return */ public static String getLocalIP() { String sIP = ...

  6. java获取本机ip(排除虚拟机等一些ip)最终解,总算找到方法了

    本文参考https://blog.csdn.net/u011809209/article/details/77236602 本文参考https://blog.csdn.net/yinshuomail/ ...

  7. Java 实例 - 获取本机ip地址及主机名

    package guyu.day0824; import java.net.InetAddress; /** * @Author: Fred * @Date: 2020/8/24 09:39 */ p ...

  8. Java获取本机MAC地址[转]

    原文地址:https://www.cnblogs.com/hxsyl/p/3422191.html Java获取本机MAC地址   为什么写这个呢?因为前几天看见网上有采用windows命令获取局域网 ...

  9. 获取本机IP地址

    这里有两种方法: //获取本机IP - (NSString *)localIPAddress { NSString *localIP = nil; struct ifaddrs *addrs; ) { ...

随机推荐

  1. 【BZOJ-3651&3081】网络通信&StrangeRegulations Link-Cut-Tree

    3651: 网络通信 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 90  Solved: 61[Submit][Status][Discuss] D ...

  2. 关于clonezilla

    Clonezilla 是一个很好的系统克隆工具,它可以说是吸取了 Norton Ghost 和 Partition Image 的优点.即不仅支持对整个系统进行克隆,而且也可以克隆单个的分区,这种灵活 ...

  3. spring全注解项目

    项目结构如下: spring配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...

  4. linux虚拟机系统的复制或克隆后续问题解决!

    前言 加快创建hadoop或spark集群,方法有两种途径:克隆或复制.其实啊,我最近,再返回写下本博文,理清下思路. 比如,你在你的一台电脑里,安装虚拟机.已经搭建好了hadoop或spark集群. ...

  5. IOS基础之 (十五)知识点

    一 SEL 1. 方法的存储位置 每个类的方法地址列表都存储在类对象中. 每个方法都有一个与之对应的SEL类型的对象. 根据一个SEL对象就可以找到方法的地址,进而调用方法. Person.h #im ...

  6. P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)

    https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...

  7. dto

    dto dto- datatransfer object(数据传输对象):dto在设计之初的主要考量是以粗粒度的数据结构减少网络通信并简化调用接口. http://www.cnblogs.com/wu ...

  8. node-js访问rest api的方法

    //npm install node-rest-client --save-dev var Client = require('node-rest-client').Client function l ...

  9. 改变字典内的value

    import re,os limit = "8000" username = "liuhuihuang" with open("users_dict& ...

  10. iOS 工作遇到问题记录

    iOS 工作遇到问题记录 1.UITableView的scrollDelegate问题 下午遇到一个奇怪的问题,之前都没有注意过,由于A VC中要实现tableView和其他View位置的联动,所以实 ...