如何从 PHP 中的 CIDR 表示法获取 IP 地址列表?

发布于 2024-10-30 10:44:15 字数 362 浏览 1 评论 0原文

可能的重复:
从 PHP 中的 CIDR 表示法获取列表 IP

你好,

我需要从 CIDR 表示法生成 IP 地址列表。

例如,用户输入200.41.132.11/28。作为回报,我需要显示与此 CIDR 表示法匹配的 IP 地址列表。

你知道这方面的 PHP 函数或者有算法吗?

感谢您的帮助。

垫。

Possible Duplicate:
Getting list IPs from CIDR notation in PHP

Hi there,

I need to generate the list of IP addresses from a CIDR notation.

For example, user has entered 200.41.132.11/28. In return, I need to show the list of IP addresses matching this CIDR notation.

Do you know a PHP function for this or have an algorithm?

Thanks for your help.

Mat.

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

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

发布评论

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

评论(1

猥琐帝 2024-11-06 10:44:15

也许我错了,但尝试这样的事情(未测试):

function getIPfromCIDR($CIDRn) {
  $a = explode("/", $CIDRn);
  $g = explode(".", $a[0]);
  $b = '';  $res = '';
  foreach ($g as $gv) $b .= str_pad(decbin($gv), 8, '0', STR_PAD_LEFT);
  $bm = str_split(str_pad(substr($b, 0, $a[1]), 32, '0', STR_PAD_RIGHT), 8);
  foreach($bm as &$bg) $bg = bindec($bg);
  return join('.', $bm); 
  }

$addr = "200.41.132.11/28";
print_r(getIPFromCIDR($addr));

输出应该是

200.41.132.0

To get bit mask (network mask) only

function bitMask($bits) {
  $res = str_split(str_pad(str_pad('', $bits, '1'), 32, '0', STR_PAD_RIGHT), 8);
  foreach($res as &$bg) $bg = bindec($bg); 
  return join('.', $res); 
  }

echo bitMask(28);

输出

255.255.255.240

注意:它仅适用于 IPv4!

Maybe I'm wrong but try something like this (not tested):

function getIPfromCIDR($CIDRn) {
  $a = explode("/", $CIDRn);
  $g = explode(".", $a[0]);
  $b = '';  $res = '';
  foreach ($g as $gv) $b .= str_pad(decbin($gv), 8, '0', STR_PAD_LEFT);
  $bm = str_split(str_pad(substr($b, 0, $a[1]), 32, '0', STR_PAD_RIGHT), 8);
  foreach($bm as &$bg) $bg = bindec($bg);
  return join('.', $bm); 
  }

$addr = "200.41.132.11/28";
print_r(getIPFromCIDR($addr));

Output should be

200.41.132.0

To get bit mask (network mask) only

function bitMask($bits) {
  $res = str_split(str_pad(str_pad('', $bits, '1'), 32, '0', STR_PAD_RIGHT), 8);
  foreach($res as &$bg) $bg = bindec($bg); 
  return join('.', $res); 
  }

echo bitMask(28);

Output

255.255.255.240

Note: It works for IPv4 only!

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