当前位置: 首页 > news >正文

Java 获取本地ip网卡信息

工具类

  public static Optional<Inet4Address> getLocalIp4Address() throws SocketException {final List<Inet4Address> inet4Addresses = getLocalIp4AddressFromNetworkInterface();if (inet4Addresses.size() != 1) {final Optional<Inet4Address> ipBySocketOpt = getIpBySocket();if (ipBySocketOpt.isPresent()) {return ipBySocketOpt;} else {return inet4Addresses.isEmpty() ? Optional.empty() : Optional.of(inet4Addresses.get(0));}}return Optional.of(inet4Addresses.get(0));}private static Optional<Inet4Address> getIpBySocket() throws SocketException {try (final DatagramSocket socket = new DatagramSocket()) {socket.connect(InetAddress.getByName("8.8.8.8"), 10002);if (socket.getLocalAddress() instanceof Inet4Address) {return Optional.of((Inet4Address) socket.getLocalAddress());}} catch (UnknownHostException networkInterfaces) {throw new RuntimeException(networkInterfaces);}return Optional.empty();}public static List<Inet4Address> getLocalIp4AddressFromNetworkInterface() throws SocketException {List<Inet4Address> addresses = new ArrayList<>(1);// 所有网络接口信息Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();if (Objects.isNull(networkInterfaces)) {return addresses;}while (networkInterfaces.hasMoreElements()) {NetworkInterface networkInterface = networkInterfaces.nextElement();//滤回环网卡、点对点网卡、非活动网卡、虚拟网卡并要求网卡名字是eth或ens开头if (!isValidInterface(networkInterface)) {continue;}// 所有网络接口的IP地址信息Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();while (inetAddresses.hasMoreElements()) {InetAddress inetAddress = inetAddresses.nextElement();// 判断是否是IPv4,并且内网地址并过滤回环地址.if (isValidAddress(inetAddress)) {addresses.add((Inet4Address) inetAddress);}}}return addresses;}private static boolean isValidAddress(InetAddress address) {return address instanceof Inet4Address && address.isSiteLocalAddress() && !address.isLoopbackAddress();}/*** 过滤回环网卡、点对点网卡、非活动网卡、虚拟网卡并要求网卡名字是eth或ens开头** @param ni 网卡* @return 如果满足要求则true,否则false*/private static boolean isValidInterface(NetworkInterface ni) throws SocketException {return !ni.isLoopback() && !ni.isPointToPoint() && ni.isUp() && !ni.isVirtual() && (ni.getName().startsWith("eth") || ni.getName().startsWith("ens"));}

获取本机ip

getLocalIp4Address().get().getHostAddress()

相关文章:

  • 揭秘周杰伦《最伟大的作品》MV,绝美UI配色方案竟然藏在这里
  • 通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示
  • codeforces rating
  • 外部 prometheus监控k8s集群资源(pod、CPU、service、namespace、deployment等)
  • 莫托曼机器人测温程序
  • [pyqt5]PyQt5窗体背景图片拉伸填充
  • ios qt开发要点
  • 一件做起来无聊但坚持就很有意义的事情 ---- 复盘
  • 互联网摸鱼日报(2023-11-24)
  • 【高性能计算】CUDA,OpenCL,FPGA 加速,MPI
  • 存储区域
  • 【分布式】分布式事务及其解决方案
  • 景区智慧旅游智能化系统方案:PPT全文58页,附下载
  • Python 将列表拼接为一个字符串,Python join
  • 芯知识 | Flash可更换声音语音芯片—引领音频IC技术革新的新篇章
  • $translatePartialLoader加载失败及解决方式
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • STAR法则
  • XML已死 ?
  • 从0实现一个tiny react(三)生命周期
  • 翻译:Hystrix - How To Use
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 官方解决所有 npm 全局安装权限问题
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 鱼骨图 - 如何绘制?
  • 智能网联汽车信息安全
  • 《码出高效》学习笔记与书中错误记录
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Java数据解析之JSON
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​Python 3 新特性:类型注解
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $.ajax()
  • (SpringBoot)第七章:SpringBoot日志文件
  • (分享)自己整理的一些简单awk实用语句
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (算法)Travel Information Center
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)JAVA中的堆栈
  • (转载)Linux 多线程条件变量同步
  • .NET : 在VS2008中计算代码度量值
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net生成的类,跨工程调用显示注释
  • /etc/motd and /etc/issue
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @Autowired自动装配
  • @Transient注解
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [1204 寻找子串位置] 解题报告
  • [20181219]script使用小技巧.txt
  • [AIGC] MySQL存储引擎详解
  • [Android学习笔记]ScrollView的使用