Java 服务器获取客户端IP

今天做了一个在线投票的项目,具体需求如下

1.不需要用户体系

2.打开网页就可以投票

3.每人每天只可以投1票

根据以上需求,不同客户端只能用ip来区分,便顺便研究了一下java 服务器端获取客户端ip的方式,废话不多说,直接上代码

/**
* 获取客户端IP地址
*
* @param request
* @return
*/
public static String getIPAddr(HttpServletRequest request) {

  String ip = request.getHeader("x-forwarded-for");
  if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
    ip = ip.split(",")[0];
  }
  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;

}

但是由于公网ip有限,大多数的电脑都是通过代理服务器来上网的,这就导致了局域网内的所有电脑对外的ip是一致的

为了解决这个问题,可以使局域网内的电脑都可以进行投票(否则的话,其中一台投票完毕后,其他电脑就不可以再进行投票操作了),又在ip的后面加了端口来区分局域网内的不同电脑

int port = request.getRemotePort();

但是经过测试发现,投票页面刷新后,port大部分时候也是会发生改变的,所以尝试失败了!

虽然有些瑕疵,但是我这个假处女座的人还是能接受的,哈哈

希望能帮到需要的你,也希望有识之士能帮我解决那个瑕疵,欢迎下方评论留言哦

原文地址:https://www.cnblogs.com/Mr-10/p/10907670.html

时间: 2024-08-30 00:47:34

Java 服务器获取客户端IP的相关文章

C#服务器获取客户端IP地址以及归属地探秘

背景:博主本是一位Windows桌面应用程序开发工程师,对网络通信一知半解.一日老婆逛完某宝,问:"为什么他们知道我的地址呢,他们是怎么获取我的地址的呢?" 顺着这个问题我们的探秘开始: 第一步:简单的服务搭建 思路,通过HttpListener在本地搭建一个简易的服务器,开发程序为控制台接口,核心类 HttpListenerService: 方法 Start()开启线程池针对指定IP进行监听,本地的端口选取的9527(周星驰唐伯虎点秋香在华府的编号)  public void Sta

Delphi2010中采用DataSnap的三层网络架构服务器获取客户端ip,端口信息

需要的控件 首先要有 TDSServerModule. TDSServer.TDSTCPServerTransport; TDSServerClass.TDataModule;实现上述功能主要控件如下图所示 包含的单元包括 SysUtils, Classes, DSTCPServerTransport, DSHTTPCommon, DSHTTP, DSServer, DSCommonServer, Provider, IdBaseComponent, IdComponent, IdTCPConn

Java服务器获取客户端的ip

原文:http://www.open-open.com/code/view/1454133120089 /** * 获取登录用户IP地址 * * @param request * @return */ public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() ==

java获取客户端IP和服务器IP

一.Java获取服务器IP(转自:https://www.cnblogs.com/george93/p/6306579.html) //方法一,也是最简单的一种. String SERVER_IP = InetAddress.getLocalHost().getHostAdress().toString(); //方法二: /** * 获取服务器IP地址 * @return */ @SuppressWarnings("unchecked") public static String g

java 服务器获取请求的IP方法之总结

项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没有问题,但是部署以后发现存在问题,一直鉴权不通过,一群人抓瞎. 我找到那块的代码,跟了一遍流程发现逻辑没有啥问题,但是最终的结果却还是鉴权不通过,实在有些诡异.其基本逻辑为先取得配置的IP列表,然后通过request.getRemoteAddr()取得客户端的IP地址,做鉴权和校验,逻辑没问题,那么肯定是request.getRemoteAddr()出了问题,google下,发现有人遇到类似的问题. 最终定位为request.getR

java获取客户端IP地址和MAC地址

最近项目中要获得客户端的mac地址.服务端是移植的centos系统,arm架构的盒子.客户端是手机和移动设备.(其它场景应该也是类似的) 首先要获得ip地址: 根据客户端的http请求,利用request.getRemoteAddr()获取客户端Ip地址.在局域网内getRemoteAddr()和getRemoteHost()获得的结果相同.request.getRemoteAddr()是获得客户端的ip地址 .getRemoteHost()是获得客户端的主机名 .在有些场景中,可能有Squid

Java正确获取客户端真实IP方法整理

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了. 如果使用了反向代理软件,将http://192.168.1.110:2046/的URL反向代理为http://www.abc.com/的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP

Java Web 获取客户端真实IP

Java Web 获取客户端真实IP 发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限定的时候,需要首先获取该真实的IP.一般分为两种情况: 方式一.客户端未经过代理,直接访问服务器端(nginx,squid,haproxy): 方式二.客户端通过多级代理,最终到达服务器端(nginx,squid,haproxy): 客户端请求信息都包含在HttpServletRequest中,可以通过方法getRemoteAddr()获得该客户端IP.此

PHP获取客户端IP地址,服务器IP地址

============================================获取客户端IP==============================================public static function getClientIp() { if (getenv('HTTP_CLIENT_IP')) { $client_ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) {