首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

jsp 中怎么取得客户端真实ip地址

2012-01-21 
jsp 中如何取得客户端真实ip地址jsp中如何取得客户端真实ip地址如果是局域网中的客户端则得到网关ip[解决

jsp 中如何取得客户端真实ip地址
jsp   中如何取得客户端真实ip地址
如果是局域网中的客户端则得到网关ip

[解决办法]
req.getRemoteHost()

[解决办法]
学习
[解决办法]
期待達人
[解决办法]
你只能获取到最后一次路由的IP~如果有人用代理访问你的JSP你是没办法获得他真实的IP的,只能获得代理的IP~
[解决办法]
jpcap
[解决办法]
req.getRemoteHost() 怎么可能获得局域网呢?你放到公网上试试看

而且jsp也只能搞到这个了,说到底原理也过是http协议还是基于TCP的,TCP则可以获取客户端IP而已。你说的ip.cn可能自己搞个数据库,去搜索对应的ISP而已。
[解决办法]
中间用apache了吗?
如果用了请获取这两个参试试

out.print( "your ip: " +request.getRemoteAddr());
out.print( "your ip: " +request.getHeader( "x-forwarded-for "));
[解决办法]
沒有辦法的
[解决办法]
如果是客户端获取自己的地址
可以用location.host
[解决办法]
楼主,如果你在局域网内,http://ip.cn显示的是你的代理的ip地址。我试过,我用了一个印度的代理,结果显示我是来自印度,这个ip就是印度那个代理的ip。
没有办法获得用户真正的ip地址,除非:
你在你的客户写特殊代码获取了用户机器的ip发送回去。
[解决办法]
取http://ip138.com的首頁文字信息,上面有你的IP地址,可以解析出來。
[解决办法]
request.getRemoteAddr()

通过这个方法可以得到
[解决办法]
不可能的,这个request.getRemoteAddr()一定行,我在用的
[解决办法]
<%@ page contentType= "text/html; charset=GBK " %>


<%

String clientIP = " ";

try {

java.net.NetworkInterface iface = null;
StringBuffer sb = new StringBuffer( " ");
for (java.util.Enumeration ifaces = java.net.NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); ) {
System.out.print( "进入循环\n ");
iface = (java.net.NetworkInterface) ifaces.nextElement();
java.net.InetAddress ia = null;
for (java.util.Enumeration ips = iface.getInetAddresses(); ips.hasMoreElements(); ) {
System.out.print( "进入子循环\n ");
ia = (java.net.InetAddress) ips.nextElement();
sb.append(ia.getHostAddress()+ ": ");
}
}
System.out.print( "马上输出\n ");
clientIP = sb.toString();
System.out.println( " "+clientIP+ " \n ");
String s[]=clientIP.split( ": ");
if(s.length> 1)
out.print(s[s.length-1].toString());
else
out.print(s[0].toString());
String s1=s[0];
out.print( " <br> "+s1+ " <br> ");
}
catch (Exception e)
{
e.printStackTrace();
}

%>

支持代理。
[解决办法]
request.getRemoteAddr()
[解决办法]


上面的语句没一个可行的,不信你去试
原因很简单:
第一:如果客户端是使用代理上网,只能获取其代理IP
第二:如果用户是使用ADSL拨号上网,只能获取其拨号的临时IP(内网IP无法获取,比如192.168.1.55之类的)
第三:如果使用路由上的,也不能获取其内网IP,只能获取做路由的一个公网IP

我不清楚你要的是什么IP地址,但是有一点可以确认,你不能获取他的内网IP地址,除了他是用拨号上网的PC机之外的IP有用,其他的IP你获取了也没有意义。

建议看看网络协议。。。
目前IP6段的快出来了,不知道那时候会不会能获取其IP。
[解决办法]
根本搞不清楼主想要什么

> 目前IP6段的快出来了,不知道那时候会不会能获取其IP。

IPv6出来了,也没办法达到楼主的要求。反正楼主就是想和http://ip.cn一样的效果,那就直接用这个网站的功能得了。用ajax让客户端访问http://ip.cn,并把结果偷下来

function getIP() {
var xhr = new ActiveXObject( "Microsoft.XMLHTTP ");
xhr.open( "POST ", "http://ip.cn ", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
var html = xhr.responseText;
var regex = new RegExp( "\ "ip\\.php\\?q=(\\d+\\.\\d+\\.\\d+\\.\\d+)\ " ");
var m = regex.exec(html);
var ip = m[1];
alert( "您的IP是: "+ip);
}
};
xhr.send();
}
[解决办法]
import java.io.*;

public class Test1 {
public static void main(String[] args) {
try {
Process process = Runtime.getRuntime().exec( "ipconfig /all ");
InputStreamReader ir = new InputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
while ((line = input.readLine()) != null)
if (line.indexOf( "IP Address ") > 0) {
String IPAddress = line.substring(line.indexOf( "- ") - 2);//得到IP地址
System.out.println( "IPAddress = [ " + IPAddress + "] ");
}
if (line.indexOf( "DHCP Server ") > 0) {
String DHCPServer= line.substring(line.indexOf( "- ") - 2);//得到网关IP
System.out.println( "DHCPServer= [ " + DHCPServer+ "] ");
}
} catch (java.io.IOException e) {
System.err.println( "IOException " + e.getMessage());
}
}
}
这样就行了,这个JAVA文件你先在CMD下命令看是不是可以得到IP
String IPAddress = line.substring(line.indexOf( "- ") - 2);这里你位置你自己调正一下,可能不是 "-2 ",还有是用在网页上要把System.out.println( "DHCPServer= [ " + DHCPServer+ "] ");改为RETURN才行
[解决办法]
<%
String realIP=request.getHeader( "x-forwarded-for ");
if (realIP !=null&&realIP.length() !=0){
while((realIP!=null)&&(realIP.equals( "unknown "))){
realIP = request.getHeader( "x-forwarded-for ");
}
}
if(realIP == null || realIP.length() == 0){
realIP = request.getHeader( "Proxy-Client-IP ");
}
if(realIP == null || realIP.length() == 0){
realIP = request.getHeader( "WL-Proxy-Client-IP ");
}
if(realIP==null || realIP.length() == 0){
realIP=request.getRemoteAddr();
}
out.print(realIP);
%>

热点排行