当前位置: 首页 > 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()
http://www.lryc.cn/news/241036.html

相关文章:

  • 将kali系统放在U盘中插入电脑直接进入kali系统
  • 二十四、RestClient操作文档
  • 【Docker】从零开始:9.Docker命令:Push推送仓库(Docker Hub,阿里云)
  • Centos部署GitLab-备份恢复
  • CSV用EXCEL打开后为科学计数法(后几位丢失)解决方法
  • flink sqlClient提交hiveIceberg
  • SpringBoot 导入其他配置文件
  • 景区智慧旅游智能化系统方案:PPT全文58页,附下载
  • Java特殊文件读取案例Properties
  • 搜维尔科技:Faceware面部捕捉最佳实践!
  • 如何使用ArcGIS Pro进行坐标转换
  • Python----类对象和实例对象
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • MySQL错误之ONLY_FULL_GROUP_BY
  • 牛客 HJ106 字符逆序 golang实现
  • 浏览器没收到返回,后端也没报错,php的json_encode问题bug
  • C#中的迭代器和分部类
  • Java项目如何打包成Jar(最简单)
  • 快速掌握Pyqt5的三种主窗口
  • Linux vim操作教程(vim 基操、vim替换和查找、 vim改变文本颜色、判断和循环语句)
  • mac添加Chrome插件的方法
  • 智能优化算法 | Matlab实现金豺优化算法(GJO)(内含完整源码)
  • 6、信息打点——Web架构篇语言中间件数据库系统源码获取
  • flutter vscode gradle 配置
  • tcp和 udp区别
  • 深度学习之基于Pytorch的昆虫分类识别系统
  • mysql字符串转为数字的三种方法、字符串转日期
  • 【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷5
  • PTA-6-45 工厂设计模式-运输工具
  • 重新使用hbase前