package com.hundsun.jresplus.common.util;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 获得本服务器名称,ip的工具类
*
* @author LeoHu copy by sagahl copy by fish
*
*/
public class HostUtil {
private static final Logger logger = LoggerFactory
.getLogger(HostUtil.class);
private static final HostInfo hostInfo = new HostInfo();
private static final Ipv4Info ipv4Info = new Ipv4Info();
public static final HostInfo getHostInfo() {
return hostInfo;
}
public static final Ipv4Info getIpv4Info() {
return ipv4Info;
}
public static final class HostInfo {
private final String HOST_NAME;
private final String HOST_ADDRESS;
private HostInfo() {
String hostName;
String hostAddress;
try {
InetAddress localhost = InetAddress.getLocalHost();
hostName = localhost.getHostName();
hostAddress = localhost.getHostAddress();
} catch (UnknownHostException e) {
logger.error("error then get host info", e);
hostName = "localhost";
hostAddress = "127.0.0.1";
}
HOST_NAME = hostName;
HOST_ADDRESS = hostAddress;
}
public final String getName() {
return HOST_NAME;
}
public final String getAddress() {
return HOST_ADDRESS;
}
}
public static final class Ipv4Info {
private final Set<String> address;
private Ipv4Info() {
Set<String> as = new LinkedHashSet<String>();
try {
for (Enumeration<NetworkInterface> netInterfaces = NetworkInterface
.getNetworkInterfaces(); netInterfaces
.hasMoreElements();) {
NetworkInterface ni = (NetworkInterface) netInterfaces
.nextElement();
for (Enumeration<InetAddress> en = ni.getInetAddresses(); en
.hasMoreElements();) {
InetAddress ip = en.nextElement();
if (!ip.isLoopbackAddress()
&& (ip instanceof Inet4Address)) {
as.add(ip.getHostAddress());
}
}
}
} catch (SocketException e) {
logger.error("error then getNetworkInterfaces.", e);
}
address = Collections.unmodifiableSet(as);
}
/**
* 得到本机配置的所有ipv4地址
*
* @return
*/
public final Collection<String> getAddress() {
return address;
}
/**
* 得到ipv4地址中的第一个
*
* @return
*/
public final String getFristAddress() {
if (address.isEmpty()) {
return null;
}
return address.iterator().next();
}
/**
* 判断是否本服务器的ip
*
* @param ip
* @return
*/
public final boolean isMyAddress(String ip) {
return this.address.contains(ip);
}
}
}