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

本文介绍了一种在Windows 2000系统下获取网卡物理地址的方法,通过执行ipconfig/all命令并解析输出结果来实现。提供了一个Java类GetPhysicalAddress,它依赖于Util_syscmd类执行系统命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 网卡物理地址在全球是唯一不重复的,所以有时我们需要得到一个计算机的网卡物理地址来确认用户身份,下面我编写了一个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);

                

                

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值