如果你有时会发现自己在处理IPv4/IPV6网络时挠头,那么ipcalc可能就是你要找的工具。在Linux上,ipcalc具有更多的网络技能。 它首先收集IP地址和NetMask等数据,然后输出所得的广播,网络等信息。
ipcalc命令
ipcalc命令是一个简单的ip地址计算器,可以完成简单的IP地址计算任务。下面通过man ipcalc查看详细使用。
用法:
ipcalc [OPTION]… [/prefix] [netmask]
或者使用 ipcalc -h ,前提是你得先安装ipcalc命令(yum install ipcalc)。
从帮助信息来看,ipcalc命令支持如下的功能:
多种类型的位图作为输出。
地址信息是从接口中检索的。
根据DNS分辨率显示定向的主机名。
输出表示为压缩和标准。
输入地址也表示为压缩和标准。
输出格式,例如多个地址和NetMask。
用户定义的其他网络数量为输出。
IPv6标准网络输出。
ipcalc示例
- 校验IP地址
如果校验不通过就提示ipcalc: bad IPv4 …,正确就什么都不输出。注意只是校验IP地址的格式是否正确
- 显示广播地址
计算广播地址需要输入IP地址和掩码。
- 显示网络掩码
计算地址掩码需要输入IP地址及网络地址位数,如果未输入网络地址位数则按照A/B/C/D/E类地址进行计算掩码。
- 计算网络地址
可以给定IP和网络掩码计算网络地址
- 给定IP显示对应的主机名
查看IP地址对应主机名实际上市查找/etc/hosts文件
- 计算给定掩码的前缀
- 组合选项
我们可以看出计算给定IP的网络掩码,广播地址,网络地址。
ipcalc命令简单实现
...
int main(int argc, char ** argv)
{
if(argc < 2)
{
usage(argv[0], "You must provide a valid ip/mask");
}
int inputSize = get_input_size(argv[1]);
if (inputSize > 18)
{
usage(argv[0], "You must provide a valid ip/mask");
}
int numberOfSlashes = get_number_of_slashes(argv[1]);
if (numberOfSlashes != 1)
{
usage(argv[0], "You must provide a valid ip/mask");
}
int slashPosition = get_slash_position(argv[1]);
if (slashPosition == 0 || slashPosition == inputSize - 1)
{
usage(argv[0], "You must provide a valid ip/mask");
}
get_ip_string(argv[1], ip_string, slashPosition);
if (!is_valid_ip_address(ip_string))
{
usage(argv[0], "You must provide a valid ip/mask");
}
get_mask_string(argv[1], mask_string, slashPosition);
if (!is_valid_mask(mask_string))
{
usage(argv[0], "You must provide a valid ip/mask");
}
printf("\n");
printf("Entry: %s\n", argv[1]);
printf("\n");
handle_input(argv[1]);
network_address = ip_number & mask_number;
broadcast = ~(mask_number);
broadcast = broadcast + network_address;
host_min = network_address + 1;
host_max = broadcast - 1;
// printing the results
printf("Network address: ");
printf("\t");
binary_print(network_address);
printf("\t");
print_ip_address(&network_address);
printf("\n");
printf("Netmask: ");
printf("\t");
binary_print(mask_number);
printf("\t");
print_ip_address(&mask_number);
printf("(%d bits)", number_of_mask_bits);
printf("\n");
printf("Broadcast addr: ");
printf("\t");
binary_print(broadcast);
printf("\t");
print_ip_address(&broadcast);
printf("\n");
printf("Min Host value: ");
printf("\t");
binary_print(host_min);
printf("\t");
print_ip_address(&host_min);
printf("\n");
printf("Max Host value: ");
printf("\t");
binary_print(host_max);
printf("\t");
print_ip_address(&host_max);
printf("\n");
printf("\n");
number_of_hosts_bits = 32 - number_of_mask_bits;
printf("The possible number of hosts on this network is %d.\n", (int)pow(2, number_of_hosts_bits) - 2);
printf("\n");
}
...
编译运行:
总结
在本文中,了解了ipcalc工具以及在这些示例中使用它的步骤。 它是与网络相关任务的重要工具。
提供了一种计算主机IP信息的简单方法。可以完成简单的IP地址计算任务。各种选项指定ipcalc应该在标准输出上显示什么信息。
欢迎关注微信公众号【程序猿编码】,需要 ipcalc命令完整源码的添加本人微信号(c17865354792)