工作总结--ip地址在perl中的各类应用

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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值