服务器和客户端在同一局域网里,如何客户端的IP地址??? 如果用request.getRemoteAddr()获取的话,获取的客户端IP都是同一个地址,应该是路由器的IP地址。请问如何可以获取到客户端在局域网里面的IP地址呢??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 2008-04-02 16:59最近做一个安全系统,需要对用户的 ip 和 mac 地址进行验证,这里用到获取客户端ip和mac地址的两个方法,留存。1.获取客户端ip地址( 这个必须从客户端传到后台): jsp页面下,很简单,request.getRemoteAddr() ; 因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换 public String getMyIP() { try { FacesContext fc = FacesContext.getCurrentInstance(); HttpServletRequest request = (HttpServletRequest)fc.getExternalContext().getRequest(); return request.getRemoteAddr(); } catch (Exception e) { e.printStackTrace(); } return ""; }2.获取客户端mac地址 调用window的命令,在后台Bean里实现 通过ip来获取mac地址。方法如下: public String getMACAddress(String ip){ String str = ""; String macAddress = ""; try { Process p = Runtime.getRuntime().exec("nbtstat -A " + ip); InputStreamReader ir = new InputStreamReader(p.getInputStream()); LineNumberReader input = new LineNumberReader(ir); for (int i = 1; i < 100; i++) { str = input.readLine(); if (str != null) { if (str.indexOf("MAC Address") > 1) { macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length()); break; } } } } catch (IOException e) { e.printStackTrace(System.out); } return macAddress; 不可能 假如你局域网下面有两台机器一台的ip地址是: 192.168.1.100 这台作为服务器部署你的应用程序然后另外一台: 192.168.1.101 去访问这个服务器部署的应用 服务端获取到的IP肯定是 192.168.1.101你自己本地用localhost访问时测试不出来效果的。 request.getServerName()==Server Namerequest.getServerPort()==Server Portrequest.getRemoteAddr()==Remote Addrrequest.getRemoteHost()==Remote Host 这样说的话,那么用request.getRemoteAddr()同样是可以获取同一局域网里客户端的IP地址了吗??? 但是,现在我在自己的机子上部署程序,同一局域网里面的机器访问我的程序的话,都是一样的IP。 自己本地用localhost访问的话,ip是127.0.0.1 http://training.tsinghua.edu.cn/html/jishuyuandi/2009/0302/48.html这篇文章适合你,看看吧。 ipAddress = request.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(); } //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 if(ipAddress.indexOf(",")>0){ ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); } } 菜鸟求指教第二弹。。 mysql驱动包问题。 生成两个properties文件 刚写个简单的servlet,怎么tomcat启动就出错 如何在jsp 页面上让焦点停在link上? 请教关于servlet里的filter的问题 哪里有<<查看铁路,航空时刻表>>的源码下载的???求哥们帮个忙....我这儿很急.... 再问关于sql数据库连接的问题:为什么会出现下面错误?郁闷 新手问题:JAVA类库中都有哪些类,类都有哪些属性和方法? 一个具有挑战性的问题,非高手莫入 struts1封装表单 造成中文乱码 过滤器解决 如何获取网络下载文件大小、下载时间?
jsp页面下,很简单,request.getRemoteAddr() ;
因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换
public String getMyIP() {
try {
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)fc.getExternalContext().getRequest();
return request.getRemoteAddr();
}
catch (Exception e) {
e.printStackTrace();
}
return "";
}2.获取客户端mac地址
调用window的命令,在后台Bean里实现 通过ip来获取mac地址。方法如下: public String getMACAddress(String ip){
String str = "";
String macAddress = "";
try {
Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
InputStreamReader ir = new InputStreamReader(p.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
for (int i = 1; i < 100; i++) {
str = input.readLine();
if (str != null) {
if (str.indexOf("MAC Address") > 1) {
macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length());
break;
}
}
}
} catch (IOException e) {
e.printStackTrace(System.out);
}
return macAddress;
request.getServerPort()==Server Port
request.getRemoteAddr()==Remote Addr
request.getRemoteHost()==Remote Host
这篇文章适合你,看看吧。
ipAddress = request.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();
} //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
if(ipAddress.indexOf(",")>0){
ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
}
}