|
天堂之光 人间希望
你我共同品味
JAVA的浓香.
Linux的清芬. |
« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
链接 |
联系我
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要是中文版的,英文版的也一样,只不过把字替换一下就可以了。这样我们的程序就有了两个平台的实现。 |
|
|