【发布时间】:2011-12-25 15:55:22
【问题描述】:
我希望允许用户根据他们的 IP 地址过滤他们的登录信息(我将在用户首选项中实施一项新设置)。
所以如果用户有特定ip登录且没有限制,则登录成功。
在任何其他情况下,我都在想这个
如果用户选择他的完整 IP,如 67.31.85.47 并且他有这个 IP,那么登录是好的 如果用户选择 67.31.85.* 并拥有此 IP,则登录良好 如果用户选择 67.31.. 并拥有此 IP,则登录良好 如果用户选择 67...* 并拥有此 IP,则登录良好 其他情况无效
用户最多可以选择 5 个 IP 限制。例如:
67.31.*.*
167.77.47.*
62.11.28.28
25.57.*.*
169.*.*.*
我正在尝试使用explode 剥离IP,然后与他设置的所有限制进行比较。 这可能会很慢,因为我必须检查 5 次 * 4(4 = IP 在点上爆炸)
有更快的方法吗? 谢谢
【问题讨论】:
-
考虑将这些 IP 转换为普通整数并使用网络掩码。然后对要检查的每个 IP 地址进行简单的按位与运算。
if ((userIP && netmask) == (filterIP && netmask)) { ok to go }. -
由于您似乎是在老式 /8 边界上进行过滤,因此您需要 3 个网络掩码。 0xFF000000、0xFFFF0000、0xFFFFFF00。将相关掩码应用于表中的每个 ip,将其应用于用户的 IP,如果掩码值相等,则它们在同一个 IP 块中。