import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("ip:" + getIp());
}
/**
* 根据网卡取本机配置的IP --jdk1.4
* 如果是双网卡的,则取出外网IP
* WAS所在的机器IP
* @return
*/
public static String getIp(){
String localip=null;//本地IP,如果没有配置外网IP则返回它
String netip=null;//外网IP
try {
Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
boolean finded=false;//是否找到外网IP
while(netInterfaces.hasMoreElements() && !finded){
NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();
Enumeration address=ni.getInetAddresses();
while(address.hasMoreElements()){
ip=(InetAddress)address.nextElement();
System.out.println(ni.getName() +";"+ip.getHostAddress() +";ip.isSiteLocalAddress()="+ip.isSiteLocalAddress()+";ip.isLoopbackAddress()="+ip.isLoopbackAddress());
if( !ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":")==-1){//外网IP
netip=ip.getHostAddress();
finded=true;
break;
}else if(ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":")==-1){//内网IP
localip=ip.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
if(netip!=null && !"".equals(netip)){
return netip;
}else{
return localip;
}
}
/**
* 根据网卡取本机配置的IP --jdk1.5
* 如果是双网卡的,则取出外网IP
* WAS所在的机器IP
* @return
*/ /*
public static String getIp(){
String localip=null;//本地IP,如果没有配置外网IP则返回它
String netip=null;//外网IP
try {
Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
boolean finded=false;//是否找到外网IP
while(netInterfaces.hasMoreElements() && !finded){
NetworkInterface ni=netInterfaces.nextElement();
Enumeration<InetAddress> address=ni.getInetAddresses();
while(address.hasMoreElements()){
ip=address.nextElement();
System.out.println(ni.getName() +";"+ip.getHostAddress() +";ip.isSiteLocalAddress()="+ip.isSiteLocalAddress()+";ip.isLoopbackAddress()="+ip.isLoopbackAddress());
if( !ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":")==-1){//外网IP
netip=ip.getHostAddress();
finded=true;
break;
}else if(ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":")==-1){//内网IP
localip=ip.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
if(netip!=null && !"".equals(netip)){
return netip;
}else{
return localip;
}
}
*/
/**
* 客户端IP
* @param request
* @return
*/ public static String getClientIpAddr(HttpServletRequest request) {
String ipAddress = null;
//ipAddress = this.getRequest().getRemoteAddr();
ipAddress = request.getHeader("x-forwarded-for");
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if(ipAddress.equals("127.0.0.1")){
//根据网卡取本机配置的IP
InetAddress inet=null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress= inet.getHostAddress();
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
if(ipAddress.indexOf(",")>0){
ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
}
}
return ipAddress;
}
}