臣妾做不到
不仅是Nodejs做不到,任何网络技术都不能做到
因为访问者的内网ip,在经过路由器的时候会做 网络地址转换(NAT),经过转换的IP已经是公网IP了,所以只能获取到访问者公网的IP.
Nodejs获取客户端公网IP的方法主要分为这几种情况:
- Nodejs直接暴露服务
- 反向代理
因为中间加了一层反向代理转发,所以
req.socket.remoteAddress
只能获取道反向代理的IP,这不是我们想要的.所以需要在反向代理转发数据时增加一个HTTP头x-real-ip,这里以nginx为例,需要配置:
proxy_set_header X-Real-IP $remote_addr
在Nodejs可以使用X-Real-IP头获取IP
在多层反向代理中需要除了暴露在公网的nginx设置x-real-ip头,其他后面都不要设置
如何通过js来获取客户端的唯一性?
写个服务端脚本,返回访问者的ip和mac。当然,还要支持跨域访问。客户端js只要ajax get那个脚本的url,获取信息就好了。把这些信息hash一下,存到本地,下次做验证,就知道是不是一台机器了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。