日期:2014-05-17  浏览次数:20776 次

比如我写了一个servlet,别人调用的时候,我能否获得他的IP?
在servlet里我该怎么获得别人在调用我的servlet和自己调用的IP地址?

我做的是一个增加功能,需要获得别人在别人的电脑上的IP.

没分了,帮帮忙!






------解决方案--------------------
request.getRemoteAddr() 获取客户端ip;
request.getRemotePort() 获取客户端ip;
request.getLocalAddr() 获取服务端ip;
request.getLocalPort()获取服务端端口.

------解决方案--------------------
/**
* 从request中取得本次请求客户端IP地址.
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
  
String[] ips = request.getHeader("x-forwarded-for").split(",");
String ip = "";
  
if(ips != null || ips.length != 0){ //如果有多个x-forward-for,第一个为Unkown的对IP为客户端IP
for(int i =0;i<ips.length;i++){
if(!ips[i].equalsIgnoreCase("unknown")){
ip = ips[i];
break;
}
}
}
  
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;



------解决方案--------------------
不一定能,因为对方可能通过代理或路由转发的,那么你得到的就是路由或代理的地址了。
------解决方案--------------------
可定可以了。。
String ip = request.getRemoteAddr();
if ("127.0.0.1".equals(ip)) {
InetAddress addr;
addr = InetAddress.getLocalHost();
ip = addr.getHostAddress().toString();// 
}