精华内容
下载资源
问答
  • * 获取请求的客户端IP 地址。若应用服务器前端配有反向代理的 Web 服务器, 需要在 Web 服务器中将客户端原始请求的 IP 地址加入到 * HTTP header 中。 详见 {@link ServletUtil#PROXY_REMOTE_IP_ADDRESS} * ...

    /**
    * <p>
    * Web 服务器反向代理中用于存放客户端原始 IP 地址的 Http header 名字,若新增其他的需要修改其中的值。
    * </p>
    */
    private final static String[] PROXY_REMOTE_IP_ADDRESS = {
    "X-Forwarded-For", "X-Real-IP" };


    /**
    * <p>
    * 获取请求的客户端的 IP 地址。若应用服务器前端配有反向代理的 Web 服务器, 需要在 Web 服务器中将客户端原始请求的 IP 地址加入到
    * HTTP header 中。 详见 {@link ServletUtil#PROXY_REMOTE_IP_ADDRESS}
    * </p>

    * @param request
    * @return

    * @author Macro
    */
    public static String getRemoteIp(HttpServletRequest request) {
    for (int i = 0; i < PROXY_REMOTE_IP_ADDRESS.length; i++) {
    String ip = request.getHeader(PROXY_REMOTE_IP_ADDRESS[i]);
    if (!StringUtils.isBlank(ip)) {
    return getRemoteIpFromForward(ip);
    }
    }
    return request.getRemoteHost();
    }


    /**
    * <p>
    * 从 HTTP Header 的 X-Forward-IP 头中截取客户端连接 IP 地址。如果经过多次反向代理, 在 X-Forward-IP
    * 中获得的是以“,&lt;SP&gt;”分隔 IP 地址链,第一段为客户端 IP 地址。
    * </p>

    * @param xforwardIp
    * @return

    * @author Macro
    * @since 2011-8-11 09:20:13
    */
    private static String getRemoteIpFromForward(String xforwardIp) {
    int commaOffset = xforwardIp.indexOf(',');
    if (commaOffset < 0) {
    return xforwardIp;
    }
    return xforwardIp.substring(0, commaOffset);
    }



    展开全文
  • 服务器获取客户端IP客户端IP变化

    千次阅读 2017-02-24 11:53:56
    1.服务端获取客户端请求的IP等信息request = javax.servlet.http.HttpServletRequest request.getRemoteAddr() 获取客户端请求IP地址 request.getRemotePort() 获取客户端请求端口 request.getRemoteHost() ...

    1.服务端获取客户端请求的IP等信息request = javax.servlet.http.HttpServletRequest

    request.getRemoteAddr() 获取客户端请求IP地址

    request.getRemotePort() 获取客户端请求端口

    request.getRemoteHost() 获取客户端请求的合法名称

    request.getRemoteUser()   a String specifying the login of the user making this request, or null if the user login is not known

    request.getUserPrincipal()   a java.security.Principal containing the name of the user making this request; null if the user has not been authenticated
    request.getCharacterEncoding()  获取字符编码


    2.手机每连一次4G,IP及端口都会对应变更一次


    3.具有固定IP的局域网通过路由器可设置对外网的访问路径及端口。路由器上设置对外的端口PORT,再映射到局域网内某台电脑A及该台电脑的某个端口A_port,那么外网访问该固定IP+对外PORT时,即可访问到A的A_port路径上。

    展开全文
  • package test; import javax.annotation.Resource;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.xml.ws.WebServiceContext;import javax.xml.ws.handler.M

     package test;

     

    import javax.annotation.Resource;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.xml.ws.WebServiceContext;
    import javax.xml.ws.handler.MessageContext;

     

    @javax.jws.WebService(targetNamespace = "http://test/", serviceName = "WebServiceTestService", portName = "WebServiceTestPort", wsdlLocation = "WEB-INF/wsdl/WebServiceTestService.wsdl")
    public class WebServiceTestDelegate {

     

     test.WebServiceTest webServiceTest = new test.WebServiceTest();


     @Resource
     private WebServiceContext wsContext;

     

     public String getServiceStr(String str) {
      MessageContext mc = wsContext.getMessageContext();
      ServletContext servlet = (ServletContext)(mc.get(mc.SERVLET_CONTEXT));
      HttpServletRequest  request  =  (HttpServletRequest)(mc.get(mc.SERVLET_REQUEST));
      String remortAddress = request.getRemoteAddr();
      System.out.println(remortAddress);
      return webServiceTest.getServiceStr(str);
     }

    }

    展开全文
  • 外界流传JAVA/PHP服务器获取客户端IP都是这么取: 伪代码: 1)ip = request.getHeader("X-FORWARDED-FOR ") 2)如果该值为空或数组长度为0或等于"unknown",那么: ip = request.getHeader("Proxy-Client-IP...

    外界流传的JAVA/PHP服务器端获取客户端IP都是这么取的:
    伪代码:
    1)ip = request.getHeader("X-FORWARDED-FOR ")
    2)如果该值为空或数组长度为0或等于"unknown",那么:
    ip = request.getHeader("Proxy-Client-IP")
    3)如果该值为空或数组长度为0或等于"unknown",那么:
    ip = request.getHeader("WL-Proxy-Client-IP")
    4)如果该值为空或数组长度为0或等于"unknown",那么:
    ip = request.getHeader("HTTP_CLIENT_IP")

    5)如果该值为空或数组长度为0或等于"unknown",那么:

    ip = request.getHeader("X-Real-IP")

    6)如果该值为空或数组长度为0或等于"unknown",那么:

    ip = request.getRemoteAddr ()

    先说说这些请求头的意思

    X-Forwarded-For

    这是一个 Squid 开发的字段,只有在通过了 HTTP 代理或者负载均衡服务器时才会添加该项。格式为X-Forwarded-For: client1, proxy1, proxy2,一般情况下,第一个ip为客户端真实ip,后面的为经过的代理服务器ip。现在大部分的代理都会加上这个请求头

    Proxy-Client-IP/WL- Proxy-Client-IP

    这个一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头,而WL- Proxy-Client-IP是他的weblogic插件加上的头

    HTTP_CLIENT_IP

    有些代理服务器会加上此请求头

    X-Real-IP

    nginx代理一般会加上此请求头。

     

    有几点要注意

    1、这些请求头都不是http协议里的标准请求头,也就是说这个是各个代理服务器自己规定的表示客户端地址的请求头。如果哪天有一个代理服务器软件用oooo-client-ip这个请求头代表客户端请求,那上面的代码就不行了。

    2、这些请求头不是代理服务器一定会带上的,网络上的很多匿名代理就没有这些请求头,所以获取到的客户端ip不一定是真实的客户端ip。代理服务器一般都可以自定义请求头设置。

    3、即使请求经过的代理都会按自己的规范附上代理请求头,上面的代码也不能确保获得的一定是客户端ip。不同的网络架构,判断请求头的顺序是不一样的。

    4、最重要的一点,请求头都是可以伪造的。如果一些对客户端校验较严格的应用(比如投票)要获取客户端ip,应该直接使用ip = request.getRemoteAddr (),虽然获取到的可能是代理的ip而不是客户端的ip,但这个获取到的ip基本上是不可能伪造的,也就杜绝了刷票的可能。(有分析说arp欺骗+syn有可能伪造此ip,如果真的可以,这是所有基于TCP协议都存在的漏洞),这个ip是tcp连接里的ip。

     

     

     

     

    request方法客户端IP: request.getRemoteAddr()  输出:192.168.0.106
    客户端主机名:request.getRemoteHost()输出:abc
    request.getHeader("Host") 输出:192.168.0.1:8080
    Web服务器名字:request.getServerName()输出:192.168.0.1
    服务器监听的端口:request.getServerPort()输出:8080

     

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。
    但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。
    如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP。
    经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。
    但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪 原有的客户端IP地址和原来客户端请求的服务器地址。
    当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp 文件,而是先由代理服务器去访问index.jsp ,
    代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,
    所以index.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
    于是可得出获得客户端真实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) { 
    
    可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,
    究竟哪个才是真正的用户端的真实IP呢?答案是取 X-Forwarded-For中第一个非unknown的有效IP字符串。
    如: X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100 用户真实IP为: 192.168.1.110

     

    复制代码

    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;
    } 
    展开全文
  • 当需要能感知到服务请求来源去满足一些业务需求时,就需要后端服务能准确获取到请求客户端的真实源 IP, 比如以下场景:对服务请求的来源有做审计的需求,如异地登陆告警。针对安全攻击或安全事件溯源需求,如 APT ...
  • 用request.getRemoteAddr();...经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端IP服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的H...
  • 业务场景在实际工作中服务器间转发请求的场景很常见,例如:你的站点部署在A服务器上,而流量是通过B服务器转发过来的,那么php如何获取客户端ip呢?直接上代码public function getClientId() { $clientIps = $_...
  • ​ 服务端在接收客户端请求的时候,为了保证系统的安全性,一般在服务端需要进行签名认证或者是对客户端ip进行访问控制,那么进行 ip 控制时,我们首先需要获取客户端请求的真实 ip 地址; 情况1:客户端未经过任何...
  • node.js 服务器获取客户端ip的方法

    千次阅读 2018-06-19 17:37:02
    获取发送AJAX请求的客户端ip:server = http.createServer(function(req, res) { var ip = req.headers['x-forwarded-for'] || req.ip || req.connection.remoteAddress || req.socket.remoteAddress || req....
  • nginx做反向负载均衡后端服务器获取真实客户端IPNginx代理站点配置nginx会在把请求转向后台real-server前把http报头中ip地址进行替换.
  • Java服务器端获取客户端...在程序使用HttpServletRequest 获取请求头中携带ip的参数取获取IP地址,主要参数有一下; "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_X_FORWARDED_FOR", "HTTP
  • java服务器获取客户端IP地址

    千次阅读 2015-08-28 09:13:41
    在开发工作中,我们常常需要获取...原因:由于在客户端和服务之间增加了中间代理,因此服务器无法直接拿到客户端IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。 现在图示代理上网和IP的关系:  第一种情况
  • 客户端通过nginx代理访问后端jetty服务器时,后端服务器收到的请求信息中只有nginx代理的IP信息,无法看到client真实IP, 所以nginx需要获取客户端请求真实IP地址进行传递,网上查资料一般配置如下: ...
  • 通过负载设备后,TongWeb上的应用通过request.getRemoteAddr()方式得到的是负载设备的IP,而得不到真实的客户端IP。 解决办法: 经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到...
  • //根据request获取外网ip private static String ... //x-forwarded-for:代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP代理或者负载均衡服务器时才会添加该项 String ip = request.getHeader("...
  • /** ... * @return 请求IP地址 */ public static String getIp(HttpServletRequest request) { // String ip = null; // ip = request.getHeader("X-Forwarded-For"); i...
  • 除了获取服务器自己的IP,可能还是会需要获取到访问这个服务器的IP信息,记录一下请求都是谁来了。这时候需要使用到 ServerWebExchange.getRequest()..getRemoteAddress();然后在这个里面一通操作能拿到些请求发起方...
  • 当我们使用了nginx来转发客户端的请求以后,tomcat是无法正确获取客户端的ip地址,而是获取到配置了nginx那台服务器的ip地址。因为tomcat所接收到的请求是通过nginx发出来(nginx代替客户端发了请求)。 ...
  • Java获取客户端IP

    2020-12-22 19:02:49
     原因:由于在客户端和服务之间增加了中间代理,因此服务器无法直接拿到客户端IP服务器端应用也无法直接通过转发请求的地址返回给客户端。  现在图示代理上网和IP的关系:  第一种情况:不通过代理上网,...
  • 服务端获取客户端请求IP地址,常见的包括:x-...remote_addr:指的是当前直接请求的客户端IP地址,它存在于tcp请求体中,是http协议传输的时候自动添加,不受请求头header的控制。因此,当客户端与服务器之间...
  • 一般在单机版的tomcat获取请求来源的ip,可以使用下面方式这么干。 String remoteAddr = request.getRemoteAddr(); 但是如果了使用反向代理例如niginx,由于对客户请求的代理,此时request.getRemoteAddr()获取要么...
  • 后端在提交留言时候,添加了一个切面,用于判断限制次数,其中有获取客户端的真实ip的方法 public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for...
  • 获取客户端IP获取公网IP、验证IP是否内网1、获取客户端IP在开发工作中,我们常常需要获取客户端IP。一般获取客户端IP地址方法是:request.getRemoteAddr();但是在通过了Apache,Squid等反向代理软件就不能获取...
  • Java 获取客户端ip地址

    2019-05-02 22:54:13
    客户端所有的请求信息都可以通过HttpServletRequest获得,获取客户端ip可以通过getRemoteAddr()获取。 但是如果客户端是通过代理访问我们的服务器,那么getRemoteAddr()获取ip就很有可能不是真实ip,这时候...
  • java 获取客户端IP

    2016-11-30 13:37:38
    Java获取客户端IP 在开发工作中,我们常常需要获取客户端IP。一般获取客户端IP地址方法是:request.getRemoteAddr();但是在通过了Apache,Squid等反向代理软件就不能获取到客户端真实IP地址了。 原因:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,123
精华内容 449
关键字:

服务器获取请求的客户端ip