首页
论坛
图书
开发资料
在线文档
网址
下载
联系我们
 新闻│Java│JavaScript│Eclipse│Eclipse 英文│J2EE│J2ME│J2SE│JSP│Netbeans│Hibernate│JBuilder│Spring│Struts
站内搜索: 请输入搜索关键词

当前页面: 开发资料首页 → Java 专题 → Java通过命令行取得MAC地址

Java通过命令行取得MAC地址

摘要: Java通过命令行取得MAC地址

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="322" height="86" align="center" valign="top"> </td> <td width="362" valign="top">
上次在CSDN社区里有人问用Java取得MAC地址,用JNI 肯定可以实现,但是麻烦的多,取命令行的输出应该会方便点,虽然都破坏了Java的跨平台性,不过这也是没办法的事。

下面这段小程序在Windows 2000上能运行通过(应该在win9x, xp ,2003上也可以)没有试过,而且有多个网卡的情况没有考虑,这里只是把所有的网卡MAC地址罗列出来,按照这个思路,在Linux平台上,作个判断,取"ifconfig"命令的输出同样可以取得网卡MAC地址。


</td> </tr> <tr> <td height="20" colspan="2">

import java.io.*;

public class Cmdoutput{

public static void main(String[] args){

try{
Process process = Runtime.getRuntime().exec ("ipconfig /all");
InputStreamReader ir=new InputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader (ir);
String line;
while ((line = input.readLine ()) != null)
if( line.indexOf("Physical Address")>0 ) {
String MACAddr = line.substring(line.indexOf("-")-2);
System.out.println("MAC address = ["+ MACAddr + "]");
}
}catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
}
}

}

程序运行结果:

C:\java>java Cmdoutput
MAC address = [00-40-CA-BF-85-D5]

C:\java>

下面这个例子使用了J2SE5.0的ProcessBuilder类执行外部的程序,相对于 Runtime.exec ,它更方便,
可以设置环境变量等。这里使用它在windows下读取物理网卡的地址:

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

public class ProcessBuilderShow

{

    public static List  getPhysicalAddress()

    {

        Process p = null;

        //物理网卡列表

        List  address = new ArrayList ();

        try

        {

            //执行ipconfig /all命令

            p = new ProcessBuilder("ipconfig", "/all").start();

        }

        catch (IOException e)

        {

            return  address;

        }

        byte[] b = new byte[1024];

        StringBuffer sb = new StringBuffer();

        //读取进程输出值

        InputStream in = p.getInputStream();

        try

        {

            while (in.read(b)>0)

            {

                sb.append(new String(b));

            }

        }

        catch (IOException e1)

        {

        }

        finally

        {

            try

            {

                in.close();

            }

            catch (IOException e2)

            {

            }

        }

        //以下分析输出值,得到物理网卡

        String rtValue = sb.substring(0);

        int i = rtValue.indexOf("Physical Address. . . . . . . . . :");

        while(i>0)

        {

            rtValue = rtValue.substring(i + "Physical Address. . . . . . . . . :".length());

            address.add(rtValue.substring(0,18));

            i = rtValue.indexOf("Physical Address. . . . . . . . . :");

        }

        

        return address;

        

    }

    public static void main(String[] args)

    {

        List  address = ProcessBuilderShow.getPhysicalAddress();

        for(String add:address)

        {

            System.out.printf("物理网卡地址:%s%n", add);

        }

    }

}

程序运行结果:  

C:\java>java ProcessBuilderShow
物理网卡地址: 00-40-CA-BF-85-D5

C:\java>


</td> </tr> </table>


function TempSave(ElementID) { CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value); CommentsPersistDiv.save("CommentXMLStore"); } function Restore(ElementID) { CommentsPersistDiv.load("CommentXMLStore"); document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent"); } </td> </tr> <tr>


↑返回目录
前一篇: Java基本功----Reference
后一篇: 深入理解Java对象实例生成的例子

首页 | 全站 Sitemap | 联系我们 | 设为首页 | 收藏本站
版权所有 Copyright © 2006-2007, Java 编程资料牛鼻站, All rights reserved