Java 获取本地ip网卡信息

news/2024/2/21 2:52:41

工具类

  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()

https://www.xjx100.cn/news/3091591.html

相关文章

【Web】Ctfshow Nodejs刷题记录

目录 ①web334 ②web335 ③web336 ④web337 ⑤web338 ⑥web339 ⑦web340 ⑧web341 ⑨web342-343 ⑩web344 ①web334 进来是一个登录界面 下载附件&#xff0c;简单代码审计 表单传ctfshow 123456即可 ②web335 进来提示 get上传eval参数执行nodejs代码 payload: …

为什么mapper层不使用@Mapper注解,依然可以注入?

在MyBatis中&#xff0c;我们通常使用Mapper接口来操作数据库。在Spring Boot中&#xff0c;我们可以使用MapperScan注解来扫描Mapper接口所在的包&#xff0c;并将其注册到Spring容器中。但是&#xff0c;即使我们没有在Mapper接口上使用Mapper注解&#xff0c;Spring Boot也可…

nginx/html关闭网页缓存方法

【问题】 通常代理服务器默认是有缓存的&#xff0c;即用户访问网址的时候默认获取到的是缓存&#xff0c;只有刷新之后才能得到服务器端的最新文件 【解决】 以nginx为例&#xff0c;找到配置文件nginx.conf&#xff0c;找到http {}&#xff0c;在其花括号之内添加命令&…

同为科技(TOWE)智能机柜PDU助力上海华为数据中心完善机房末端配电

智能时代加速而来&#xff0c;最大的需求是算力&#xff0c;最关键的基础设施是数据中心。作为一家在信息通信领域拥有多年经验和技术积累的公司&#xff0c;华为在全国多个地区都设有数据中心&#xff0c;如知名的贵州贵安华为云全球总部、内蒙古乌兰察布华为数据中心等&#…

Python Web框架的三强之争:Flask、Django和FastAPI

JetBrains 公布 2022 Python 开发者调查结果。 完整报告地址&#xff1a;https://lp.jetbrains.com/zh-cn/python-developers-survey-2022/ 这是由 Python 软件基金会 (PSF) 和 JetBrains 共同开展的第六次官方年度 Python 开发者调查&#xff0c;回复于 2022 年 10 月至 12 …

探伤仪的曲线

超声波检验DAC曲线、AVG曲线的区别、使用及制作方法 一、 概念 1.1 DAC曲线 DAC距离波幅曲线是描述某一确定反射体回波高度随距离变化的关系曲线。因此&#xff0c;AVG曲线和DAC曲线都有纵波、横波制作的曲线&#xff0c;并不是简单地由纵波、横波来划分何为AVG曲线&#xf…

什么是RS485通信

RS-485是一种通讯接口标准&#xff0c;RS就是Recommended Standard的缩写&#xff08;推荐标准的意思&#xff09;485是标识号。 RS485采用总线的接线方式&#xff0c;广泛应用于数据采集和控制&#xff0c;它的主要优点之一是它允许将多个RS485设备放在同一条总线上。 多设备…

全国机动车达4.3亿辆 驾驶人达5.2亿人 新能源汽车保有量达1821万辆

据公安部统计&#xff0c;截至2023年9月底&#xff0c;全国机动车保有量达4.3亿辆&#xff0c;其中汽车3.3亿辆&#xff0c;新能源汽车1821万辆&#xff1b;机动车驾驶人5.2亿人&#xff0c;其中汽车驾驶人4.8亿人。 前三季度新注册登记机动车2601万辆&#xff0c;新注册登记汽…