如何通过Netconf API获取聚合成员接口信息?
Python脚本略,接口聚合情况如下:
使用API为:
<LAGG>
<LAGGGroups>
<LAGGGroup>
<GroupId></GroupId>
<LinkMode></LinkMode>
<IfIndex></IfIndex>
<IfName></IfName>
<MemberList></MemberList>
</LAGGGroup>
</LAGGGroups>
</LAGG>
结果为:'Route-Aggregation23': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD'
1、找个Linux系统(在线工具不行,可以找在线的Linux系统站或配置虚拟机),执行命令:
echo 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD' | base64 --decode | hexdump -C
结果为:
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000040 00 03 |..|
00000042
这个位图均为16进制,转换时以16进制为基准
1. 最左00000040,16转10为64
2. 右侧\0 003(bash视图可以看到是00 03),16 转2进制为 0000 0000 0000 0011
根据API文档
二进制左边第一位最高,右边第一位最低,最高位代表最低端口,所以左边第一位是端口1,第二位端口2,以此类推
那么00 03 就代指15和16两个端口索引
所以成员端口索引为:
64 * 8 + 15 == 527
64 * 8 + 16 == 528
(由于位图每组都是两个16进制数,如03、00,所以是乘8)
进入probe视图,使用display system internal ifmgr list命令查看接口索引:
得出该聚合口中的成员端口是2/0/13、2/0/14
def decode_MemberList(memberlist:str) -> list :
ifs_list_hex = base64.b64decode(memberlist).hex()
ifslist = [ifs_list_hex[i:i + 2] for i in range(0, len(ifs_list_hex), 2)]
a = 0
prefix_interface = 0
return_list = []
for i in ifslist:
if i == '00':
a += 1
if i != '00':
prefix_interface = a * 8
print(prefix_interface)
hex_str = int(i, 16)
print(hex_str)
interface_index = bin(hex_str)[2:].zfill(8)
b = 0
for i in interface_index:
b += 1
if i != '0':
return_list.append(prefix_interface + b)
a += 1
return return_list
(0)
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作