现有这么一个功能:
背景:公司有一个网站只能内网访问,员工要在家办公只能通过vpn服务器;
功能:网站有个签到功能,能签到的前提是这个员工是在公司办公,在家办公不能签到。
实现:前端通过webrtc获取本机ip地址,通过接口传给后端,后端通过网段来判断是否在公司,来告诉前端是否能显示签到按钮。
我的疑问:
- 后端说不能通过请求头里的ip地址来判断是否在内网,那请求头里获取的IP地址是电脑的外网ip还是vpn服务器的ip?
- 前端拿到的是内网ip,而内网ip不是路由器分配的吗?那两个局域网下的主机ip地址不会重复吗?大多不都是192.168.xxx.xxx吗?后端是怎么判断的?还是说公司网络分配的ip地址有啥特别的?
我的网络基础知识不好,有描述不对的地方请见谅。
一般来说 VPN 都是基于 TCP 的(比如 SOCKS5),这些协议比 HTTP(S) 更底层,没有所谓的 “请求头”;而且 VPN 不会改变客户端传输的 HTTP(S) 报文内容,“请求头里获取的 IP 地址” 就更无从谈起。
建议学习一下网络编程,理解一下这些协议各自有什么用途,就能理解服务器究竟是怎么取得客户端 IP 的了。
P.S. WebRTC 可以通过 STUN 获取其在子网下的 NAT 地址,跟你们内网的服务器不在一个子网网段内就可以被识别了。不过像你们这么应用的我倒是头一回见,因为其实这种做法并不可靠,只要知道你们内网网段是怎么划分的、子网掩码是多少,完全可以在外网用相同的配置弄出来“看起来没问题”的 IP 出来。