文档章节

java获取Mac地址

wersdffg
 wersdffg
发布于 2015/05/14 11:12
字数 513
阅读 145
收藏 4

以下是源码:

package test; 
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.IOException; 
importjava.io.InputStream; 
importjava.io.InputStreamReader; 
importjava.io.LineNumberReader; 
importjava.util.Date; 
publicclass Test {
    public static String getMACAddressWithCMD() {
    String mac = null;
    try {
        Date date1 = new Date();
        Process pro = Runtime.getRuntime().exec("cmd.exe /c ipconfig/all");
        InputStream is = pro.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is,
            "UTF-8"));
        String message = br.readLine();
        int index = -1;
        while (message != null) {
        if ((index = message.indexOf("Physical Address")) > 0) {
            mac = message.substring(index + 36).trim();
            break;
        }
        message = br.readLine();
    }
        br.close();
        pro.destroy();
        Date date2 = new Date();
        System.out.println("getMACAddressWithCMD:" + (date2.getTime()-date1.getTime()) + "ms");
    } catch (IOException e) {
        System.out.println("Can't get mac address!");
        return null;
    }
        return mac;
    }
    public static String getMACAddressWithIP(String ip) {
        String str = "";
        String macAddress = "";
        try {
            Date date1 = new Date();
            String scancmd = "C:\\Windows\\system32\\nbtstat.exe -A ";// 32位系统
            File file = new File("C:\\Windows\\SysWOW64");
            // 64位系统
            if (file.exists()) {
            scancmd = "C:\\Windows\\sysnative\\nbtstat.exe -A ";
        }
        Process p = Runtime.getRuntime().exec(scancmd + ip);
        InputStreamReader ir = new InputStreamReader(p.getInputStream());
        LineNumberReader input = new LineNumberReader(ir);
        for (int i = 1; i < 100; i++) {
            str = input.readLine();
            if (str != null) {
                if (str.indexOf("MAC Address") > 1) {
                    macAddress = str.substring(
                    str.indexOf("MAC Address") + 14, str.length());
                    break;
                }
            }
    }
    Date date2 = new Date();
    System.out.println("getMACAddressWithIP:" + (date2.getTime()-date1.getTime()) + "ms");
    } catch (IOException e) {
        e.printStackTrace(System.out);
    }
        return macAddress;
    }
    public static void main(String[] args) {
        System.out.println("MAC Address:" + getMACAddressWithIP("192.168.0.124"));
        System.out.println("MAC Address:" + getMACAddressWithCMD());
    }
}

getMACAddressWithCMD执行速度较快,getMACAddressWithIP慢很多。

sysnative 的作用

其实%WINDIR%\SysNative文件夹是不存在的,它只是64位Windows系统提供的一种重定向机制。我们已经知道64位Windows通过System32和SysWoW64两件文件夹来区分64位和32位的系统文件,当32位的应用程序尝试访问System32文件夹的时候,系统会自动把它转到SysWoW64文件夹,这样32位应用程序在32位系统和64位系统就都可以运行了,(而不需要为了64位系统而把System32改成SysWoW64)。这样就出现了一个问题,32位的应用程序怎么访问真正的System32文件夹呢,即存放64位系统文件的文件夹?答案就是通过SysNative文件夹。这个文件夹并不存在,即在资源管理器中找不到,但当32位的应用程序尝试访问这个文件夹时,64位的Windows会把它重定向到真正的System32文件夹,从而提供了一种让32位应用程序访问64位系统文件的方法。具体细节请参考MSDN。

© 著作权归作者所有

wersdffg
粉丝 13
博文 86
码字总数 32304
作品 0
厦门
程序员
私信 提问
java 在局域网中 获取 路由器的 mac 地址

现在 有一个 问题,办公室 是处在一个 小小的 局域网的,本人的 ip 192.168.0.48,现在想在java程序中(不是java也可以,主要是因为java socket 很好用)获取 路由器的 MAC 地址。 但是现在没有...

xianwu13
2013/01/10
2.6K
4
open jdk 各版本源码及下载地址

java 8 源代码地址:http://jdk.java.net/8/ windows 下载地址: http://download.java.net/java/jdk8u162/archive/b01/binaries/jdk-8u162-ea-bin-b01-windows-i586-04oct2017.exe http://d......

Ryan-瑞恩
2017/11/10
152
0
win7 下安装java软件如何做

目前客户要用一个需求,多台客户端机器,每隔几分钟就要往一台服务器发送本机的IP和mac地址,小弟仅会点java,不知道如何用java做一个程序,在win7上可以双击打开执行,至于如何获取发送这个...

java小愤青
2014/04/18
608
3
Ubuntu 18.04.1 搭建Java环境和HelloWorld

一、搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择相应的版本,点击jdk,进入下...

王磊的博客
2018/08/24
0
0
Oracle 发布紧急 Java 更新,修复关键漏洞

日前,Oracle发布了紧急Java安全更新,修复了一个关键漏洞(CVE-2016-0636,CNNVD-201603-377)。 漏洞简介 Oracle之所以如此迅速地做出回应,是因为该漏洞能轻易被利用,并且该漏洞的利用细...

oschina
2016/03/26
3.9K
12

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部