对于在jsp得到客户端的ip地址有下面的方法
1.<input type="hidden" id="jiqiIP" name="jiqiIP"value="<%=request.getRemoteAddr()%>"/>
同样分情况,本机访问的时候,value是127.0.0.1同在局域网里的其他机器的value是他们机器的ip,外网的也是他们机器的ip,不是客户端公网ip地址,这个没法得到客户端公网的ip
2.<script language="JavaScript" src="http://www.hashemian.com/js/visitorIP.js.php"></script>这一段,可以得到客户端的公网ip地址,只是我没有用这个方法得公网ip我用的是上面的java方法
3.<iframe src="http://www.ip138.com/ip2city.asp"id="frame1"></iframe>用这个iframe也可以得到客户端公网ip,但是IE却很难得到iframe里面的值,不论是控制iframe还是用ajax访问那个url路径都不能得到,因为IE会报错说拒绝访问,最主要的原因是你跨域了(从网上找到的:如果可以跨的话,你不是可以随便修改别人网站的内容了吗?比如你在iframe里加载了百度,你又能通过js控制它,这不是为黑客提供了便利的途径吗),因此无法得到ip,当你不跨域的时候是可以的,如下
myiframe.contentWindow.document.body.innerHTML方式直接通过iframe的id引用,只有IE系列浏览器支持,在其它标准浏览器中无效。
火狐还支持这种方法得到iframe的值,但是IE不支持contentDocument
<html>
<head>
<script type="text/javascript">
function getText(){
varx=document.getElementByIdx_x_x_x_x("frame1").contentDocument;
alert(x.getElementsByTagName_r("h3")[0].childNodes[0].nodeValue);
}
</script>
</head>
<body>
<iframe src="http://www.ip138.com/ip2city.asp"id="frame1"></iframe>
<br /><br/>
<input type="button" οnclick="getText()" value="Gettext" />
</body>
</html>
下面还有一个类可以得到服务器所在的公网ip
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExternalIpAddressFetcher {
//外网IP提供者的网址
privateString externalIpProviderUrl;
//本机外网IP地址
privateString myExternalIpAddress;
publicExternalIpAddressFetcher(String externalIpProviderUrl) {
this.externalIpProviderUrl = externalIpProviderUrl;
String returnedhtml =fetchExternalIpProviderHTML(externalIpProviderUrl);
parse(returnedhtml);
}
privateString fetchExternalIpProviderHTML(String externalIpProviderUrl){
// 输入流
InputStream in = null;
// 到外网提供者的Http连接
HttpURLConnection httpConn = null;
try {
// 打开连接
URL url = new URL(externalIpProviderUrl);
httpConn = (HttpURLConnection)url.openConnection();
// 连接设置
HttpURLConnection.setFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
// 获取连接的输入流
in = httpConn.getInputStream();
byte[] bytes=new byte[1024];// 此大小可根据实际情况调整
// 读取到数组中
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=in.read(bytes, offset,bytes.length-offset)) >= 0) {
offset += numRead;
}
//将字节转化为为UTF-8的字符串
String receivedString=newString(bytes,"UTF-8");
// 返回
return receivedString;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
httpConn.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 出现异常则返回空
return null;
}
private voidparse(String html){
Pattern pattern=Pattern.compile("(\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})",Pattern.CASE_INSENSITIVE);
Matchermatcher=pattern.matcher(html);
while(matcher.find()){
myExternalIpAddress=matcher.group(0);
}
}
publicString getMyExternalIpAddress() {
return myExternalIpAddress;
}
publicstatic void main(String[] args){
ExternalIpAddressFetcher fetcher=newExternalIpAddressFetcher("http://checkip.dyndns.org/");
System.out.println(fetcher.getMyExternalIpAddress());
}
}
使用的时候
ExternalIpAddressFetcher fetcher=newExternalIpAddressFetcher("http://checkip.dyndns.org/");
System.out.println(fetcher.getMyExternalIpAddress());
fetcher.方法名即可,但是这个类 如果你在后台(服务器端)调用这个方法的话,得到的是服务器的公网ip
就这些吧 希望可以帮助到需要帮助的