java编程实现获取服务器IP地址及MAC地址的方法
本文实例讲述了java编程实现获取服务器IP地址及MAC地址的方法。分享给大家供大家参考,具体如下:
已测系统:
windowslinuxunix
排除127.0.0.1和0.0.0.0.1等非正常IP
importjava.net.InetAddress; importjava.net.NetworkInterface; importjava.net.SocketException; importjava.util.ArrayList; importjava.util.Enumeration; importjava.util.List; publicclassIpUtil{ privateIpUtil(){} /** *此方法描述的是:获得服务器的IP地址 *@author:zhangyang33@sinopharm.com *@version:2014年9月5日下午4:57:15 */ publicstaticStringgetLocalIP(){ StringsIP=""; InetAddressip=null; try{ booleanbFindIP=false; Enumeration<NetworkInterface>netInterfaces=(Enumeration<NetworkInterface>)NetworkInterface .getNetworkInterfaces(); while(netInterfaces.hasMoreElements()){ if(bFindIP){ break; } NetworkInterfaceni=(NetworkInterface)netInterfaces .nextElement(); Enumeration<InetAddress>ips=ni.getInetAddresses(); while(ips.hasMoreElements()){ ip=(InetAddress)ips.nextElement(); if(!ip.isLoopbackAddress() &&ip.getHostAddress().matches( "(\\d{1,3}\\.){3}\\d{1,3}")){ bFindIP=true; break; } } } }catch(Exceptione){ OutUtil.error(IpUtil.class,e.getMessage()); } if(null!=ip){ sIP=ip.getHostAddress(); } returnsIP; } /** *此方法描述的是:获得服务器的IP地址(多网卡) *@author:zhangyang33@sinopharm.com *@version:2014年9月5日下午4:57:15 */ publicstaticList<String>getLocalIPS(){ InetAddressip=null; List<String>ipList=newArrayList<String>(); try{ Enumeration<NetworkInterface>netInterfaces=(Enumeration<NetworkInterface>)NetworkInterface .getNetworkInterfaces(); while(netInterfaces.hasMoreElements()){ NetworkInterfaceni=(NetworkInterface)netInterfaces .nextElement(); Enumeration<InetAddress>ips=ni.getInetAddresses(); while(ips.hasMoreElements()){ ip=(InetAddress)ips.nextElement(); if(!ip.isLoopbackAddress() &&ip.getHostAddress().matches( "(\\d{1,3}\\.){3}\\d{1,3}")){ ipList.add(ip.getHostAddress()); } } } }catch(Exceptione){ OutUtil.error(IpUtil.class,e.getMessage()); } returnipList; } /** *此方法描述的是:获得服务器的MAC地址 *@author:zhangyang33@sinopharm.com *@version:2014年9月5日下午1:27:25 */ publicstaticStringgetMacId(){ StringmacId=""; InetAddressip=null; NetworkInterfaceni=null; try{ booleanbFindIP=false; Enumeration<NetworkInterface>netInterfaces=(Enumeration<NetworkInterface>)NetworkInterface .getNetworkInterfaces(); while(netInterfaces.hasMoreElements()){ if(bFindIP){ break; } ni=(NetworkInterface)netInterfaces .nextElement(); //----------特定情况,可以考虑用ni.getName判断 //遍历所有ip Enumeration<InetAddress>ips=ni.getInetAddresses(); while(ips.hasMoreElements()){ ip=(InetAddress)ips.nextElement(); if(!ip.isLoopbackAddress()//非127.0.0.1 &&ip.getHostAddress().matches( "(\\d{1,3}\\.){3}\\d{1,3}")){ bFindIP=true; break; } } } }catch(Exceptione){ OutUtil.error(IpUtil.class,e.getMessage()); } if(null!=ip){ try{ macId=getMacFromBytes(ni.getHardwareAddress()); }catch(SocketExceptione){ OutUtil.error(IpUtil.class,e.getMessage()); } } returnmacId; } /** *此方法描述的是:获得服务器的MAC地址(多网卡) *@author:zhangyang33@sinopharm.com *@version:2014年9月5日下午1:27:25 */ publicstaticList<String>getMacIds(){ InetAddressip=null; NetworkInterfaceni=null; List<String>macList=newArrayList<String>(); try{ Enumeration<NetworkInterface>netInterfaces=(Enumeration<NetworkInterface>)NetworkInterface .getNetworkInterfaces(); while(netInterfaces.hasMoreElements()){ ni=(NetworkInterface)netInterfaces .nextElement(); //----------特定情况,可以考虑用ni.getName判断 //遍历所有ip Enumeration<InetAddress>ips=ni.getInetAddresses(); while(ips.hasMoreElements()){ ip=(InetAddress)ips.nextElement(); if(!ip.isLoopbackAddress()//非127.0.0.1 &&ip.getHostAddress().matches( "(\\d{1,3}\\.){3}\\d{1,3}")){ macList.add(getMacFromBytes(ni.getHardwareAddress())); } } } }catch(Exceptione){ OutUtil.error(IpUtil.class,e.getMessage()); } returnmacList; } privatestaticStringgetMacFromBytes(byte[]bytes){ StringBuffermac=newStringBuffer(); bytecurrentByte; booleanfirst=false; for(byteb:bytes){ if(first){ mac.append("-"); } currentByte=(byte)((b&240)>>4); mac.append(Integer.toHexString(currentByte)); currentByte=(byte)(b&15); mac.append(Integer.toHexString(currentByte)); first=true; } returnmac.toString().toUpperCase(); } }
希望本文所述对大家Java程序设计有所帮助。