本地网络上的客户端——简单的测试?

bau*_*aum 1 ip subnet

我正在为我的学校开发一个网络系统(它是用 PHP 编写的,但这并不重要)。

系统需要根据用户是否在学校网络上有不同的行为(具体来说,如果他们不在学校网络上,则需要登录)。

因此,我需要一种可靠的、理想情况下万无一失(可能要求太多……)的方法来检查客户端是否在本地网络上。

这样做的通常方法似乎是将用户的子网与服务器的子网进行比较。但是,我们学校有多个子网(包括多个校区,每个校区都有多个子网以及VPN),其中只有一个是服务器的子网。所以那个方法行不通

我阅读了RFC1918,它为私有网络保留了以下 IP 空间:

 10.*.*.*
 172.16.*.* - 172.31.*.*
 192.168.*.*
Run Code Online (Sandbox Code Playgroud)

那么我可以检查客户端 IP 是否在这些私有子网中的任何一个内吗?网络外的用户有没有可能拥有这样的IP?或者连接到学校网络的用户没有这些范围之一的 IP?

Eva*_*son 5

如果您的学校在入口过滤传入地址,那么使用 RFC 1918 地址空间作为“在 LAN 上”的哨兵可能没问题。坦率地说,使用 IP 地址作为某种隐式身份验证对我来说似乎有点狡猾,但它会起作用。

如果您的学校未在入口过滤 RFC 1918 地址空间,那么理论上有可能外部攻击者将来自学校未使用的 RFC 1918 地址空间的数据包发送到您的服务器。这将取决于学校的上游 ISP 如何过滤流量。

当有人从使用 RFC 1918 地址空间的 LAN 访问您的应用程序时,远程用户的边缘设备会将其源地址 NAT 转换为公共 IP,因此您不会看到来自 Internet 的 RFC 1918 流量(除非有人试图做一些狡猾的事情)。