如何在Perl中给定IP地址和子网掩码的情况下创建有效的IP范围?我理解生成IP范围的概念,但需要帮助用Perl编写。例如,如果我与IP地址和子网掩码相同,我会得到子网号码。给这个数字加1应该给我第一个有效的IP。如果我将子网掩码和子网号码反转,我应该得到广播地址。从它减去1应该给最后一个有效的IP地址。如何在Perl中给定IP地址和子网掩码来创建有效的IP范围?
3
A
回答
3
见perldoc perlop有关位运算符的信息(它们是相同的,因为在大多数其他类似C语言):
&
是位与|
是位或^
是按位XOR>>
是右移<<
是左实英尺
但是,如果你真的想做一些网络块和IP地址的工作(而不是简单地回答家庭作业 - 尽管我很好奇你会用Perl做什么课程),但是,你能避免转向CPAN重新发明轮子:
0
3
如果你想与位运算符自己玩,就变成这样:
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
my $ip_address = '192.168.0.15';
my $netmask = 28;
my $ip_address_binary = inet_aton($ip_address);
my $netmask_binary = ~pack("N", (2**(32-$netmask))-1);
my $network_address = inet_ntoa($ip_address_binary & $netmask_binary);
my $first_valid = inet_ntoa(pack('N', unpack('N', $ip_address_binary & $netmask_binary) + 1));
my $last_valid = inet_ntoa(pack('N', unpack('N', $ip_address_binary | ~$netmask_binary) - 1));
my $broadcast_address = inet_ntoa($ip_address_binary | ~$netmask_binary);
print $network_address, "\n";
print $first_valid, "\n";
print $last_valid, "\n";
print $broadcast_address, "\n";
exit;
配网::子网掩码它更容易理解:
#!/usr/bin/perl
use strict;
use warnings;
use Net::Netmask;
my $ip_address = '192.168.0.15';
my $netmask = 28;
my $block = Net::Netmask->new("$ip_address/$netmask");
my $network_address = $block->base();
my $first_valid = $block->nth(1);
my $last_valid = $block->nth($block->size - 2);
my $broadcast_address = $block->broadcast();
print $network_address, "\n";
print $first_valid, "\n";
print $last_valid, "\n";
print $broadcast_address, "\n";
exit;
0
下面的代码片段可以帮助你找到rhel7上的ip地址和子网掩码
my $ip=`hostname -i`;
my $subnet = `ip addr show|grep -i ".*${ip}/.*"|tail -1|cut -d "/" -f2|cut -d " " -f1`;
相关问题
- 1. 如何计算IP地址和网络掩码时的IP范围?
- 2. 从IP范围计算子网掩码
- 3. 如何创建IP地址范围
- 4. 如何获得给定开始和结束IP地址的IP地址范围?
- 5. 如何用Perl解析IP地址和地址范围?
- 6. 如何根据给定的子网掩码来判断哪个IP有效
- 7. 给定一个IP地址和子网掩码,如何计算CIDR?
- 8. 如何在Java中为IP地址生成子网掩码?
- 9. 导出网络掩码给定起始和结束IP地址
- 10. 如何从IP地址列表中查找IP地址范围
- 11. 从IP地址获得子网掩码和网关
- 12. 如何快速找到IP地址范围内的IP地址?
- 13. 从C中的IP地址和子网掩码计算子网号码
- 14. 验证IP地址/网络掩码
- 15. 如何计算在C中的IP地址和子网掩码的AND操作?
- 16. EC2的IP地址范围
- 17. 如何知道从子网掩码搜索哪些IP地址?
- 18. 如何从IP地址计算子网掩码?
- 19. 使用现有IP地址范围验证IP地址
- 20. 匹配IP地址与IP范围?
- 21. 各种IP地址范围
- 22. 散列IP地址范围
- 23. 保留子网范围内的私有IP地址
- 24. 如何有效地检查给定的IP地址是否属于Python中的IP子网?
- 25. 如何计算IP地址子网范围?
- 26. 如何有效搜索IP地址范围?
- 27. 如何创建一个IP地址范围?
- 28. 子网掩码如何归因于IP?
- 29. 比较ip地址与MySQL中的开始和结束ip地址的范围
- 30. C# - 新增和IP地址字符串减去创建范围
你只是要求Perl的按位操作,还是一个例子? – Baxter 2009-11-15 20:00:00
我正在寻找一个例子(我认为Perl的按位操作将用于创建示例) – user211491 2009-11-15 20:04:09