java如何获取用户真实的ip

来源:互联网 发布:淘宝怎么用支付宝 编辑:程序博客网 时间:2024/05/21 15:38
百度上有两种方法

第一种

public static String getRemortIP(HttpServletRequest request) { 

if (request.getHeader("x-forwarded-for") == null) { 

return request.getRemoteAddr(); 


return request.getHeader("x-forwarded-for"); 



第二种
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");

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();
}
if (ip.equals("0:0:0:0:0:0:0:1")) {
ip = "本地";
}
return ip;
}
我想问一下是不是两种都可以。请说明可以的方式的具体这样写的原因。

还有网上还有一些说如果有代理,就怎样怎样,是什么意思?
收起
lzb1096101803 | 浏览 6460 次
推荐于2016-01-13 04:05:12最佳答案

  1、如果服务器如果没有采用反向代理,而且客户端没有用正向代理的话,那么可以获取客户端的真实IP地址request.getRemoteAddr()

  2、如果服务器如果没有采用反向代理,而且客户端有用正向代理的话,那么通过request.getRemoteAddr()获取客户端的IP地址是客户端 的代理服务器的地址,并不是客户端的真实地址,

  3、如果客户端使用的是多层代理的话,服务器获得的客户端地址是客户端的最外围代理服务器的地址如果服务器如果采用反向代理服务器,不管客户端采用的是何种方式访问服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {  
    if (request.getHeader("x-forwarded-for") == null) {  
        return request.getRemoteAddr();  
    }  
    return request.getHeader("x-forwarded-for");  
}  
//获得客户端真实IP地址的方法二:
public String getIpAddr(HttpServletRequest request) {  
    String ip = request.getHeader("x-forwarded-for");  
    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;  
}

其他回答

public String IP() throws IOException{
String IP=null;
URL url = new URL("http://iframe.ip138.com/ic.asp");
URLConnection conn = url.openConnection();
conn.setRequestProperty(
"User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15");
conn.setRequestProperty("Content-Type", "text/html");
conn.setRequestProperty("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,
"GB2312"));
String line = null;
while ((line = br.readLine()) != null) {
if (line.contains("您的IP是")) {
// System.out.println(line);
int start = line.indexOf('[') + 1;
int end = line.indexOf(']');
IP=line.substring(start, end);
}
}
br.close();
return IP;
}

抓取网路使用的IP
追问
什么来的?
追答
模拟上网讯号并抓取该网页所显示IP
追问
这个问题和我问的有关系吗?
追答
= ="你不是要知道IP??这个是抓到你真的使用来上网的IP,除非你使用的代理是直接使用模拟网路卡不然这个都会直接抓取到真实IP
原创粉丝点击