posts - 0, comments - 77, trackbacks - 0, articles - 356
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

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

Posted on 2007-09-27 14:34 semovy 阅读(302) 评论(0)  编辑  收藏 所属分类: JAVA应用
在我们在写程序的过程中,有些时候需要知道一些电脑的硬件信息,比如我们写一些需要注册的程序的时候,就需要得到某个电脑特定的信息,一般来说,网卡的物理地址是不会重复的,我们正好可以用它来做为我们识别一台电脑的标志.那如何得到网卡的物理地址呢?我们可以借助于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要是中文版的,英文版的也一样,只不过把字替换一下就可以了。这样我们的程序就有了两个平台的实现。

只有注册用户登录后才能发表评论。


网站导航: