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程序设计有所帮助。