您的位置:首页 > 理论基础

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

2008-05-23 02:38 495 查看
google_ad_client = "pub-8800625213955058";

/* 336x280, 创建于 07-11-21 */

google_ad_slot = "0989131976";

google_ad_width = 336;

google_ad_height = 280;

//

网卡物理地址在全球是唯一不重复的,所以有时我们需要得到一个计算机的网卡物理地址来确认用户身份,下面我编写了一个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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: