php - 如何将 IP 转换为 CIDR 块?(PHP)
问题描述
我有 ip,我想将其转换为具有特定掩码(例如 /28)的 CIDR 块。使用 PHP。
这样输入“1.1.1.100”和“28”,输出为“1.1.1.96/28”
ip_to_cidr('1.1.1.100', '28') // '1.1.1.96/28'
我发现了很多匹配和范围的函数,但没有关于实际从 ip 转换为 CIDR 的内容。似乎是最基本的操作,可能是我遗漏了一些东西,使用了错误的搜索词或误解了掩码。
对于上下文:我需要阻止机器人,我有他们的 IP 并且想要阻止 ipset 中的范围。/24 有点多(但很容易制作,只需将最后一位替换为“.0/24”),所以我想使用 /27 /28 /29。
解决方案
It's ... beautiful
function ip_to_mask28($ip)
{
$ip_parts = explode('.', $ip);
$mask28 = [0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 256];
foreach ( $mask28 as $key => $value )
if ( $ip_parts[3] < $mask28[$key + 1] )
return $ip_parts[0].'.'.$ip_parts[1].'.'.$ip_parts[2].'.'.$value.'/28';
}
echo ip_to_mask28('1.1.1.100'); // 1.1.1.96/28
Rolling with this now
推荐阅读
- angular - Google App Engine 的部署问题
- java - Eclipse IDE 错误,cmd 显示“Java.lang.classnotfoundexception:version”
- angular - Karma/Jasmine 强制导入无关组件
- c++ - 将 Python 数据读入 C++ 代码
- angular - Angular 6:错误:找不到“object”类型的不同支持对象“[object Object]”。NgFor 只支持绑定到 Array 等 Iterables
- swift - 快速将图像存储在 Core Data 中
- drupal - 弹出窗口中的drupal 7条款和条件
- python - 使用 Pandas Dataframe 选择要从 MySQL 导出到 Excel 的列
- excel - VBA删除一列并添加新列,这些更改后如何在公式中引用相同的范围区域?
- c - 在c中将新节点作为头推送后节点的名称是什么?