目录
ipcalc
是一个实用的网络计算工具,用于 IP 地址的相关计算和验证。下面我用一个表格汇总它的主要选项和功能,然后通过一些实战案例来展示其用法。
1. 选项速查表
选项 (短格式) | 选项 (长格式) | 功能描述 | 使用示例 |
---|---|---|---|
-c |
--check |
验证 IP 地址的合法性 | ipcalc -c 192.168.1.1 |
-b |
--broadcast |
计算广播地址 | ipcalc -b 192.168.1.10 255.255.255.0 |
-h |
--hostname |
显示 IP 地址对应的主机名 (通常查询本地配置) | ipcalc -h 192.168.1.1 |
-m |
--netmask |
由给定的 IP 地址计算默认的网络掩码 | ipcalc -m 192.168.1.10 |
-p |
--prefix |
显示给定掩码或 IP 地址的前缀长度 | ipcalc -p 192.168.1.10 255.255.252.0 |
-n |
--network |
计算网络地址 | ipcalc -n 192.168.1.10 255.255.252.0 |
-s |
--silent |
安静模式,不显示任何错误信息 | ipcalc -s 192.168.1.1000 (无效地址时不报错) |
-4 |
--ipv4 |
指定 IPv4 地址族 (默认) | ipcalc -4 192.168.1.1 |
-6 |
--ipv6 |
指定 IPv6 地址族 | ipcalc -6 2001:db8::1 |
--help |
显示帮助信息 | ipcalc --help |
2. 用法示例
2.1 计算广播地址
[root@centos79-20251123 ~]# ipcalc -b 192.168.1.10 255.255.255.0
BROADCAST=192.168.1.255
2.2 显示 IP 地址对应的主机名
[root@centos79-20251123 ~]# ipcalc -h 192.168.0.61
HOSTNAME=izbp16dptcafekynqfdw6yz
[root@centos79-20251123 ~]# ipcalc -h 114.114.114.114
HOSTNAME=public1.114dns.com
[root@centos79-20251123 ~]# ipcalc -h 8.8.8.8
HOSTNAME=dns.google
2.3 由给定的 IP 地址计算默认的网络掩码
[root@centos79-20251123 ~]# ipcalc -m 192.168.1.10
NETMASK=255.255.255.0
2.4 显示给定掩码或 IP 地址的前缀长度
[root@centos79-20251123 ~]# ipcalc -p 192.168.1.10 255.255.252.0
PREFIX=22
2.5 计算网络地址
[root@centos79-20251123 ~]# ipcalc -n 192.168.1.10 255.255.252.0
NETWORK=192.168.0.0
2.6 验证 IP 地址合法性
# 验证 IP 地址的合法性
[root@centos79-20251123 ~]# ipcalc -c 192.168.1.1
[root@centos79-20251123 ~]# ipcalc -c 192.168.1.1000
ipcalc: bad IPv4 address: 192.168.1.1000
在脚本中使用 ipcalc
验证用户输入的 IP 地址是否有效非常重要。
#!/bin/bash
read -p "请输入一个IP地址: " ip_address
if ipcalc -c -s "$ip_address"; then
echo "✅ IP 地址 $ip_address 有效。"
else
echo "❌ IP 地址 $ip_address 无效!"
fi
输出示例:
[root@centos79-20251123 ~]# sh test.sh 请输入一个IP地址: 192.168.1.900 ❌ IP 地址 192.168.1.900 无
2.7 计算网络地址、广播地址和前缀长度(合并输出)
这是 ipcalc
最常见的用途,只需一个命令就能获取网络的关键信息。
# 使用 CIDR 表示法一次性计算多个信息
ipcalc -n -b -p 192.168.56.100/23
输出示例:
PREFIX=23 BROADCAST=192.168.57.255 NETWORK=192.168.56.0
2.8 在脚本中使用 ipcalc
进行网络划分
假设你有一个 IP 地址和子网掩码,需要在一个脚本中提取网络地址以供后续使用。
#!/bin/bash
ip_address="192.168.1.68"
netmask="255.255.255.224"
# 获取网络地址,并提取其值
network_addr=$(ipcalc -n $ip_address $netmask | cut -d= -f2)
echo "IP 地址 $ip_address 属于网络: $network_addr"
输出示例:
IP 地址 192.168.1.68 属于网络: 192.168.1.64
3. 说明与注意事项
安装:
ipcalc
通常预装在大多数 Linux 发行版中。如果系统中没有,可以通过包管理器安装(例如在基于 CentOS的系统上安装initscripts包)。输出格式:
ipcalc
的选项输出通常是KEY=VALUE
的形式,便于在脚本中解析。主机名查询:
-h
选项查询的主机名通常依赖于本地的/etc/hosts
文件或配置的 DNS,并非所有 IP 都能解析到主机名,查询失败时会报错1。安静模式:
-s
选项在脚本中处理可能无效的输入时有用,它可以抑制错误输出。