用java得到w2k计算机上的网卡物理地址

网卡物理地址在全球是唯一不重复的,所以有时我们需要得到一个计算机的网卡物理地址来确认用户身份,下面我编写了一个GetPhysicalAddress类来获得当前计算机的网卡物理地址,此方法只能获取win2k系统的网卡物理地址 ,不能用于其他操作系统。 众所周知,在win2k下的shell环境里,我们可以使用ipconfig/all命令查看当前网卡配置情况,其中有一项是网卡的物理地址。例如在DOS环境中输入 ipconfig/all命令,结果如下:


        Host Name . . . . . . . . . . . . : mars
        Primary DNS Suffix  . . . . . . . :
        Node Type . . . . . . . . . . . . : Hybrid
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No
        DNS Suffix Search List. . . . . . : worksoft.com.cn

PPP adapter 263:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : WAN (PPP/SLIP) I
        Physical Address. . . . . . . . . : 00-53-45-00-00-0
        DHCP Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 61.135.2.27
        Subnet Mask . . . . . . . . . . . : 255.255.255.255
        Default Gateway . . . . . . . . . : 61.135.2.27
        DNS Servers . . . . . . . . . . . : 202.106.196.152
                                            202.106.196.115

加粗部分是网卡的物理地址 我们只要在java中执行这个外部命令,然后把需要的字符串解析出来就可以得到当前机器的物理网卡地址了。 首先编写一个Util_syscmd类,方法execute()使我们能够执行外部命令,并返回一个Vector类型的结果集。

import java.lang.*;
import java.io.*;
import java.util.*;

/**
 * @author	Jackliu
 * 	
 */
public class Util_syscmd{

	/**
	 * @param	shellCommand
	 * 	
	 */
	public Vector execute(String shellCommand){
		try{
			Start(shellCommand);
			Vector vResult=new Vector();
			DataInputStream in=new DataInputStream(p.getInputStream());
			BufferedReader reader=new BufferedReader(new 

InputStreamReader(in));

			String line;
			do{
				line=reader.readLine();
				if (line==null){
					break;
				}
				else{
					vResult.addElement(line);
				}
			}while(true);
			reader.close();
			return vResult;

		}catch(Exception e){
			//error
			return null;
		}
	}
	/**
	 * @param	shellCommand
	 * 	
	 */
	public void Start(String shellCommand){
		try{
			if(p!=null){
				kill();
			}
			Runtime sys= Runtime.getRuntime();
			p=sys.exec(shellCommand);
		}catch(Exception e){
			System.out.println(e.toString());
		}
	}
	/**
		kill this process
	*/
	public void kill(){
		if(p!=null){
			p.destroy();
			p=null;
		}
	}
	
	Process p;
}


然后设计一个GetPhysicalAddress类,这个类用来调用Util_syscmd类的execute()方法,执行cmd.exe/c ipconfig/all命令,并解析出网卡物理ip地址。getPhysicalAddress()方法返回网卡的物理地址,如果机器中没有安装网卡或操作系统不支持ipconfig命令,返回not find字符串

import java.io.*;
import java.util.*;

class GetPhysicalAddress{
        //网卡物理地址长度
        static private final int _physicalLength =16;
        
        public static void main(String[] args){               
                //output you computer phycail ip address
                System.out.println(getPhysicalAddress());
        }
        
        static public String getPhysicalAddress(){
                Util_syscmd shell =new Util_syscmd();
                String cmd = "cmd.exe /c ipconfig/all";
                Vector result ;
                result=shell.execute(cmd);  
                return parseCmd(result.toString());      
        }
        
        //从字符串中解析出所需要获得的字符串
        static private String parseCmd(String s){
                String find="Physical Address. . . . . . . . . :";
                int findIndex=s.indexOf(find);
                if (findIndex==-1)
                        return "not find";
                else
                        return 

s.substring(findIndex+find.length()+1,findIndex+find.length()+1+_physicalLength);
                
                
        }
}
<淘宝热门商品:
 

¥:338.00 

【澳钻/Swarovski/手机钻/美甲钻/婚沙礼服钻】专卖店

【五钻信誉】Swarovski々豪华水晶甲々1200颗338元[包快递]

 

36.9元  

◢◤80工厂◥◣-亚洲最大最全(B2C)创意家居礼品购物网


来源:程序员网

小小豆叮

0 Responses to "用java得到w2k计算机上的网卡物理地址"

发表评论