功能 • 安装 • 用法 • 库 • 加入 Discord
mapCIDR 的开发旨在简化大规模扫描操作的负载分配;它既可以作为库使用,也可以作为独立的 CLI 工具使用。
sbh、sbc)a、aa)match-ip)filter-ip)s、sr)count)ip-format)si、sp)t4、)go install -v github.com/projectdiscovery/mapcidr/cmd/mapcidr@latest
mapcidr -h
这将显示工具的帮助信息。以下是它支持的所有开关。
输入:
-cl, -cidr string[] 要处理的CIDR/IP/文件(包含CIDR/IP列表)
处理:
-sbc int 按给定CIDR数量切片
-sbh int 按给定主机数量切片
-a, -aggregate 将IP/CIDR聚合为最小子网
-aa, -aggregate-approx 将稀疏IP/CIDR聚合为最小近似子网
-c, -count 计算给定CIDR中的IP数量
-t4, -to-ipv4 将IP转换为IPv4格式
-t6, -to-ipv6 将IP转换为IPv6格式
-ip-format, -if string[] IP格式(0,1,2,3,4,5,6,7,8,9,10,11)
-zpn, -zero-pad-n int 使用的填充零的数量(默认3)
-zpp, -zero-pad-permute 启用每个八位组从0到zero-pad-n的排列
过滤:
-f4, -filter-ipv4 从输入中过滤IPv4 IP
-f6, -filter-ipv6 从输入中过滤IPv6 IP
-skip-base 在输出中跳过基础IP(以.0结尾)
-skip-broadcast 在输出中跳过广播IP(以.255结尾)
-mi, -match-ip string[] 要匹配的IP/CIDR/文件列表(逗号分隔、文件输入)
-fi, -filter-ip string[] 要过滤的IP/CIDR/文件列表(逗号分隔、文件输入)
杂项:
-s, -sort 按升序排序输入的IP/CIDR
-sr, -sort-reverse 按降序排序输入的IP/CIDR
-si, -shuffle-ip 随机打乱输入的IP顺序
-sp, -shuffle-port string 随机打乱输入的IP:Port顺序
更新:
-up, -update 将mapcidr更新到最新版本
-duc, -disable-update-check 禁用自动mapcidr更新检查
输出:
-verbose 详细模式
-o, -output string 输出文件路径
-silent 静默模式
-version 显示项目版本
要获取给定 CIDR 的 IP 列表,请使用以下命令:
mapcidr -cidr 173.0.84.0/24
____________ ___
__ _ ___ ____ / ___/ _/ _ \/ _ \
/ ' \/ _ '/ _ \/ /___/ // // / , _/
/_/_/_/\_,_/ .__/\___/___/____/_/|_| v0.5
/_/
projectdiscovery.io
[WRN] 请谨慎使用。您应对自己的行为负责
[WRN] 开发者不承担任何责任,且不对任何误用或损害负责。
173.0.84.0
173.0.84.1
173.0.84.2
173.0.84.3
173.0.84.4
173.0.84.5
173.0.84.13
173.0.84.14
173.0.84.15
173.0.84.16
也可以使用以下命令获取给定 IP 范围的 IP 列表:
$ echo "192.168.0.0-192.168.0.5" | mapcidr
192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
要按 CIDR 数量切片给定的 CIDR 或 CIDR 列表,或将其分割为多个相等的较小子网,请使用以下命令:
mapcidr -cidr 173.0.84.0/24 -sbc 10 -silent
173.0.84.0/27
173.0.84.32/27
173.0.84.64/27
173.0.84.96/27
173.0.84.128/27
173.0.84.160/27
173.0.84.208/28
173.0.84.192/28
173.0.84.240/28
173.0.84.224/28
要按每个 CIDR 中的相等主机数量切片给定的 CIDR,请使用以下命令:
mapcidr -cidr 173.0.84.0/16 -sbh 20000 -silent
173.0.0.0/18
173.0.64.0/18
173.0.128.0/18
173.0.192.0/18
注意:仅当所需切片数量或每个子网的主机数量是 2 的幂时,才能实现完美分割。否则,工具将尝试自动找到最佳分割策略以获得所需结果。
要将多个 CIDR 范围合并为较小的子网块,请使用以下命令:
$ mapcidr -cl cidrs.txt -aggregate
要列出给定 IP 列表的 CIDR 块,请使用以下命令:
$ mapcidr -il ips.txt -aggregate
也可以对稀疏 IP 组执行近似聚合(仅限版本 4)。最终区间将包含不属于输入的连续 IP:
$ cat ips.txt
1.1.1.1
1.1.1.16
1.1.1.31
$ cat ips.txt | mapcidr -aggregate-approx
1.1.1.0/27
要列出给定 IP 范围(IPv4 | IPv6)的 CIDR 块,请使用以下命令:
$ mapcidr -cl 192.168.0.1-192.168.0.255 -aggregate
或者
$ echo 192.168.0.1-192.168.0.255 | mapcidr -aggregate
192.168.0.1/32
192.168.0.2/31
192.168.0.4/30
192.168.0.8/29
192.168.0.16/28
192.168.0.32/27
192.168.0.64/26
192.168.0.128/25
要从给定的 CIDR 范围列表中匹配 IP,请使用以下命令:
$ mapcidr -cidr 192.168.1.0/24 -mi 192.168.1.253,192.168.1.252
$ mapcidr -cidr 192.168.1.0/24 -mi ip_list_to_match.txt
要从给定的 CIDR 范围列表中过滤 IP,请使用以下命令:
$ mapcidr -cidr 192.168.1.224/28 -fi 192.168.1.233,192.168.1.234
$ mapcidr -cidr 192.168.1.224/28 -fi ip_list_to_filter.txt
要将给定的 IP 表示为多种格式,可以使用 -if 0 标志显示所有支持的格式值,也可以使用特定的索引号显示特定类型的格式,索引列表见 这里。目前支持 10 种独特格式。
$ echo 127.0.1.0 | mapcidr -if 0 -silent
127.0.1.0
127.1
0177.0.01.0
0x7f.0x0.0x1.0x0
0x7f000100
0xabfa659dfa7f000100
281472812450048
111111111111111101111111000000000000000100000000
0x7f.0.01.0x0
::ffff:7f00:0100
%31%32%37%2E%30%2E%31%2E%30
127.000.001.000
IPv4 | IPv6 地址可以从 v6 转换为 v4 表示法,或者从 IPv4 映射表示法转换为 IPv4 地址,分别使用 -t4 和 -t6。
$ cat ips.txt
1.1.1.1
2.2.2.2
$ mapcidr -cl ips.txt -t6
00:00:00:00:00:ffff:0101:0101
00:00:00:00:00:ffff:0202:0202
注意:并非所有 IPv6 地址都可以转换为 IPv4。您只能转换有效的 IPv4 表示的 IPv6 地址。 |
要计算给定 CIDR 或 CIDR 列表中的主机数量,请使用以下命令:
$ echo 173.0.84.0/16 | mapcidr -count -silent
65536
要获取 ASN 号码的 IP 地址,请使用以下命令:
echo AS15133 | mapcidr -silent
5.104.64.0
5.104.64.1
5.104.64.2
5.104.64.3
5.104.64.4
可以直接在 Go 程序中使用该库。以下代码片段概述了如何将 CIDR 划分为子网,以及如何将其划分为包含特定数量主机的子网:
package main
import (
"fmt"
"github.com/projectdiscovery/mapcidr"
)
func main() {
// 将 CIDR 划分为两个子网
subnets1 := mapcidr.SplitN("192.168.1.0/24", 2)
for _, subnet := range subnets1 {
fmt.Println(subnet)
}
// 将 CIDR 划分为两个包含 128 个主机的子网
subnets2 := mapcidr.SplitByNumber("192.168.1.0/24", 128)
for _, subnet := range subnets2 {
fmt.Println(subnet)
}
// 列出 CIDR 中的所有 IP
ips, _ := mapcidr.IPAddresses("192.168.1.0/24")
for _, ip := range ips {
fmt.Println(ip)
}
}
mapCIDR 由 projectdiscovery 团队倾心打造 🖤。
t6