获取微信浏览器的真实IP地址
问题来源
获取用户客户端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地址相关推荐
- Java获取请求客户端的真实IP地址
整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- 后台获取访问端的真实ip地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客 ...
- 获取本机的真实IP地址
Code: import java.net.InetAddress; import java.net.UnknownHostException; /** * 获取本机的真实IP地址.<br> ...
- java 获取请求客户端的真实IP地址
转载自:http://leiyongping88.iteye.com/blog/1545930 用request.getRemoteAddr(); 方法获取的IP地址是:127.0.0.1或192.1 ...
- js获取用户浏览器信息和ip地址以及位置
获取浏览器信息代码 function userAgent () {let browserReg = {Chrome: /Chrome/,IE: /MSIE/,Firefox: /Firefox/,Op ...
- JSP获取浏览者真实IP地址方法
2019独角兽企业重金招聘Python工程师标准>>> 我们知道在JSP里,获取网页客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都 ...
- nginx获取客户端请求的真实IP
客户端通过nginx代理访问后端jetty服务器时,后端服务器收到的请求信息中只有nginx代理的IP信息,无法看到client的真实IP, 所以nginx需要获取客户端请求头的真实IP地址进行传递, ...
- 老大说,网上这种获取真实IP地址的方法不对,我不信...
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:蔡永吉 来源:http://bit.ly/33H8RMm ...
最新文章
- 微信小程序 = 滚动页面
- python软件怎么用-如何使用Python编写一个桌面软件系统?步骤有哪些
- 计算机科学的大部分研究是基于,计算机科学
- x3850x5服务器内存_联想3850 X5服务器添加内存之后红屏
- quilleditor 字体大小设置_vue-quill-editor如何设置字体默认大小?
- starting mysql. success!_启动mysql报错解决问题过程
- 【读书笔记】iOS-iCloud编程
- 【Flink】Flink 报错 ResourceManager leader changed to new address null
- android弹窗不能手动关闭_Android弹窗的实现及相关bug
- Java基础学习笔记 -- 9(数组)
- 如何将ImageRanger与外部存储一起使用NAS或USBUSB驱动器?
- Web前端的学习路线到底是什么,看完秒懂!
- 递归方式计算一个数的几次方
- 两消两现指的是_精细胞减二末期会有“两现”吗
- LSC LensShading Correct
- 西电计科数据库系统期末复习笔记
- 小程序改变swiper样式(带缩略图)
- 如何修改Kestrel上传文件的大小
- SQL 修改列的长度
- 如何搭建属于自己的Web服务器