工作总结--ip地址在perl中的各类应用
来源:互联网 发布:程序员的贡献 编辑:程序博客网 时间:2024/06/08 06:25
1.1.1.1 255.255.255.252 => 1.1.1.1/30:
my ($ip,$mask)= @_;$mask = sprintf("%b%b%b%b",(split /\./, $mask));my $temp = $mask =~ s/1/1/g;$temp = 0 if(!defined $temp || $temp eq '');my $maskip = $ip."/".$temp;return ($maskip);
1.1.1.1/30 => 1.1.1.1 255.255.255.252:
my ($maskip) = @_;my ($ip, $mask) = split m{/}xms, $maskip;$maskip = $ip.' '.join '.', unpack 'C*', pack 'B32', 1 x $mask;return ($maskip);
根据掩码获取起始和终止ip地址(网络和广播):
my ($ip,$mask) = @_;my $bin_ip;my $bin_mask;map { $bin_ip .= substr(unpack("B32",pack("N",$_)) , -8);} split (/\./,$ip);map { $bin_mask .= substr(unpack("B32",pack("N",$_)) , -8);} split (/\./,$mask);my $hostipbbit = 32 - index($bin_mask,"0");return 0 if($hostipbbit >= 32);my $network = $bin_ip & $bin_mask;my $convnetwork=oct('0b'.$network);my $startconvip = $convnetwork;my $endconvip = $convnetwork+2**$hostipbbit-1;my $bin_startip = unpack("B32",pack("N",$startconvip));$startip = sprintf ("%d.%d.%d.%d",oct('0b'.substr($bin_startip,0,8)),oct('0b'.substr($bin_startip,8,8)),oct('0b'.substr($bin_startip,16,8)),oct('0b'.substr($bin_startip,24)));my $bin_endip = unpack("B32",pack("N",$endconvip));$endip = sprintf ("%d.%d.%d.%d",oct('0b'.substr($bin_endip,0,8)),oct('0b'.substr($bin_endip,8,8)),oct('0b'.substr($bin_endip,16,8)),oct('0b'.substr($bin_endip,24)));return ($startip,$endip);
设备ACl转换ip映射:
1、
acl extend number 100
rule 2 permit ip any 18.8.2.92 0.0.0.3
rule 3 permit ip any 18.8.2.48 0.0.0.7
rule 4 permit ip any 18.8.2.08 0.0.0.7
rule 5 permit ip any 18.8.2.16 0.0.0.7
2、
access-list 121 permit ip 60.3.9.1 0.0.0.7 any
sub Ip_ACL{ my ($aclno,$ip,$any,$Ref,$rule) = @_; #rule可有可无 my $any_bin = sprintf("%08b%08b%08b%08b", ( split /\./, $any)); my $ip_bin = sprintf("%08b%08b%08b%08b", ( split /\./, $ip)); my $Tmp_bin = sprintf("%32b", (oct("0b".$any_bin) ^ (2**32))); my $hostipbbit = 32 - index($Tmp_bin,"0"); if($hostipbbit >= 32) { if($rule ne '') { $Ref->{$ip}{'Role'} = $rule; &Debug("$ip Role: $Ref->{$ip}{'Role'} \n", 0); } $Ref->{$ip}{'AclSeq'} = $aclno; &Debug("$ip AclSeq: $Ref->{$ip}{'AclSeq'} \n", 0); return 0; } my $network = $ip_bin & $Tmp_bin; my $convnetwork=oct('0b'.$network); my $i = 0; for ($i; $i < 2**$hostipbbit; $i ++) { my $convip = $convnetwork+$i; my $bin_startip = unpack("B32",pack("N",$convip)); $ip = sprintf ("%d.%d.%d.%d",oct('0b'.substr($bin_startip,0,8)),oct('0b'.substr($bin_startip,8,8)),oct('0b'.substr($bin_startip,16,8)),oct('0b'.substr($bin_startip,24))); if($rule ne '') { $Ref->{$ip}{'Role'} = $rule; &Debug("$ip Role: $Ref->{$ip}{'Role'} \n", 0); } $Ref->{$ip}{'AclSeq'} = $aclno; &Debug("$ip AclSeq: $Ref->{$ip}{'AclSeq'} \n", 0); } return 0;}
获取全部ip:
sub Ip_ANY{ my ($ip,$mask,$Ref,$para2) = @_; my ($bin_ip,$bin_mask); map {$bin_ip .= substr(unpack("B32",pack("N",$_)) , -8);} split (/\./,$ip); map {$bin_mask .= substr(unpack("B32",pack("N",$_)) , -8);} split (/\./,$mask); my $binwork = $bin_ip & $bin_mask; my $convnetwork=oct('0b'.$binwork); my $hostipbbit = 32 - index($bin_mask,"0"); return 0 if($hostipbbit > 10); my $i = 0; for ($i; $i < 2**$hostipbbit; $i ++) { my $convip = $convnetwork+$i; my $bin_startip = unpack("B32",pack("N",$convip)); $ip = sprintf ("%d.%d.%d.%d",oct('0b'.substr($bin_startip,0,8)),oct('0b'.substr($bin_startip,8,8)),oct('0b'.substr($bin_startip,16,8)),oct('0b'.substr($bin_startip,24))); $Ref->{$ip} = $para2; &Debug("$ip IP: $Ref->{$ip} \n", 0); } return 0;}
- 工作总结--ip地址在perl中的各类应用
- php二分法在IP地址查询中的应用
- mvc在perl中的应用
- IPC 在Perl中的应用
- 各类IP地址的范围
- 各类IP地址的范围
- 各类IP地址的范围
- 各类IP地址的范围
- PHP验证码图片在各类平台中的应用
- IP地址的三种表示格式及在Socket编程中的应用
- IP地址的三种表示格式及在Socket编程中的应用
- IP地址的三种表示格式及在Socket编程中的应用
- IP地址的三种表示格式及在Socket编程中的应用
- IP地址的三种表示格式 及 在Socket编程中的应用
- IP地址的三种表示格式 及 在Socket编程中的应用
- IP地址的三种表示格式及在Socket编程中的应用
- (转载)IP地址的三种表示格式及在Socket编程中的应用
- IP地址的三种表示格式及在Socket编程中的应用
- OTL 4.0之OTL流的概念
- oracle客户端的下载地址
- 自动调整TextView字体大小以适应文字长度
- 翻页过渡效果 经纬度 NSData类型的数据转换成NSString
- FTP协议
- 工作总结--ip地址在perl中的各类应用
- I2C总线协议
- linux文件赋权,修改用户类别,修改用户组命了
- 绑定IP-MAC
- I帧和IDR帧的区别
- WM_CTLCOLOR和OnCtlColor消息的用法
- url转码
- 简单彩票选号
- linux多线程学习(六)——信号量实现同步