递增MAC地址

如何解决递增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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?