我正在尝试编写一个 Cisco 命令行解析器来自动替换 Cisco 控制台输出的图形用户界面。我已经能够使用正则表达式从 ping 输出中获取 ping 时间并绘制它,但现在我坚持使用其他命令(如“显示接口”命令)的更详细输出,任何想法如何解析显示接口命令输出并提取我需要的所有有用信息?
这是一个“显示接口”输出示例:
FastEthernet0/0 已启动,线路协议已启动 硬件为 MV96340 以太网,地址为 0018.189d.1df0 (bia 0018.189d.1df0) 说明:IP+ 连接 Internet 地址为 164.128.251.50/24 MTU 1500 字节,BW 100000 Kbit/sec, DLY 100 微秒,可靠性 255/255,txload 1/255,rxload 1/255 封装 ARPA,未设置环回 Keepalive 设置(10 秒)全双工,100Mb/s,100BaseTX/FX ARP 类型:ARPA,ARP 超时 04: 00:00 上次输入 00:00:00,输出 00:00:00,输出挂起从不上次清除“显示接口”计数器从不输入队列:0/75/3718/0(大小/最大/丢弃/刷新);总输出丢弃:0 排队策略:fifo 输出队列:0/40(大小/最大值) 5 分钟输入速率 2000 位/秒,6 数据包/秒 5 分钟输出速率 3000 位/秒,10 数据包/秒 152817108 数据包输入,loopback not set Keepalive set (10 sec) Auto-duplex, Auto Speed, 100BaseTX/FX ARP type: ARPA, ARP Timeout 04:00:00 Last input never, output never, output hang never last clearing "show interface" counters never输入队列:0/75/0/0 (size/max/drops/flushes);总输出丢弃:0 排队策略:fifo 输出队列:0/40(大小/最大值) 5 分钟输入速率 0 位/秒,0 数据包/秒 5 分钟输出速率 0 位/秒,0 数据包/秒 0 数据包输入, 0 个字节接收到 0 个广播(0 个 IP 多播)--更多-- 0 个矮小的,0 个巨人,0 个节流阀--更多-- 0 个输入错误,0 CRC,0 帧,0 溢出,0 忽略 0 看门狗 0 输入数据包带运球检测到条件 0 个数据包输出,0 个字节,0 个欠载 0 个输出错误,0 个冲突,0 接口重置 0 未知协议丢弃 0 babbles,0 延迟冲突,0 延迟 0 丢失载波,0 无载波 0 输出缓冲区故障,0 输出缓冲区换出 Tunnel0 已启动,线路协议已启动 硬件是 Tunnel 接口未编号。使用 FastEthernet0/0 (164.128.251.50) 的地址 MTU 17912 字节,BW 100 Kbit/sec,DLY 50000 微秒,可靠性 255/255,txload 1/255,rxload 1/255 封装隧道,环回未设置 Keepalive 未设置隧道源164.128.251.50 (FastEthernet0/0),目标 164.128.32.1 隧道子块:src-track:与 FastEthernet0/0 关联的 Tunnel0 源跟踪子块 具有源 FastEthernet0/0、1 个成员(包括迭代器)的隧道集,在接口上 Tunnel protocol/transport PIM/IPv4 --More-- Tunnel TOS/Traffic Class 0xC0, Tunnel TTL 255 --More-- Tunnel transport MTU 1472 bytes 隧道仅传输 隧道传输带宽 8000 (kbps) 隧道接收带宽 8000 ( kbps) Last input never, output 28w1d, output hang never Last clearing of "show interface" counters never Input queue: 0/75/0/0 (size/max/drops/flushes); 总输出丢弃:0 排队策略:fifo 输出队列:0/0(大小/最大值) 5 分钟输入速率 0 位/秒,0 数据包/秒 5 分钟输出速率 0 位/秒,0 数据包/秒 0 数据包输入, 0 字节,0 未接收缓冲区 0 个广播(0 个 IP 多播) 0 个 runts,0 个 Giants,0 个节流阀 0 个输入错误,0 CRC,0 帧,0 溢出,0 被忽略,0 中止 44 个数据包输出,2464 字节,由 SSLVPN 上下文 TEST 在内部创建 MTU 1406 字节,BW 100000 Kbit/sec,DLY 100000 usec,--更多-- 可靠性 255/255,txload 1/255,rxload 1/255 --More-- 封装 SSL 内部 vaccess Vaccess 状态 0x0,环回未设置 Keepalive设置(10 秒) DTR 在复位时脉冲 5 秒 最后输入从不,从不输出,从不挂起 最后清除“显示接口”计数器 29w5d 输入队列:0/75/0/0(大小/最大/丢弃/刷新); 总输出丢弃:0 排队策略:fifo 输出队列:0/40(大小/最大值) 5 分钟输入速率 0 位/秒,0 数据包/秒 5 分钟输出速率 0 位/秒,0 数据包/秒 0 数据包输入, 0 字节,0 未接收缓冲区 0 个广播(0 个 IP 多播) 0 个 runts,0 个 Giants,0 个节流阀 0 个输入错误,0 CRC,0 帧,0 溢出,0 忽略,0 中止 0 个数据包输出,0 字节,
Interface_Long_Split = Regex.Split(Result_Long, "(POS[0-9] /[0-9] /[0-9] )|(POS[0-9] /[0-9] )|(GigabitEthernet[0- 9]/[0-9])|(FastEthernet[0-9]/[0-9] )") Dim count As Integer = 0 For i = 0 To Interface_Long_Split.Length If Regex.IsMatch(Interface_Long_Split(i), "(POS[0-9] /[0-9] /[0-9] )|(POS[0-9] /[0-9] )|(千兆以太网[0-9]/[0-9] )|(FastEthernet[0-9]/[0-9] )") = True Then ReDim Preserve Interfaces_List(count) Interfaces_List(count) = Interface_Long_Split(i) count = count + 1 End If