问题来源

获取用户客户端IP地址是一个很简单的需求。用户打开网页,发送一个HTTP请求,后台从中提取出IP地址。

但是,在使用微信打开网页时,发现获取到的IP地址和在浏览器打开所得到的IP地址不一样。用不同的浏览器,测试多次,都得到一个这样的结论。

中间一定是出了什么问题。

Solution

其实这是使用了代理的问题,后台直接从HTTP头中获取到的host是最后一次经过的代理的地址。

幸运的是,http包在转发过程中,保留下了代理路径信息,x-forwarded-for字段,一个典型的示例如下:

x-forwarded-for: 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100

如何确定客户端的IP呢?

取x-forwarded-for中第一个非unknown的有效IP字符串。

一个小小的获取客户端IP地址,做起来也没那么简单!

扩展:NAT子网地址

扩展一下,我们所说的客户端的IP地址,其实多数情形下,是客户端所在子网的出口地址。由于IPv4地址耗尽的问题,现在大家用的网络多数是NAT扩展出来的,能拿到的自然就是客户端的出口地址。

进一步的,如果想区分同一子网下的不同设备,该怎么办?IP地址是不够的,大家都一样。依据HTTP请求,我们唯一能获取的信息就是User-Agent了。各个浏览器实现的User-Agent格式都不太一样,但大体都会包括一些有用信息,例如浏览器标识、操作系统标识、浏览器语言、渲染引擎、版本信息等。如果是移动端浏览器,一般还有设备信息,比较典型的如下:

# iPhone,微信
Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 MicroMessenger/6.2.6 NetType/3G+ Language/zh_CN # 安卓,微信
Mozilla/5.0 (Linux; U; Android 4.4.2; zh-cn; GT-I9500 Build/KOT49H) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025489 Mobile Safari/533.1 MicroMessenger/6.3.15.49_r8aff805.760 NetType/WIFI Language/zh_CN# 安卓,小米
Mozilla/5.0 (Linux; U; Android 5.0.2; zh-cn; MI 2S Build/LRX22G) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025489 Mobile Safari/533.1 V1_AND_SQ_6.2.3_336_YYB_D QQ/6.2.3.2700 NetType/WIFI WebP/0.3.0 Pixel/720

现在的移动端浏览器的User-Agent信息更丰富,设备、网络、语言都可以获取到。由于浏览器的多样性,User-Agent信息是比较繁杂的。这大概是我们透过HTTP请求能够最大程度识别到的用户了。

获取微信浏览器的真实IP地址相关推荐

  1. Java获取请求客户端的真实IP地址

    整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...

  2. 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  3. 后台获取访问端的真实ip地址

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客 ...

  4. 获取本机的真实IP地址

    Code: import java.net.InetAddress; import java.net.UnknownHostException; /** * 获取本机的真实IP地址.<br> ...

  5. java 获取请求客户端的真实IP地址

    转载自:http://leiyongping88.iteye.com/blog/1545930 用request.getRemoteAddr(); 方法获取的IP地址是:127.0.0.1或192.1 ...

  6. js获取用户浏览器信息和ip地址以及位置

    获取浏览器信息代码 function userAgent () {let browserReg = {Chrome: /Chrome/,IE: /MSIE/,Firefox: /Firefox/,Op ...

  7. JSP获取浏览者真实IP地址方法

    2019独角兽企业重金招聘Python工程师标准>>> 我们知道在JSP里,获取网页客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都 ...

  8. nginx获取客户端请求的真实IP

    客户端通过nginx代理访问后端jetty服务器时,后端服务器收到的请求信息中只有nginx代理的IP信息,无法看到client的真实IP, 所以nginx需要获取客户端请求头的真实IP地址进行传递, ...

  9. 老大说,网上这种获取真实IP地址的方法不对,我不信...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:蔡永吉  来源:http://bit.ly/33H8RMm ...

最新文章

  1. 微信小程序 = 滚动页面
  2. python软件怎么用-如何使用Python编写一个桌面软件系统?步骤有哪些
  3. 计算机科学的大部分研究是基于,计算机科学
  4. x3850x5服务器内存_联想3850 X5服务器添加内存之后红屏
  5. quilleditor 字体大小设置_vue-quill-editor如何设置字体默认大小?
  6. starting mysql. success!_启动mysql报错解决问题过程
  7. 【读书笔记】iOS-iCloud编程
  8. 【Flink】Flink 报错 ResourceManager leader changed to new address null
  9. android弹窗不能手动关闭_Android弹窗的实现及相关bug
  10. Java基础学习笔记 -- 9(数组)
  11. 如何将ImageRanger与外部存储一起使用NAS或USBUSB驱动器?
  12. Web前端的学习路线到底是什么,看完秒懂!
  13. 递归方式计算一个数的几次方
  14. 两消两现指的是_精细胞减二末期会有“两现”吗
  15. LSC LensShading Correct
  16. 西电计科数据库系统期末复习笔记
  17. 小程序改变swiper样式(带缩略图)
  18. 如何修改Kestrel上传文件的大小
  19. SQL 修改列的长度
  20. 如何搭建属于自己的Web服务器

热门文章

  1. 瑞萨R78族Flash读写操作详细探讨
  2. 支付宝开发 ——第三方支付
  3. Oracle的启动与停止(三个启动阶段和四种停库模式)
  4. twitter 分享链接_链接您的Twitter Feed
  5. 中兴财务新云陈虎:财务应从最小数据集转为大数据 洞察五新商机
  6. 2022年中式烹调师(中级)最新解析及中式烹调师(中级)找解析
  7. 研招网官方:关于考研报名的提醒!
  8. 筑本T8神奇魔轮 专卖网站(全国货到付款,7天无条件退货)
  9. 怎样查找Xilinx的资料
  10. 融慧金科CEO王劲:为何人工智能远未触达风控的本质?...