java获取客户端ip并且解决获取ip为0:0:0:0:0:0:0:1的问题

0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4来说相当于127.0.0.1,也就是本机

如果项目部署在本机win7系统,访问时是通过 localhost 来访问,

用java获取ip地址可能会出现该问题,这时获取的ip将是 0:0:0:0:0:0:0:1

 

要是机器在局域网中,访问时使用自己的ip访问,如 我的ip是 :192.168.123.156

访问url:http://192.168.123.156:8080/test

这时候请求会经过路由器转发,所以服务器获取的就是本机的局域网内ip,在java中获取的ip就是 192.168.123.156了

 

下面几个获取ip的方法:

public static String getIP(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (!checkIP(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (!checkIP(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (!checkIP(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
    private static boolean checkIP(String ip) {
        if (ip == null || ip.length() == 0 || "unkown".equalsIgnoreCase(ip)
                || ip.split(".").length != 4) {
            return false;
        }
        return true;
    }

X-Forwarded-For 用法以及原理

如果 X-Forwarded-For 获取不到,就去获取X-Real-IP ,X-Real-IP 获取不到,就依次获取Proxy-Client-IP 、WL-Proxy-Client-IP 、HTTP_CLIENT_IP 、 HTTP_X_FORWARDED_FOR 。最后获取不到才通过request.getRemoteAddr()获取IP,

X-Real-IP 就是记录请求的客户端真实IP。跟X-Forwarded-For 类似。

Proxy-Client-IP 顾名思义就是代理客户端的IP,如果客户端真实IP获取不到的时候,就只能获取代理客户端的IP了。

WL-Proxy-Client-IP 是在Weblogic下获取真实IP所用的的参数。

HTTP_CLIENT_IP 与 HTTP_X_FORWARDED_FOR 可以理解为X-Forwarded-For , 因为它们是PHP中的用法。

 

通过postman伪造X-Forwarded-For以及如何防范,包括上述图片来源,请参考博文:

https://segmentfault.com/a/1190000019197577

 

request.getRemoteAddr() 获取的值为0:0:0:0:0:0:0:1的原因及解决办法

最近在进行web开发时,在jsp页面获取服务器ip时,遇到了request.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1,这是为什么呢,照道理讲,应该是127.0.0.1才对,为什么这个获取的值变成了ipv6了呢,而且我发现这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现),后来上网查了查原因,原来是/etc/hosts这个东西作怪(在windows上应该是C:\Windows\System32\drivers\etc\hosts这个文件),只需要注释掉文件中的 # ::1 localhost 这一行即可解决问题。另外localhost这个文件很有用,这里你可以添加自己的条目,例如添加 192.168.0.212 myweb 这样子,在浏览器中原来只能使用192.168.0.212来访问的,并可以使用myweb来进行替换。

如果还不能解决,本机访问的时候用127.0.0.1或本机ip代替localhost即可解决

 

最后在上述代码块中,checkIP()方法中 有一个条件 ip.split(".").length != 4 本人尚未理解,本人理解的 应该把!= 改成==

如有大佬可以解释一下,万分感谢!!!
       

文中内容均参考自多个博客:

http://blog.csdn.net/leoz0802/article/details/6364565

https://www.iteye.com/blog/java161-1189279

https://segmentfault.com/a/1190000019197577

https://www.jb51.net/article/126931.htm

初—
关注 关注
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
request.getRemoteAddr()获取ip地址时得到的值是[0:0:0:0:0:0:0:1]原因和解决方法
liquid_road的博客
05-30 1560
项目场景: 使用request.getRemoteAddr()获取ip地址 问题描述: 在使用request.getRemoteAddr()获取ip地址的时候得到的值是[0:0:0:0:0:0:0:1] Request : {url='/1/haha', ip='[0:0:0:0:0:0:0:1]', classMethod='com.liquid.web.IndexController.index', args=[1, haha]} 原因分析: 0:0:0:0:0:0:0:1是属于ipv6,后来
获取登录IP为0:0:0:0:0:0:0:1的解决办法
aq9618154的博客
06-25 1313
jsp页面中用request.getRemoteAddr()获取IP地址竟然为0:0:0:0:0:0:0:1换台机器IP显示正常,这是为什么呢,照道理讲,应该是127.0.0.1才对,为什么这个获取的值变成了ipv6了呢,而且我发现这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现),后来上网查了查原因。 原来是/etc/hosts这个...
处理java获取ip为0:0:0:0:0:0:0:1的问题
weixin_30293079的博客
10-30 369
0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4来说相当于127.0.0.1,也就是本机 如果项目部署在本机win7系统,访问时是通过 localhost 来访问, 用java获取ip地址可能会出现该问题,这时获取ip将是 0:0:0:0:0:0:0:1 要是机器在局域网中,访问时使用自己的ip访问,如 我的ip是 :192.168.123.156 访问url:ht...
JAVA收到网络报文的IP是::1,怎么回事?
柳鲲鹏
07-09 607
  前几天调试摄像头,收发报文时,发现收到的IP是::1。真是大千世界无奇不有,这样怪的IP,也是第一次见到。怎么回事?   反复查了半天,最后发现,是在产生InetAddress的时候,传入的IP为空。这……还好没声张。...
获取IP为0.0.0.0.0.1的问题
qq_39529324的博客
10-18 395
https://www.cnblogs.com/rulasann/p/9442420.html
java获取接口访问ip(超简单版本)
不会编程的笨蛋的博客
09-27 2774
有时候我们写了一个数据接受接口,但是不能谁都可以访问啊,所以我们就需要获取访问的ip进行白名单设置判断。这里我们使用了 ServletUtil 工具类进行获取。工具方法,直接扔到对应的java文件里引用就可以。
Java中使用HttpRequest获取用户真实IP地址端口
qq_28342873的博客
11-13 1576
/** * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真 实IP地址, * * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢? * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 ...
JAVA如何获取客户端IP地址和MAC地址
08-29
JAVA获取客户端IP地址和MAC地址 在JAVA获取客户端IP地址和MAC地址是非常重要的,特别是在服务器端需要记录客户端的信息时。下面我们将详细介绍如何获取客户端IP地址和MAC地址。 一、获取客户端IP地址 在...
Java获取客户端真实IP地址过程解析
08-25
Java获取客户端真实IP地址过程解析 Java获取客户端真实IP地址过程解析是指在服务器端获取客户端的真实IP地址的过程。该过程是非常重要的,因为在业务背景下,服务器端需要进行签名验证、客户端IP限定等拦截,而获取...
Java根据Request获取客户端IP
08-30
Java根据Request获取客户端IP Java根据Request获取客户端IP是指在Java Web开发中获取客户端IP地址,以便进行相应的处理和分析。在JSP中,获取客户端IP地址的方法是使用request.getRemoteAddr(),这种方法在大部分...
Java面试之如何获取客户端真实IP
08-25
Java获取客户端真实IP Java面试中获取客户端真实IP是非常重要的一环,今天我们就来探讨如何在Java获取客户端的真实IP。 首先,我们需要了解为什么需要获取客户端的真实IP。在进行一些小游戏开发时,分享功能是一...
Java获取客户端IP及Mac地址(同网段).rar
11-26
在Controller类获取客户端IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取客户端的真实IP地址了。如果使用了反向代理软件,用...
解决java获取ip为0:0:0:0:0:0:0:1的问题
weixin_42421905的博客
01-10 757
此处获取ip是0:0:0:0:0:0:0:1,0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4来说相当于127.0.0.1,也就是本机。 并且这种情况一般出现在服务器和客户端是同一设备下,用localhost访问,只要我们将localhost改成127.0.0.1来进行访问就可以解决。 ...
获取请求方的IP获取的值为0:0:0:0:0:0:0:1的原因及解决办法
haoranhaoshi的博客
09-24 3020
import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; public class IpUtil { public static String getIpAddr(HttpServletRequest request) ...
ip为0:0:0:0:0:0:0:1的问题解决
Java&Develop的博客
05-04 592
ip为0:0:0:0:0:0:0:1的问题解决
使用Java获取发送请求的电脑的IP地址
热门推荐
inexaustible的博客
03-10 1万+
获取发送请求的电脑的IP地址,并返回 可在拦截其中使用 package com.lc.z.common.utils; import javax.servlet.http.HttpServletRequest; public class IpUtil { /** * 获取请求的ip */ public static String getRequestIp(HttpServletRequest request) { String ip = requ
request.getRemoteAddr() 获取的值为0:0:0:0:0:0:0:1的原因及解决办法
只作为个人备忘录
09-01 9402
request.getRemoteAddr() 获取的值为0:0:0:0:0:0:0:1的原因及解决办法 最近在进行web开发时,在jsp页面获取服务器ip时,遇到了request.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1,这是为什么呢,照道理讲,应该是127.0.0.1才对,为什么这个获取的值变成了ipv6了呢,而且我发现这种情况只有在服务器和客户端都在同一台
Java获取IP地址:request.getRemoteAddr()警惕
重生の记忆
11-05 2709
项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没有问题,但是部署以后发现存在问题,一直鉴权不通过,一群人抓瞎。   我找到那块的代码,跟了一遍流程发现逻辑没有啥问题,但是最终的结果却还是鉴权不通过,实在有些诡异。其基本逻辑为先取得配置的IP列表,然后通过request.getRemoteAddr()取得客户端IP地址,做鉴权和校验,逻辑没问题,那么肯定是request.getR...
html+css购物网页设计.zip 点击右上角按钮可实现页面跳转,
最新发布
06-21
html+css购物网页设计.zip 点击右上角按钮可实现页面跳转,及点击“今日推荐”里的图片可直接跳转到该官网,点击“…区”可呈现出相关按钮,style标签中时css部分,要求html与css分开显示可直接复制粘贴。
获取客户端地址一直都是0:0:0:0:0:0:0:1
07-25
获取客户端地址一直都是0:0:0:0:0:0:0:1,这是因为你使用的是request.getRemoteAddr()方法来获取客户端IP地址。根据引用\[1\]中的解释,当你使用这种方法时,在通过了反向代理软件(如Apache,Squid等)之后,无法获取客户端的真实IP地址。而在这种情况下,获取到的IP地址会是本地回环地址127.0.0.1或者是IPv6形式的0:0:0:0:0:0:0:1。所以,你获取到的IP地址一直都是0:0:0:0:0:0:0:1是正常的现象。如果你想获取客户端的真实IP地址,你可以尝试其他的方法,比如使用X-Forwarded-For头部来获取。 #### 引用[.reference_title] - *1* *3* [JSP获取IPv4的解决方案 而不是IPv6:0:0:0:0:0:0:0:1 !!!!](https://blog.csdn.net/xufankang/article/details/81414460)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java获取IP为 0:0:0:0:0:0:0:1 解决办法](https://blog.csdn.net/u010919083/article/details/79907821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 解决Redis无法使用ip访问(127.0.0.1可以访问)的情况 7887
  • 将项目发布至测试环境的方法 7069
  • java操作word文档(文字,图片,表格添加以及替换操作) 6111
  • Springboot 防止XSS攻击,包含解决RequestBody 的Json 格式参数 4570
  • SpringBoot从Durid连接池取出一个connection连接 4457

分类专栏

  • Linux 3篇
  • VUE 1篇
  • 项目发布 1篇
  • SQL 4篇

最新评论

  • java操作word文档(文字,图片,表格添加以及替换操作)

    overitqian: 国土空间规划表情包表情包表情包

  • 【SQL Server】列转行 STUFF 函数

    布哩啾啾: 请教一下,stuff内面如你一般有子查询还有for xml path的话一旦数据量几千条查询就开始变很慢,sqlserver版本是2008的,没法使用新函数 string_agg,还有别的优化方法吗?

  • SpringBoot+Druid+Mybatis配置多数据源

    初—: 调整点1:yml文件中驱动由com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver 调整点2:pom文件添加依赖: <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <!--配置注解执行器配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>[code=java] [/code][code=java] [/code]

  • SpringBoot从Durid连接池取出一个connection连接

    water___Wang: 表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Linux下的kafka终端发送、接收消息(生产、消费模式)
  • 根据json串直接入库
  • 常用SQL汇总
2023年1篇
2022年1篇
2021年3篇
2020年15篇
2019年8篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司木棉湾关键词排名南澳网站搭建布吉网站设计模板沙井设计网站盐田网站关键词优化光明网站推广同乐网站设计模板福田百搜词包平湖百度网站优化排名坪地网络营销永湖百度网站优化排名同乐百度竞价双龙网站关键词优化盐田seo排名西乡网站开发民治设计网站龙华seo排名大运网站建设设计广州营销型网站建设罗湖seo优化石岩网络广告推广罗湖网站优化推广南澳网站改版吉祥优化沙井网站搭建石岩百度网站优化福田推广网站永湖网站优化按天收费松岗百姓网标王宝安网站设计模板歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化