在项目中经常会遇到需要获取服务器的IP和本地IP,而我们大部分的服务器都配置在linux上,因此我们的代码必须要实现能够获取linux下服务器及本地ip
以下为我总结的代码:
//取得服务器Ip
public static String getSerIp(){
String clientIp ="";
// 根据网卡取本机配置的IP
Enumeration<NetworkInterface> allNetInterfaces; //定义网络接口枚举类
try {
allNetInterfaces = NetworkInterface.getNetworkInterfaces(); //获得网络接口
InetAddress ip = null; //声明一个InetAddress类型ip地址
while (allNetInterfaces.hasMoreElements()) //遍历所有的网络接口
{
NetworkInterface netInterface = allNetInterfaces.nextElement();
Enumeration<InetAddress> addresses = netInterface.getInetAddresses(); //同样再定义网络地址枚举类
while (addresses.hasMoreElements())
{
ip = addresses.nextElement();
if (ip != null && (ip instanceof Inet4Address)) //InetAddress类包括Inet4Address和Inet6Address
{
if(!ip.getHostAddress().equals("127.0.0.1")){
clientIp= ip.getHostAddress();
}
}
}
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return clientIp;
}
//获取客户端IP
public static String getClientIp() {
HttpServletRequest request = getHttpServletRequest();
String accessIP = request.getHeader("X-Forwarded-For");
if (accessIP == null || accessIP.length() == 0 || "unknown".equalsIgnoreCase(accessIP)) {
accessIP = request.getHeader("Proxy-Client-IP");
}
if (accessIP == null || accessIP.length() == 0 || "unknown".equalsIgnoreCase(accessIP)) {
accessIP = request.getHeader("WL-Proxy-Client-IP");
}
if (accessIP == null || accessIP.length() == 0 || "unknown".equalsIgnoreCase(accessIP)) {
accessIP = request.getRemoteAddr();
}
if (accessIP == null || accessIP.length() == 0 || "127.0.0.1".equalsIgnoreCase(accessIP)) {
try {
accessIP = InetAddress.getLocalHost().getHostAddress();
} catch (Exception e) {
accessIP = "";
}
}
return accessIP;
}