我正在为我的学校开发一个networking系统(这是在PHP中,但这不重要)。
系统需要根据用户是否在学校networking(具体地说,如果他们不在学校networking上,他们需要login)而具有不同的行为。
所以我需要一个可靠的,理想的万无一失的(可能要求太多…)的方式来检查客户端是否在本地networking上。
看来,这样做的通常方式是比较用户的子网到服务器的子网。 但是,我们学校有多个子网(包括多个子网,每个子网都有VPN),其中只有一个是子网。 所以这种方法将无法正常工作
我读了RFC1918 ,它为专用networking保留了以下IP空间:
10.*.*.* 172.16.*.* - 172.31.*.* 192.168.*.*
那么我可以检查客户端IP是否在这些私有子网中? networking外部的用户是否有可能拥有这样的IP? 或者连接到学校networking的用户在这些范围之一中没有IP?
如果您的学校在入口处过滤传入地址,那么使用RFC 1918地址空间作为“在局域网”上的标记可能没问题。 坦率地说,对于我来说,使用IP地址作为某种隐式authentication似乎有些狡猾,但它会起作用。
如果你的学校没有过滤入口处的RFC 1918地址空间,那么从理论上讲,外面的攻击者可能会从你的服务器获取源于RFC 1918地址空间的数据包,而这些地址空间并没有被学校使用。 这取决于学校的上游ISP如何过滤stream量。
当有人从使用RFC 1918地址空间的局域网访问你的应用程序时,远程用户的边缘设备将把它们的源地址NAT到一个公共IP地址,所以你不会看到来自互联网的RFC 1918stream量(除非有人正试图做一些迂回)。
这样做没有办法。 当用户在不同的专用networking上时,很可能会发现他们正在使用RFC1918范围。 RFC并没有说它们是保留给私人使用的只有你的学校。 基本上,每个没有公有IP的组织(几乎所有组织)都在使用端点的RFC1918地址。
最好的,可能只有可靠的方法是拥有一个或两个主机名:
这是直接访问工作如Microsoft NLA(networking位置感知)的事情。 如果你不能打privateserver.myuni.edu,那么你在公共networking上,需要通过大厅进来。
/编辑Bah。 我误解了这个问题。 我错过了这是一个networking系统,我认为请求者正在开发一个客户端软件组件。 埃文的答案是适当的答案。