在java 应用中, 有时需要获取应用所在服务器的ip地址, 比如说利用Zookeeper 做动态节点上下线时。 java 提供了InetAddress 类来获取主机ip地址, 但是使用的时候需要注意一下细节问题。

1. InetAddress

直接使用InetAddress 的getLocalHost()方法, 获取到的Ip 地址与本机hosts 的配置有关。 如果是linux 环境的话, 其实获取的就是命令: hostname -i 返回的ip地址, 而具体hostname -i 返回值是什么, 取决于/etc/hosts 配置文件的配置。

1.1 测试代码

    public static void main(String[] args) throws UnknownHostException {// 直接通过InetAddress.getLocalHost()方法获取的ip地址, 其实就是执行hostname -i 得到的ip地址InetAddress inetAddress = InetAddress.getLocalHost();System.out.println("ip 地址:" + inetAddress.getHostAddress() + ", 是否是回环网卡: " + inetAddress.isLoopbackAddress());}

1.2 主机名映射地址设置为回环网卡地址

  1. 编辑/et/hosts 文件
127.0.0.1    zongf-PC
  1. 执行hostname 命令
zongf@zongf-PC:~$ hostname -i
127.0.0.1
  1. 执行java 测试类
ip 地址:127.0.0.1, 是否是回环网卡: true

1.3 主机名映射地址设置为非回环网卡地址

  1. 编辑/etc/hosts 文件, 添加域名映射规则。 笔者主机名为zongf-PC
192.168.0.1  zongf-PC
  1. 执行hostname 命令
$ hostname -i
192.168.0.1
  1. 执行java 测试类
ip 地址:192.168.0.1, 是否是回环网卡: false

2. 获取主机ip 工具类

从上面测试可以看出, 若想获取应用所在服务器的真实ip地址, 单单通过InetAddress 是不可以的。 我们可以配合NetworkInterface 接口来实现, 因此笔者写了一个获取地址的 工具类, 此工具类获取地址方式:

  1. 首先获取hosts 文件中配置主机名映射的地址, 相当于hostname -i 的返回结果
  2. 如果返回地址不是127.0.0.1,则直接返回; 否则获取ipv4 网卡设置的地址。
public class InetAddressUtil {private static final Logger LOGGER = LoggerFactory.getLogger(InetAddressUtil.class);/** 获取主机地址 */public static String getHostIp(){String realIp = null;try {InetAddress address = InetAddress.getLocalHost();// 如果是回环网卡地址, 则获取ipv4 地址if (address.isLoopbackAddress()) {address = getInet4Address();}realIp = address.getHostAddress();LOGGER.info("获取主机ip地址成功, 主机ip地址:{}", address);return address.getHostAddress();} catch (Exception e) {LOGGER.error("获取主机ip地址异常", e);}return realIp;}/** 获取IPV4网络配置 */private static InetAddress getInet4Address() throws SocketException {// 获取所有网卡信息Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();while (networkInterfaces.hasMoreElements()) {NetworkInterface netInterface = (NetworkInterface) networkInterfaces.nextElement();Enumeration<InetAddress> addresses = netInterface.getInetAddresses();while (addresses.hasMoreElements()) {InetAddress ip = (InetAddress) addresses.nextElement();if (ip instanceof Inet4Address) {return ip;}}}return null;}
}

Java 获取主机ip地址(ipv4)相关推荐

  1. JAVA获取主机IP地址

    JAVA获取主机IP地址 java 获取主机IP地址工具类 import org.springframework.web.context.request.RequestAttributes; impo ...

  2. 获取项目服务器ip,java获取服务器ip地址

    java获取服务器ip地址 内容精选 换一换 如果IP经过NAT/WAF,则只能获取到NAT/WAF转化后的IP地址,无法获取到NAT/WAF前的IP地址.如果客户端为容器,只能获取到容器所在主机的I ...

  3. 如何通过域名获取主机ip地址

    如何通过域名获取主机ip地址 需要注意,主机不是本机,一般指服务器与客户端.主机信息主要包含ip地址和对应的域名.linux使用结构体struct hostent表示主机的信息.struct host ...

  4. 记一次:java获取真实ip地址问题

    前言:在java代码中获取真实ip地址的代码如下所示 /*** 获取客户端IP* * @param request 请求对象* @return IP地址*/public static String g ...

  5. java 获取服务器IP地址及MAC地址

    java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址 /*** 此方法描述的是:获得服务器的IP地址*/public st ...

  6. java获取服务器ip地址_java中获取当前服务器的Ip地址的方法

    1.tomcat是一款免费的开源Web服务器,如果部署在本地,那么对应的那么为localhost,对应地址为127.0.0.1. 例子:可以通过http://localhost:8080/项目root ...

  7. java获取客户端IP地址工具类

    代码如下自取: import lombok.extern.slf4j.Slf4j;import javax.servlet.http.HttpServletRequest; import java.n ...

  8. java 获取ip地址 公网,java获取公网ip地址操作

    获取公网ip地址操作 import javax.servlet.http.HttpServletRequest; /** * * 获取公网ip地址操作 * @ClassNmae:NewClass * ...

  9. java获取网络ip地址_Java获取电脑真实IP地址的示例代码

    /** * @author yins * @date 2018年8月12日下午9:53:58 */ import java.net.Inet4Address; import java.net.Inet ...

最新文章

  1. 自学python网站推荐-推荐自学python必入的神仙网站
  2. BZOJ 3218(a + b Problem-二分图套值域线段树)
  3. 鸟哥的Linux私房菜(服务器)- 架站文件習題解答篇
  4. iview在vue-cli3如何按需加载
  5. 【5 数学规划】实际问题实战
  6. arcgis怎么做poi_跟着闫磊大神学ArcGIS,事半功倍
  7. html5 - history 历史管理
  8. 基于HTML5的WebGL结合Box2DJS物理应用 1
  9. 一个figure存在多个legend:多行多列图例
  10. 时态数据库的应用介绍(1)
  11. Processing-基础小坑-
  12. 读EntityFramework.DynamicFilters源码_心得_示例演示02
  13. 汽车自动驾驶是人工智能吗,自动驾驶是人工智能
  14. 机器学习笔记笔记之三——文本类型处理-词袋法、TF-IDF理解
  15. 论实力和智慧,美的微晶冰箱有点东西!
  16. 2.4G蓝牙耳机等穿戴蓝牙设备贴片天线方案 CA-C01
  17. R plot图片背景设置为透明_数据科学06 | R语言程序设计模拟和R分析器
  18. Unity加载倾斜摄影模型/激光点云,开源
  19. 利用ENVI的ROI统计影像信息
  20. 关于Kernel的一点解释

热门文章

  1. 安卓App旅游(含汽车订票,含酒店预定,含团购)源码
  2. vue-pdf打印出现方字块乱码问题
  3. php二维数组取交集,PHP中二维数组怎么取交集
  4. 三十岁的男人应该有多少存款?
  5. 第十一次作业 - Alpha 事后诸葛亮(团队)
  6. 三阶及四阶Runge-Kutta法
  7. 上海航芯 | 全自动咖啡机设计方案
  8. 微信小程序-云开发云调用API没有权限(no permission)问题
  9. 1096:数字统计(C C++)
  10. Linux&Windows系统双系统