增加MAC地址

Tyl*_*r D 1 perl

我正在尝试开发一个脚本,它将部分地从给定的起始基础生成MAC地址列表.我输入的是MAC地址列表,需要递增1.

例子:

00:1D:FE:12:37:1A(需要生成00:1D:FE:12:37:1B)
00:1D:FE:12:37:49(需要生成00:1D:FE:12:37:4A)
00:1D:FE:12:37:4F(需要生成00:1D:FE:12:37:50)

这里的限制是我需要在没有安装或不可用的"额外"perl模块的机器上运行此脚本,因此代码需要包含在脚本中.这意味着Net::MAC作为一个模块,但我可能会蚕食一些有用的东西并包含它但我想我应该做的不应该是完全复杂的在一个小函数中实现利用pack(?)或其他东西之类的.

我在像PerlMonks这样的论坛上发现了各种各样的线索,但似乎没有人能得到确凿的答案.任何输入将不胜感激!

ike*_*ami 8

这是一个48位的数字.解析它,递增它,格式化它.

许多Perl构建仅支持32位数作为整数,因此我将避免形成更大的整数.

my $mac_str = '00:1D:FE:12:37:1A';

( my $mac_hex = $mac_str ) =~ s/://g;
my ($mac_hi, $mac_lo) = unpack("nN", pack('H*', $mac_hex));

if ($mac_lo == 0xFFFFFFFF) {
    $mac_hi = ($mac_hi + 1) & 0xFFFF;
    $mac_lo = 0;
} else {
    ++$mac_lo;
}

$mac_hex = sprintf("%04X%08X", $mac_hi, $mac_lo);
$mac_str = join(':', $mac_hex =~ /../sg);
Run Code Online (Sandbox Code Playgroud)