如何解决递增MAC地址
| 我正在尝试开发一个脚本,该脚本将部分地从给定的起始库生成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模块的机器上运行此脚本,因此代码需要包含在脚本中。这意味着ѭ6是一个模块,但是我可能会蚕食一些有用的位并将其包含在内,但我认为我要执行的操作在使用pack()的小函数中实现不应该很复杂?)之类的东西。
我在诸如PerlMonks之类的论坛上发现了各种话题,但是似乎没有一个结论性的答案。任何输入将不胜感激!
解决方法
这是一个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);
,我不知道perl,但是我在python中做了macaddress增量。代码在这里添加
def getmacaddress_increment(macinst,rowindex):
inst = gethex_todecimal(macinst)
macarray = inst.split(\'.\')
instarr = []
seg5 = int(macarray[5]) + rowindex
if seg5 > 255:
macarray[5] = str(seg5%255)
seg4 = int(macarray[4])
macarray[4] = str(seg4 + int(seg5/255))
else:
macarray[5] = str(seg5)
seg4 = int(macarray[4])
if seg4 > 255:
macarray[4] = str(seg4%255)
seg3 = int(macarray[3])
macarray[3] = str(seg3 + int(seg4/255))
else:
macarray[4] = str(seg4)
seg3 = int(macarray[3])
if seg3 > 255:
macarray[3] = str(seg3%255)
seg2 = int(macarray[2])
macarray[2] = str(seg2 + int(seg3/255))
else:
macarray[3] = str(seg3)
seg2 = int(macarray[2])
if seg2 > 255:
macarray[2] = str(seg2%255)
seg1 = int(macarray[1])
macarray[1] = str(seg1 + int(seg2/255))
seg1 = int(macarray[1])
if seg1 > 255:
macarray[1] = \'0\'
seg0 = int(macarray[0])
macarray[0] = str(seg0 + 1)
seg0 = int(macarray[0])
if seg0 > 255:
macarray[0] = \'0\'
arr = []
#newval = macarray[0] + \'.\' + macarray[1] + \'.\' + macarray[2] + \'.\' + macarray[3] + \'.\' + macarray[4] + \'.\' + macarray[5]
#print \'Updated value: \',newval
for cnt,instr in enumerate(macarray):
arr.append(\"%0.2x\" % int(instr))
return \':\'.join(arr)
def toint(macid):
return str(int(macid,16))
def gethex_todecimal(macaddr):
macaddr = macaddr.replace(\'-\',\':\')
inst = map(toint,macaddr.split(\':\'))
return \'.\'.join(inst)
检查是否可以使用此逻辑来增加perl。对不起,我没有一个直接的答案。
西瓦
,在这里,我使用代码递增MAC地址,但在最后一个位置,当我们递增MAC地址溢出时,我使用的代码从00开始
例如:如果最后一个位置是FF,则到起始点00
#!/bin/sh
mac=$(ifconfig eth0|grep HWaddr|awk \'{print $5}\'| tr \'[a-z]\' \'[A-Z]\' | cut -d \':\' -f1-5)
maclast=$(ifconfig eth0|grep HWaddr|awk \'{print $5}\'| tr \'[a-z]\' \'[A-Z]\' | cut -d \':\' -f6)
echo \"Mac address= $mac:$maclast\"
decmac=$(echo \"ibase=16; $maclast\"|bc)
echo $decmac
if [ $decmac -eq \'241\' ]
then
macinc=\'00\'
else
incout=`expr $decmac + 1 `
macinc=$(echo \"obase=16; $incout\"|bc)
fi
echo \"Mac address= $mac:$macinc\"
输出:
Mac地址= 00:19:D1:F6:F7:FF
Mac地址= 00:19:D1:F6:F7:00
,将MAC地址增加1:
#!/bin/sh
mac=$(ifconfig eth0|grep HWaddr|awk \'{print $5}\'| tr \'[a-z]\' \'[A-Z]\' | cut -d \':\' -f1-5)
maclast=$(ifconfig eth0|grep HWaddr|awk \'{print $5}\'| tr \'[a-z]\' \'[A-Z]\' | cut -d \':\' -f6)
echo \"Mac address= $mac:$maclast\"
hexmac=$(echo \"ibase=16; $maclast\"|bc)
incout=`expr $hexmac + 1 `
macinc=$(echo \"obase=16; $incout\"|bc)
echo \"Mac address= $mac:$macinc\"
输出:
Mac地址= 00:19:D1:F6:F7:F1
Mac地址= 00:19:D1:F6:F7:F2
,下载Net :: Mac,并将其作为模块推送到脚本中
/tydel.pl
/Net
/Mac.pl
,红宝石:
def gen_next_mac(base_mac,rowindex)
mac_ints = base_mac.split(\':\').map {|s| s.to_i(16).to_s(10).to_i}
mac_ints[5] += rowindex
if mac_ints[5] > 255
mac_ints[5] = mac_ints[5]%255
mac_ints[4] = mac_ints[4] + mac_ints[5]/255
end
if mac_ints[4] > 255
mac_ints[4] = mac_ints[4]%255
mac_ints[3] = mac_ints[3] + mac_ints[4]/255
end
if mac_ints[3] > 255
mac_ints[3] = mac_ints[3]%255
mac_ints[2] = mac_ints[2] + mac_ints[3]/255
end
if mac_ints[2] > 255
mac_ints[2] = mac_ints[2]%255
mac_ints[1] = mac_ints[1] + mac_ints[2]/255
end
if mac_ints[1] > 255
mac_ints[1] = mac_ints[1]%255
mac_ints[0] = mac_ints[0] + mac_ints[1]/255
end
return mac_ints.map {|i| \'%02x\' %i }.join(\':\')
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。