8个版本
0.1.12 | 2024年7月11日 |
---|---|
0.1.11 | 2023年8月31日 |
0.1.10 | 2023年7月24日 |
0.1.9 | 2023年6月15日 |
0.1.3 | 2023年3月5日 |
#261 in 命令行工具
29 每月下载量
63KB
1.5K SLoC
ripcalc
计算或查找网络地址。
安装
$ git clone 'https://gitlab.com/edneville/ripcalc.git'
$ cd ripcalc \
&& cargo build --release \
&& please install -m 0755 -s target/release/ripcalc /usr/local/bin
用法
Ripcalc允许通过参数提供网络
$ ripcalc 127.0.0.1/8
IP is: 127.0.0.1/8
Broadcast is: 127.255.255.255
Network is: 127.0.0.0
Subnet is: 255.0.0.0
Wildcard is: 0.255.255.255
Network size: 16777216
与stdin相同的输出
echo '127.0.0.1/8' | ripcalc
...
输出格式可以自定义
$ ripcalc 2001:ba8:1f1:f1cb::4/64 --format "select * from IP6 where (ip >= %ln and ip <= %lb) and active = 1;\nupdate IP6 set active = 0 where (ip >= %ln and ip <= %lb) and active = 1;"
select * from IP6 where (ip >= 42540724579414763292693624807812497408 and ip <= 42540724579414763311140368881522049023) and active = 1;
update IP6 set active = 0 where (ip >= 42540724579414763292693624807812497408 and ip <= 42540724579414763311140368881522049023) and active = 1;
管道
有时,如果您想快速查看一个地址是否属于一组网络,您可以在您的 .bash_aliases
中设置类似以下内容
alias is_our_networks='ripcalc --inside 192.168.0.0/16 --format short'
使用此别名,您可以执行如下操作,快速查看域名是否使用您的基础设施
dig +short domain.com | is_our_networks
格式化
% 表示格式控制字符,后面跟以下之一
占位符 | 效果 |
---|---|
%a | IP地址字符串 |
%n | 网络地址字符串 |
%s | 子网地址字符串 |
%w | 通配符地址字符串 |
%b | 广播地址字符串 |
上述占位符前的前缀字符可以控制表示形式
占位符 | 效果 |
---|---|
%B | 二进制地址字符串 |
%S | 在网络边界处分割二进制字符串 |
%l | 无符号整数字符串 |
%L | 有符号整数字符串 |
%x | 十六进制地址字符串 |
其他格式字符
占位符 | 效果 |
---|---|
%c | CIDR掩码 |
%t | 网络大小 |
%r | 网络预留信息(如果可用) |
%d | 通过IP匹配设备接口 |
%m | 通过网络匹配媒体链接口 |
%k | RBL-style格式 |
%% | % |
\n | 换行符 |
\t | 制表符字符 |
例如
$ ripcalc --format '%k.all.s5h.net\n' 192.168.1.2
2.1.168.192.all.s5h.net
使用CSV,可以找到IP地址所在的网络,使用 %{field}
打印匹配项
$ cat nets.csv
network,range,owner
rfc1918,192.168.0.0/16,bob
rfc1918,172.16.0.0/12,cliff
rfc1918,10.0.0.0/8,mr nobody
$ ripcalc --csv nets.csv -i range --format '%{owner}\n' 192.168.0.0
bob
地址可以通过文件或stdin (-) 读取
$ cat list
127.0.0.1/28
10.0.0.1/28
192.168.1.1/30
172.18.1.1/30
10.0.0.0/30
$ ripcalc --csv nets.csv -i range --format '%{range} %{owner}\n' -s list
10.0.0.0/8 mr nobody
192.168.0.0/16 bob
172.16.0.0/12 cliff
10.0.0.0/8 mr nobody
当使用 -a
时,从 -s
读取的地址在列出 -l
网络时将不会显示,仅显示可用的地址。
当与 -s
一起使用 -e
时,将返回最小的封装网络。
给定一个IP地址列表,只打印匹配网络的地址。当使用s
和inside
时,如果命令行上的IP源网络中包含,则只打印来自-s
的地址。这可以通过`--outside`来反转。
$ echo -e '192.168.0.0\n192.167.255.255\n' | ripcalc -s - --inside 192.168.0.0/16 --format short
192.168.0.0
$ echo -e '192.168.0.0\n192.167.255.255\n' | ripcalc -s - --outside 192.168.0.0/16 --format short
192.167.255.255
如果/proc/net/route
以反转格式存储地址,可以将IP地址视为反转,可以使用--reverse inputs
和--base 16
一起使用来转换为点分十进制。
网络内
域名是否在子网列表中?例如,在这个地球部分,cloudflare.com正在从他们发布的网络列表中提供服务
echo http://cloudflare.com | ripcalc --inside 173.245.48.0/20 103.21.244.0/22 \
103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 \
190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 \
162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 \
131.0.72.0/22 --format short
104.16.133.229
总共有多少个地址?
ripcalc 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 \
141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 \
197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 \
104.24.0.0/14 172.64.0.0/13 131.0.72.0/22 --format '%t\n' \
| paste -sd+ \
| bc -l
1524736
如果您需要管理大量IP地址,这可能对您有帮助。
划分
可以将网络划分为子网
$ ripcalc 192.168.1.10/24 --divide 26 --format cidr
192.168.1.0/26
192.168.1.64/26
192.168.1.128/26
192.168.1.192/26
快速阻止封装网络
假设大量请求来自一个网络模式,为了保留服务,您可能想阻止封装列表的整个网络
please ip route add blackhole `ripcalc -e 192.168.56.10 192.168.57.1 192.168.44.47`
帮助
Options:
-4, --ipv4 IPv4 ipv4 address
-6, --ipv6 IPv6 ipv6 address
-a, --available display unused addresses
-b, --base INTEGER ipv4 base format, default to oct
-c, --csv PATH csv reference file
-d, --divide CIDR divide network into chunks
--noexpand do not expand networks in list
-e, --encapsulating
display encapsulating network from arguments or lookup
list
-f, --format STRING format output
'cidr' expands to %a/%c\n
'short' expands to %a\n
See manual for more options
-h, --help display help
-i, --field FIELD csv field
-l, --list list all addresses in network
--outside display when extremities are outside network
--inside display when extremities are inside network
-m, --mask CIDR cidr mask
-r, --reverse (none, inputs, sources or both) v4 octets, v6 hex
-s, --file PATH lookup addresses from, - for stdin
-v, --version print version
依赖关系
~3.5MB
~58K SLoC