`

获取电脑物理网卡地址工具类

阅读更多

MacAddr.java

 

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.util.StringTokenizer;

public class MacAddr {
    //获得机器的MAC地址
    public  static String getMacAddress() throws IOException {
        String os = System.getProperty("os.name");//操作系统名称
        String macStr = "";//MAC地址
        try {
            if (os.startsWith("Windows")) {
                macStr = windowsParseMacAddress(windowsRunIpConfigCommand());
            } else if (os.startsWith("Linux")) {
                macStr = linuxParseMacAddress(linuxRunIfConfigCommand());
            } else {
                macStr = "00-00-00-00-00-00";
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally{
            return macStr;
        }
    }

    /**
     * TODO:linux系统,获得ipconfig 命令得到的打印信息串
     * @param ipConfigResponse String
     * @return String
     */
    private  static String linuxParseMacAddress(String ipConfigResponse){
        String localHost = null;
        try {
            localHost = InetAddress.getLocalHost().getHostAddress();
        } catch (java.net.UnknownHostException ex) {
            ex.printStackTrace();
        }

        StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "\n");
        String lastMacAddress = null;

        while (tokenizer.hasMoreTokens()) {
            String line = tokenizer.nextToken().trim();
            boolean containsLocalHost = line.indexOf(localHost) >= 0;

            // see if line contains IP address
            if (containsLocalHost && lastMacAddress != null) {
                return lastMacAddress;
            }

            // see if line contains MAC address
            int macAddressPosition = line.indexOf("HWaddr");
            if (macAddressPosition <= 0)
                continue;

            String macAddressCandidate = line.substring(macAddressPosition + 6).trim();
            if (linuxIsMacAddress(macAddressCandidate)) {
                lastMacAddress = macAddressCandidate;
                continue;
            }
        }
        return lastMacAddress;
    }

    /**
     * TODO:判断是否为mac地址串
     * @param macAddressCandidate String
     * @return boolean
     */
    private  static boolean linuxIsMacAddress(String macAddressCandidate) {
        // TODO: use a smart regular expression
        if (macAddressCandidate.length() == 17){
            return true;
        }else{
            return false;
        }
    }

    /**
     * TODO:linux系统,获得ifconfig 命令得到的打印信息串
     * @throws IOException
     * @return String
     */
    private  static String linuxRunIfConfigCommand() throws IOException {
        Process p = Runtime.getRuntime().exec("ifconfig");
        InputStream stdoutStream = new BufferedInputStream(p.getInputStream());

        StringBuffer buffer = new StringBuffer();
        for (;;) {
            int c = stdoutStream.read();
            if (c == -1)
                break;
            buffer.append((char) c);
        }
        String outputText = buffer.toString();
        stdoutStream.close();
        return outputText;
    }

    /**
     * TODO:获得windows操作系统的MAC地址
     * @param ipConfigResponse String
     * @throws ParseException
     * @return String
     */
    private static String windowsParseMacAddress(String ipConfigResponse){
        String localHost = null;
        try {
            localHost = InetAddress.getLocalHost().getHostAddress();
        } catch (java.net.UnknownHostException ex) {
            ex.printStackTrace();
        }

        //构造一个字符串分析器,以换行符作为定界符
        StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "\n");
        String lastMacAddress = null;

        while (tokenizer.hasMoreTokens()) {
            String line = tokenizer.nextToken().trim();
            // see if line contains IP address
            if (line.endsWith(localHost) && lastMacAddress != null) {
                return lastMacAddress;
            }
            // see if line contains MAC address
            int macAddressPosition = line.indexOf(":");
            if (macAddressPosition <= 0){
                continue;
            }

            String macAddressCandidate = line.substring(macAddressPosition + 1).trim();
            if (windowsIsMacAddress(macAddressCandidate)) {
                lastMacAddress = macAddressCandidate;
                continue;
            }
        }
        return lastMacAddress;
    }

    /**
     * TODO:判断是否为mac地址串
     * @param macAddressCandidate String
     * @return boolean
     */
    private  static boolean windowsIsMacAddress(String macAddressCandidate) {
        //mac地址格式:00-E0-4C-30-BA-01
        if (macAddressCandidate.length()==17&&macAddressCandidate.indexOf("-")>0){
            return true;
        }else{
            return false;
        }
    }
    /**
     * TODO:windows系统,获得ipconfig /all 命令得到的打印信息串
     * @throws IOException
     * @return String
     */
    private  static String windowsRunIpConfigCommand() throws IOException {
        Process p = Runtime.getRuntime().exec("ipconfig /all");
        InputStream stdoutStream = new BufferedInputStream(p.getInputStream());

        StringBuffer buffer = new StringBuffer();
        for (;;) {
            int c = stdoutStream.read();
            if (c == -1)
                break;
            buffer.append((char) c);
        }
        String outputText = buffer.toString();
        stdoutStream.close();
        return outputText;
    }

    public static void main(String[] args) {
    	try {
            System.out.println(" Operating System Name:"+ System.getProperty("os.name"));
            System.out.println(" IP/Localhost: "+ InetAddress.getLocalHost().getHostAddress());
            System.out.println(" MAC Address: " + getMacAddress());
        } catch (Throwable t) {
            t.printStackTrace();
        }
	}
}

 
分享到:
评论

相关推荐

    七种获取PC上网卡物理地址MAC方法的Demo

    本Demo集中展示了七种不同的方法来获取个人计算机(PC)上的网卡物理地址,即MAC地址。这些方法可能来源于各种编程技术或API调用,以适应不同的操作系统和网络环境。以下将详细介绍这七个方法以及涉及到的相关知识点...

    多网卡mac地址和多硬盘序列号获取小工具

    本文将深入探讨“多网卡mac地址和多硬盘序列号获取小工具”这一主题,以及如何利用易语言编写小程序来实现这一功能。 首先,我们要理解MAC地址和硬盘序列号的基本概念。MAC地址(Media Access Control Address)是...

    pb获取ip地址/mac地址

    这个DLL可能封装了Windows API函数,如`GetAdaptersInfo`或`GetAdaptersAddresses`,调用这些函数可以获取到网络适配器的物理地址,即MAC地址。另一种方法是通过Winsock控件发送ARP请求,但这种方式较为复杂。 3. *...

    VB获取网卡的物理地址

    本篇文章将深入探讨如何在VB中获取计算机网卡的物理地址,也就是MAC(Media Access Control)地址。 首先,我们需要了解MAC地址的基本概念。MAC地址是设备在网络上的唯一标识,由48位二进制组成,通常用12个16进制...

    LabVIEW获取硬盘网卡CPU等序列号.

    4. **获取网卡物理地址**:网卡物理地址通常通过查询网络接口列表和对应接口的配置信息来获取。在LabVIEW中,可以使用网络编程的VIs,如“获取网络接口”和“获取MAC地址”等函数,来获取网络接口控制器的MAC地址。 ...

    网卡MAC地址修改工具 MAC修改工具

    "网卡MAC地址修改工具"是一个专门用于更改电脑网卡MAC地址的程序,比如压缩包中的"K-MAC.exe"很可能就是这个工具的执行文件。这类工具通常具有用户友好的界面,允许用户选择网卡并输入新的MAC地址,点击一键修改即可...

    获取硬盘、主板、CPU、网卡MAC地址等硬件序列号信息的c++/vc6.0GetHDSerial源码

    在这个项目"获取硬盘、主板、CPU、网卡MAC地址等硬件序列号信息的c++/vc6.0 GetHDSerial源码"中,开发者使用了C++和VC6.0(Visual C++ 6.0)编译器,提供了一套完整的源代码解决方案,用于获取计算机硬件的关键识别...

    修改网卡地址的工具

    这类工具允许用户无需物理更换网卡就能更改其MAC地址,以适应不同的网络环境。 在使用"K-MAC.exe"这样的工具前,首先需要了解几个基本概念: 1. **虚拟MAC地址**:通过软件修改的MAC地址,通常用于临时替代真实MAC...

    k-mac 好用的无线网卡mac地址修改工具

    无线网卡是电脑连接无线网络的硬件设备,其MAC地址在默认情况下是固定的。在某些情况下,用户可能需要更改MAC地址,比如模拟其他设备的身份以规避限制,或者在共享网络资源时避免冲突。k-mac工具就是为了解决这类...

    一件获取本机IP、主机名、和Mac地址小工具

    “获取本机信息.exe”这个小工具,正如其名,提供了简单快捷的方式来查看电脑的IP、主机名和MAC地址。在日常维护或问题排查中,这样的工具非常实用。只需运行这个程序,用户就可以直观地看到本机的网络配置信息,...

    获取电脑硬件的详细信息,与注册有关,物理地址,序列号

    在IT领域,获取电脑硬件的详细信息是常见的需求,这些信息在软件注册、系统安全、设备管理和资产管理等方面都起着至关重要的作用。本篇将详细解释如何获取标题和描述中提及的关键信息,以及它们在实际应用中的价值。...

    获取电脑的基本系统信息的工具

    总的来说,"获取电脑的基本系统信息的工具"是一个利用.NET Framework的Windows Forms技术,通过调用操作系统API和管理类,获取并展示系统硬件和软件信息的应用。这样的工具在日常维护、故障排查和性能监控等方面都有...

    提取网卡ID驱动注册表工具

    一旦运行,该程序可能会列出系统中所有网卡的ID、驱动程序版本、物理地址(MAC地址)等关键信息。 总的来说,这个工具对于系统管理员、IT专业人员以及需要深入理解电脑网络连接的用户来说非常有价值。它可以帮助...

    基于C#查找电脑上物理以太网卡虚拟以太网卡无线网卡和虚拟无线网卡DEMO源代码.rar

    本示例着重于使用C#查找电脑上的物理以太网卡、虚拟以太网卡、无线网卡以及虚拟无线网卡。 C#是一种广泛应用于Windows平台的面向对象的编程语言,它提供了丰富的类库来处理系统层面的任务。在Windows系统中,我们...

    计算机硬件信息获取工具

    6. **网络设备信息**:包括网卡型号、MAC地址等。 7. **系统信息**:操作系统版本、位数、安装日期等。 8. **其他设备信息**:如光驱、声卡、USB设备等的详细信息。 硬件信息获取工具.exe 这个文件很可能是一个执行...

    获取并修改IP地址、MAC地址

    MAC(Media Access Control)地址是网络设备的物理地址,如网卡的标识,通常为48位二进制,以十六进制表示,如00:11:22:33:44:55。MAC地址在硬件层面上分配,对于局域网内的设备通信至关重要。 在编程中,获取和...

    获取计算机信息

    3. **MAC地址**:MAC(Media Access Control)地址是网络设备的物理地址,每个网卡都有唯一的一个。获取MAC地址可以用来识别网络设备,通常使用命令行工具如`ipconfig /all`(Windows)或`ifconfig`(Linux/Mac)。 ...

    MAC物理地址查看器

    "MAC物理地址查看器"是一个简化这一过程的实用工具,它提供了一个直观且便捷的方式来获取电脑的MAC地址。 这款应用的运行方式非常简单,你只需将下载的压缩包解压,然后找到并双击名为"MAC.exe"的可执行文件。执行...

    c#获取计算机名、IP地址/mac方法源码

    获取MAC地址需要用到`System.Net.NetworkInformation`命名空间中的`NetworkInterface`类: ```csharp using System; using System.Net.NetworkInformation; class Program { static void Main() { foreach ...

    取本机MAC和IP

    标题中的“取本机MAC和IP”指的是在编程中获取计算机的物理地址(MAC地址)和网络中的IP地址。在编程领域,这是网络通信的基本需求,用于设备标识和网络定位。 MAC地址,全称为Media Access Control Address,是...

Global site tag (gtag.js) - Google Analytics