iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Java如何跨平台获取MAC地址
  • 566
分享到

详解Java如何跨平台获取MAC地址

2024-04-02 19:04:59 566人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

使用 NetworkInterface 类 首先介绍如何通过Java的NetworkInterface类的api来获取本机Mac地址的方法,首先展示代码: public cla

使用 NetworkInterface 类

首先介绍如何通过JavaNetworkInterface类的api来获取本机Mac地址的方法,首先展示代码:



public class MacUtil {

    public static void main(String[] args) {
        getMac().forEach(System.out::println);
    }

    
    public static List<String> getMac() {
        List<String> list = new ArrayList<>();
        try {
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                Optional.ofNullable(networkInterface.getHardwareAddress())
                        .ifPresent(mac -> list.add(fORMat(mac)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    
    private static String format(byte[] mac) {
        StringBuilder sb = new StringBuilder();
        for (byte b : mac) {
            sb.append(String.format("%02X", b)).append("-");
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

}

通过以上代码理论上即可获取本机所有的MAC地址,此外通过format方法可以将获取到的MAC地址统一处理成XX-XX-XX-XX-XX-XX的格式,这里之所以说是理论上,是因为我曾经在别人的苹果电脑上运行,结果并没有得到所有MAC地址(没有得到执行ifconfig -a得到的所有MAC地址,而且还会出现llw0这个网络MAC地址一直变动),但是我在本地的虚拟机中运行苹果时却也是正常,由于我自己没有苹果电脑,所以暂时也不清楚具体的原因,如果有知道的小伙伴,欢迎留言,提前感谢啦~~~

执行命令行获取

正如在上一部分中提到的,在某些情况下使用NetworkInterface类并不能获取到本机所有的MAC地址,甚至还可能出现动态变化的情况(暂时不清楚原因)。因此,在这种情况下只能通过JavaRuntime类的exec方法直接执行命令了,当然在大多数情况下还是建议使用NetworkInterface类,不仅方便,而且万一以后修复了上面的bug(不知道算不算是bug,还是我个人的问题),不对上述代码做任何变动就可以得到自己执行命令的效果了,说了那么多,先看看如果通过自己执行命令获取本机的所有MAC地址吧,先直接展示代码:



public class MacUtil {

    private static final String WIN_PREFIX = "win";
    private static final String OS_NAME_PROPERTY = "os.name";
    private static final String WIN_COMMAND = "ipconfig /all";
    private static final String UNIX_COMMAND = "/sbin/ifconfig -a";
    private static final String MAC_REGEX = "(([a-f0-9]{2}-){5}|([a-f0-9]{2}:){5})[a-f0-9]{2}";
    private static final Pattern pattern = Pattern.compile(MAC_REGEX, Pattern.CASE_INSENSITIVE);

    public static void main(String[] args) {
        getMac().forEach(System.out::println);
    }

    
    private static List<String> getMac() {
        try {
            String osName = System.getProperty(OS_NAME_PROPERTY).toLowerCase();
            if (osName.startsWith(WIN_PREFIX)) {
                return getMacByCommand(WIN_COMMAND);
            }
            return getMacByCommand(UNIX_COMMAND);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Collections.emptyList();
    }

    
    private static List<String> getMacByCommand(String command) throws IOException {
        List<String> macList = new ArrayList<>();
        List<String> strList = execCommand(command);
        for (String str : strList) {
            Matcher matcher = pattern.matcher(str);
            if (matcher.find() && matcher.end() == str.length()) {
                macList.add(matcher.group().replace(":", "-").toUpperCase());
            }
        }
        return macList;
    }

    
    private static List<String> execCommand(String command) throws IOException {
        List<String> strList = new ArrayList<>();
        Process process = Runtime.getRuntime().exec(command);
        try (BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
            return br.lines().collect(Collectors.toList());
        } catch (Exception e) {
            e.printStackTrace();
        }
        process.destroy();
        return strList;
    }

}

源码

到此这篇关于详解Java如何跨平台获取MAC地址的文章就介绍到这了,更多相关Java跨平台获取MAC地址内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Java如何跨平台获取MAC地址

本文链接: https://www.lsjlt.com/news/127272.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Java如何跨平台获取MAC地址
    使用 NetworkInterface 类 首先介绍如何通过Java的NetworkInterface类的API来获取本机MAC地址的方法,首先展示代码: public cla...
    99+
    2024-04-02
  • 怎么在Java中跨平台获取MAC地址
    怎么在Java中跨平台获取MAC地址?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用 NetworkInterface 类首先介绍如何通过Java的Netwo...
    99+
    2023-06-15
  • java中如何获取MAC地址
    这篇文章主要介绍了java中如何获取MAC地址,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是Mac地址?Mac地址就是在媒体接入层上使用的地址,通俗点说就是网卡的物理地...
    99+
    2023-06-17
  • JAVA获取本地MAC地址
     MAC地址也就是物理地址 所以cmd电脑查看   一、自定义方法获取本地mac地址      private static String getLocalMac(InetAddress inetAddress) {        try...
    99+
    2023-09-03
    java jvm servlet 1024程序员节
  • 利用java如何根据IP获取mac地址
    利用java如何根据IP获取mac地址?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体内容如下import java.net.InetAddress;import jav...
    99+
    2023-05-31
    java ip mac
  • java实现通过IP地址获取mac(物理地址)
    java实现通过IP地址获取mac(物理地址),只能获取到局域网的mac地址,具体代码如下: package com.qcmsa.util;import org.apache.commons.log...
    99+
    2023-09-01
    java tcp/ip macos
  • mac无法自动获取ip地址如何解决
    如果您的Mac无法自动获取IP地址,您可以尝试以下解决方法:1. 检查网络连接:确保您的Mac已正确连接到网络,并且网络设备(如路由...
    99+
    2023-10-10
    mac
  • 如何用Python获取计算机名,ip地址,mac地址
    目录获取计算机名获取ip地址获取mac地址获取计算机名 # 获取计算机名,常用的方法有三种,但最常用的是第一种 import os import socket # metho...
    99+
    2024-04-02
  • 用户的MAC地址如何利用java实现获取
    用户的MAC地址如何利用java实现获取?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java实现获取用户的MAC地址方法:方法一:将本机地址与局域网内其他机器区分开来 p...
    99+
    2023-05-31
    java mac地址 ava
  • Linux系统如何获取默认MAC地址
    这篇文章跟大家分析一下“Linux系统如何获取默认MAC地址”。内容详细易懂,对“Linux系统如何获取默认MAC地址”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“Linux系统...
    99+
    2023-06-28
  • java获取mac地址的方法有哪些
    在Java中,可以使用以下方法之一来获取MAC地址:1. 使用`NetworkInterface`类:```javaimport j...
    99+
    2023-09-05
    java
  • 使用Java如何获取IP地址
    本篇文章给大家分享的是有关使用Java如何获取IP地址,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、通过IP获取机器名 or 通过机器名获取iphost :主机 ...
    99+
    2023-05-31
    java ip ava
  • Java根据ip地址获取归属地实例详解
    目录引言Java 中是如何获取 IP 属地的首先需要写一个 IP 获取的工具类内置的三种查询算法使用方法项目用到的全部依赖引言 最近...
    99+
    2024-04-02
  • url地址如何获取
    这篇文章将为大家详细讲解有关url地址如何获取,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。url地址的获取方法:首先打开任意浏览器,网站地址栏就是对于的url地址路径信息;然后在命令窗口输入nslook...
    99+
    2023-06-13
  • Java如何获取url地址文件流
    目录获取url地址文件流根据url获取文件的二进制上代码获取url地址文件流 public static InputStream getInputStreamFromUrl(Str...
    99+
    2024-04-02
  • shell如何获取IP地址
    这篇文章主要介绍了shell如何获取IP地址,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。获取IP地址:代码如下:ifconfig ...
    99+
    2024-04-02
  • win98如何获知IP和MAC地址
    每一台电脑都需要一个IP地址才能上网,而拨号上网都是采取动态IP分配的,就是说,我们每次拨号上网时所得到的IP都会不一样,不是固定在一个IP上,这样才能更有效的运用有限的IP资源。   怎样才能知道我们的电脑目前所占...
    99+
    2023-05-23
    地址 MAC IP
  • 客户端的IP地址与MAC地址怎么利用Java进行获取
    这篇文章将为大家详细讲解有关客户端的IP地址与MAC地址怎么利用Java进行获取,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.获取客户端IP地址public String getIp(H...
    99+
    2023-05-31
    java ip地址 mac地址
  • java如何获取内存地址中的值
    在Java中,可以使用以下方法获取内存地址中的值:1. 对于基本数据类型,可以直接使用变量名获取其值。2. 对于引用类型,可以使用对...
    99+
    2023-09-27
    java
  • 如何理解Java的跨平台特性操作
    Java的跨平台特性 1、java的跨平台是指 java在运行时是凌驾于os之上,是在jvm中运行的,跟os没有直接联系。 2、java跨平台主要是由java的编译方式决定的 因为j...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作