You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证Cisco交换机ARP输出文件有效性并自动重试SSH命令

如何实现Cisco交换机ARP输出的有效性检查与自动重试逻辑?

可以用Bash脚本实现该逻辑,核心是每次执行SSH命令后对输出文件做两项验证:表头合法性、最后一行IP及格式合法性,不满足则重复执行直至符合要求。

完整脚本示例

#!/bin/bash

# 配置目标参数
SWITCH="myswitch"
OUTPUT_FILE="myswitch.txt"
VALID_IPS=("1.1.1.254" "1.1.1.253")

# 验证ARP输出是否符合要求的函数
validate_arp_output() {
    # 检查文件是否存在且非空
    if [ ! -s "$OUTPUT_FILE" ]; then
        echo "错误:输出文件为空或不存在"
        return 1
    fi

    # 验证表头格式(匹配Cisco 'show ip arp'标准表头,可按需调整正则)
    HEADER_LINE=$(head -n 1 "$OUTPUT_FILE")
    if ! echo "$HEADER_LINE" | grep -qE "^Protocol\s+Address\s+Age \(min\)\s+Hardware Addr\s+Type\s+Interface$"; then
        echo "错误:表头格式不符合要求"
        return 1
    fi

    # 获取最后一行有效数据(跳过空行)
    LAST_LINE=$(tail -n 1 "$OUTPUT_FILE" | sed '/^[[:space:]]*$/d')
    if [ -z "$LAST_LINE" ]; then
        echo "错误:最后一行无有效数据"
        return 1
    fi

    # 提取并验证IP合法性
    IP=$(echo "$LAST_LINE" | awk '{print $2}')
    if [[ ! " ${VALID_IPS[@]} " =~ " ${IP} " ]]; then
        echo "错误:最后一行IP $IP 不在合法列表中"
        return 1
    fi

    # 验证最后一行格式是否匹配两种合法示例
    if ! echo "$LAST_LINE" | grep -qE "^Internet\s+$IP\s+0\s+Incomplete\s+ARPA$" && \
       ! echo "$LAST_LINE" | grep -qE "^Internet\s+$IP\s+[0-9]+\s+([0-9a-fA-F]{2}\.){5}[0-9a-fA-F]{2}\s+ARPA\s+Vlan[0-9]+$"; then
        echo "错误:最后一行格式不符合要求"
        return 1
    fi

    # 所有验证通过
    return 0
}

# 循环执行并验证,直到符合要求
while true; do
    echo "正在获取ARP信息..."
    ssh "$SWITCH" 'show ip arp' > "$OUTPUT_FILE"

    if validate_arp_output; then
        echo "ARP输出验证通过!"
        break
    else
        echo "验证失败,10秒后重试..."
        sleep 10
    fi
done

关键逻辑说明

  • 参数配置:开头的变量可根据实际环境修改,VALID_IPS定义了允许的最后一行IP范围。
  • 表头验证:通过正则匹配Cisco交换机show ip arp的标准表头,若你的设备表头有差异,可自行调整正则表达式。
  • 最后一行验证:
    1. 提取最后一行的IP,检查是否在合法列表内;
    2. 用正则匹配两种合法格式:一种是ARP未完成(Incomplete)的简化格式,另一种是包含MAC地址和VLAN接口的完整格式。
  • 自动重试:通过while true循环实现持续重试,验证失败后等待10秒再重新执行SSH命令,直到验证通过。

使用注意事项

  1. 确保本地机器已配置SSH免密登录到目标交换机,避免每次执行都需要输入密码;
  2. 若网络不稳定,可调整sleep的等待时长;
  3. 可按需添加重试次数限制(比如最多重试5次后退出),避免无限循环。

内容的提问来源于stack exchange,提问作者Saeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:42:44