JAVA得到网卡物理地址(windows和Linux)

在我们在写程序的过程中,有些时候需要知道一些电脑的硬件信息,比如我们写一些需要注册的程序的时候,就需要得到某个电脑特定的信息,一般来说,网卡的物理地址是不会重复的,我们正好可以用它来做为我们识别一台电脑的标志.那如何得到网卡的物理地址呢?我们可以借助于ProcessBuilder这个类,这个类是JDK1.5新加的,以前也可以用Runtime.exce这个类.在此我们将演示一下如何在Windows和Linux环境下得到网卡的物理地址.

代码如下:

/*
 * 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要是中文版的,英文版的也一样,只不过把字替换一下就可以了。这样我们的程序就有了两个平台的实现。

原文:http://www.blogjava.net/hadeslee/archive/2007/09/27/148504.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值