为了项目的安全,有时候需要得到电脑的唯一码,比如:网卡的mac地址。和大家分享一下,下面是项目中用到的工具类:/**
*获取Mac地址
*@return
*/
publicStringgetMAC(){
try{
InetAddressia=InetAddress.getLocalHost();
byte[]mac=NetworkInterface.getByInetAddress(ia).getHardwareAddress();
//System.out.println("mac数组长度:"+mac.length);
StringBuffersb=newStringBuffer("");
for(inti=0;i
if(i!=0){
sb.append("-");
}
//字节转换为整数
inttemp=mac[i]&0xff;
Stringstr=Integer.toHexString(temp);
if(str.length()==1){
sb.append("0"+str);
}else{
sb.append(str);
}
}
StringmacStr=sb.toString().toUpperCase();
returnmacStr;
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
当然除了上面的简单方法还有如下网友提供的方法可以尝试importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
.InetAddress;
workInterface;
publicclassMacAddressAPI{
/**
*获取当前操作系统名称.return操作系统名称例如:windowsxp,linux等.
*/
publicstaticStringgetOSName(){
returnSystem.getProperty("os.name").toLowerCase();
}
/**
*获取unix网卡的mac地址.非windows的系统默认调用本方法获取.如果有特殊系统请继续扩充新的取mac地址方法.
*@returnmac地址
*/
publicstaticStringgetUnixMACAddress(){
Stringmac=null;
BufferedReaderbufferedReader=null;
Processprocess=null;
try{
//linux下的命令,一般取eth0作为本地主网卡
process=Runtime.getRuntime().exec("ifconfigeth0");
//显示信息中包含有mac地址信息
bufferedReader=newBufferedReader(newInputStreamReader(process.getInputStream()));
Stringline=null;
intindex=-1;
while((line=bufferedReader.readLine())!=null){
//寻找标示字符串[hwaddr]
index=line.toLowerCase().indexOf("hwaddr");
if(index>=0){//找到了
//取出mac地址并去除2边空格
mac=line.substring(index+"hwaddr".length()+1).trim();
break;
}
}
}catch(IOExceptione){
System.out.println("unix/linux方式未获取到网卡地址");
}finally{
try{
if(bufferedReader!=null){
bufferedReader.close();
}
}catch(IOExceptione1){
e1.printStackTrace();
}
bufferedReader=null;
process=null;
}
returnmac;
}
/**
*获取widnows网卡的mac地址.
*@returnmac地址
*/
publicstaticStringgetWindowsMACAddress(){
Stringmac=null;
BufferedReaderbufferedReader=null;
Processprocess=null;
try{
//windows下的命令,显示信息中包含有mac地址信息
process=Runtime.getRuntime().exec("ipconfig/all");
bufferedReader=newBufferedReader(newInputStreamReader(process.getInputStream()));
Stringline=null;
intindex=-1;
while((line=bufferedReader.readLine())!=null){
//寻找标示字符串[physical
index=line.toLowerCase().indexOf("physicaladdress");
if(index>=0){//找到了
index=line.indexOf(":");//寻找":"的位置
if(index>=0){
//取出mac地址并去除2边空格
mac=line.substring(index+1).trim();
}
break;
}
}
}catch(IOExceptione){
System.out.println("widnows方式未获取到网卡地址");
}finally{
try{
if(bufferedReader!=null){
bufferedReader.close();
}
}catch(IOExceptione1){
e1.printStackTrace();
}
bufferedReader=null;
process=null;
}
returnmac;
}
/**
*windows7专用获取MAC地址
*@return
*@throwsException
*/
publicstaticStringgetWindows7MACAddress(){
StringBuffersb=newStringBuffer();
try{
//获取本地IP对象
InetAddressia=InetAddress.getLocalHost();
//获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
byte[]mac=NetworkInterface.getByInetAddress(ia).getHardwareAddress();
//下面代码是把mac地址拼装成String
for(inti=0;i
//mac[i]&0xFF是为了把byte转化为正整数
Strings=Integer.toHexString(mac[i]&0xFF);
sb.append(s.length()==1?0+s:s);
}
}catch(Exceptionex){
System.out.println("windows7方式未获取到网卡地址");
}
returnsb.toString();
}
/**
*获取MAC地址
*@paramargc运行参数.
*@throwsException
*/
publicstaticStringgetMACAddress(){
//windows
Stringmac=getWindowsMACAddress();
//windows7
if(isNull(mac)){
mac=getWindows7MACAddress();
}
//unix
if(isNull(mac)){
mac=getUnixMACAddress();
}
if(!isNull(mac)){
mac=mac.replace("-","");
}else{
mac="ABCDEFGHIJ";
}
returnmac;
}
publicstaticbooleanisNull(ObjectstrData){
if(strData==null||String.valueOf(strData).trim().equals("")){
returntrue;
}
returnfalse;
}
publicstaticvoidmain(String[]args){
System.out.println("当前操作系统:"+getOSName());
System.out.println(getWindows7MACAddress());
System.out.println(getMACAddress());
System.out.println(getWindowsMACAddress());
System.out.println(getUnixMACAddress());
}
}