本站首页    管理页面    写新日志    退出


天堂之光 人间希望

你我共同品味

JAVA的浓香.

Linux的清芬.

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


我的分类(专题)

日志更新

最新评论

留言板

链接

联系我

msn:zhanglincon@hotmail.com


Blog信息
blog名称:
日志总数:99
评论数量:281
留言数量:4
访问次数:809457
建立时间:2005年11月17日




[JAVA Servlet]JAVA得到网卡物理地址(windows和Linux)
文章收藏,  软件技术

zhanglincon 发表于 2008/2/12 0:54:04

 在我们在写程序的过程中,有些时候需要知道一些电脑的硬件信息,比如我们写一些需要注册的程序的时候,就需要得到某个电脑特定的信息,一般来说,网卡的物理地址是不会重复的,我们正好可以用它来做为我们识别一台电脑的标志.那如何得到网卡的物理地址呢?我们可以借助于ProcessBuilder这个类,这个类是JDK1.5新加的,以前也可以用Runtime.exce这个类.在此我们将演示一下如何在Windows和Linux环境下得到网卡的物理地址.代码如下: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->/* * Test.java * * Created on 2007-9-27, 9:11:15 * * To change this template, choose Tools | Templates * and open the template in the editor. */package test2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Properties;import java.util.logging.Level;import java.util.logging.Logger;/** * * @author hadeslee */public class Test {    public static String getMACAddress() {        String address = "";        String os = System.getProperty("os.name");        System.out.println(os);        if (os != null) {            if (os.startsWith("Windows")) {                try {                    ProcessBuilder pb = new ProcessBuilder("ipconfig", "/all");                    Process p = pb.start();                    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));                    String line;                    while ((line = br.readLine()) != null) {                        if (line.indexOf("Physical Address") != -1) {                            int index = line.indexOf(":");                            address = line.substring(index + 1);                            break;                        }                    }                    br.close();                    return address.trim();                } catch (IOException e) {                                    }            }else if(os.startsWith("Linux")){                try {                    ProcessBuilder pb = new ProcessBuilder("ifconfig");                    Process p = pb.start();                    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));                    String line;                    while((line=br.readLine())!=null){                        int index=line.indexOf("硬件地址");                        if(index!=-1){                            address=line.substring(index+4);                            break;                        }                    }                    br.close();                    return address.trim();                } catch (IOException ex) {                    Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);                }                            }        }        return address;    }    public static void main(String[] args) {        System.out.println("" + Test.getMACAddress());    }} 我们可以看一下1.5新增的ProcessBuilder这个类,这个类比起以前用Runtime.exec来说,要强大一些,它可以指定一个环境 变量,并指定程序运行时的目录空间,并且也可以得到程序运行时的环境变量.因为ipconfig这个命令已经是system32里面的,所以不需要我们另外再设环境变量或者指定程序的运行时目录空间.我们直接用就可以了,然后得到进程的输出流,就可以分析出我们所需要的东西了.是不是挺简单的呢:)此程序可以得到windows下和Linux下的网卡地址,不过LINUX要是中文版的,英文版的也一样,只不过把字替换一下就可以了。这样我们的程序就有了两个平台的实现。


阅读全文(3557) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.223 second(s), page refreshed 144773359 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号