验证 IP 和 CIDR 组合

发布于 2024-11-26 04:00:36 字数 135 浏览 1 评论 0原文

我有一个用户提交了带有网络掩码的 IP 地址,我需要确保它是有效的。例如,如果用户提交:10.113.0.0/14,我需要将其标记为无效,因为该 IP 范围的 /14 块以 10.112.0.0 开头。

我怎样才能在 PHP 中做到这一点?

I have a user submitted IP address with netmask, and I need to make sure it is valid. For instance, if the user submits: 10.113.0.0/14, I need to flag it as invalid, because the /14 block for that IP range begins with 10.112.0.0.

How can I do this in PHP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

请你别敷衍 2024-12-03 04:00:36

我有同样的问题,所以为谷歌用户发布我的结果:

$ipLong = ip2long($ip);
if ( ( ($ipLong << $prefix) ^ 0) == true ) {
    //IP and prefix pair is not valid
}

解释

让我们评估 255.255.0.0/16

对于 ip 255.255.0.0,long 的二进制表示为 10000000000000000

  1. $ipLong << $prefix 左移 16 位以删除所有网络 ID 位。
  2. ^ 0 评估先前操作后是否设置了任何位。
  3. 对于有效的 IP 和前缀,所有位都必须取消设置,因此如果结果为 true,我们就会得到无效的对。

I had the same question, so posting my result for googlers:

$ipLong = ip2long($ip);
if ( ( ($ipLong << $prefix) ^ 0) == true ) {
    //IP and prefix pair is not valid
}

Explanation

Let's evaluate 255.255.0.0/16

For ip 255.255.0.0 binary representation of long is 10000000000000000

  1. $ipLong << $prefix Shift 16 bits to left for deleting all network ID bits.
  2. ^ 0 Evaluate if any bit is set after previous operation.
  3. For valid IP and prefix all bits must be unset, so if result is true we have invalid pair.
心奴独伤 2024-12-03 04:00:36

工具“sipcalc”将帮助您验证网络掩码和 cidr。

http://www.routemeister.net/

Tool 'sipcalc' will help you to validate netmask and cidr.

http://www.routemeister.net/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文