Communitygithub.com

网络配置验证

在部署前对路由器和交换机配置进行预检,包括危险命令、重复地址、子网重叠、过期引用、管理平面风险及IOS式安全卫生检查。适合在审查路由或交换机配置准备部署时使用。

网络配置验证 是什么?

网络配置验证技能(Network Config Validation)用于在网络变更窗口或自动化任务接触生产设备之前,对配置进行多层预检。它不试图替代完整的设备解析器,而是通过正则匹配和简单的网络计算,快速发现危险命令(如reload、erase、format等)、重复IP地址、子网重叠、未定义的ACL/route-map/prefix-list引用、以及VTY管理平面暴露和SNMP/SSH等安全卫生问题。该技能提供Python代码片段,支持对Cisco IOS和IOS-XE风格的配置进行审查,并可集成到Netmiko、NAPALM、Ansible等自动化工具的预检门禁中。它输出基于行的告警列表,最终决策仍需网络工程师介入,从而平衡自动化效率与人工验证的严谨性。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/network-config-validation

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

网络配置验证 是做什么的?

在变更窗口或自动化脚本触及生产设备之前,使用本技能审查网络配置。

何时使用

  • 在部署前审查 Cisco IOS 或 IOS-XE 风格的配置片段。
  • 审计脚本或模板生成的配置。
  • 查找危险命令、重复 IP 地址或子网重叠。
  • 检查 ACL、route-map、prefix-list 或 line 策略是否被引用但未定义。
  • 构建轻量级网络自动化预检脚本。

工作原理

将配置验证视为分层证据,而非完整的解析器。正则检查可提供预检警告,但最终批准仍需网络工程师审查意图、平台语法和回滚步骤。

按以下顺序验证:

  1. 破坏性命令。
  2. 凭据和管理平面暴露。
  3. 重复地址和重叠子网。
  4. 对 ACL、route-map、prefix-list 和接口的过期引用。
  5. 操作卫生,如 NTP、时间戳、远程日志和横幅。

危险命令检测

import re

DANGEROUS_PATTERNS: list[tuple[re.Pattern[str], str]] = [
    (re.compile(r"\breload\b", re.I), "重载会导致停机"),
    (re.compile(r"\berase\s+(startup|nvram|flash)", re.I), "擦除持久化存储"),
    (re.compile(r"\bformat\b", re.I), "格式化设备文件系统"),
    (re.compile(r"\bno\s+router\s+(bgp|ospf|eigrp)\b", re.I), "移除路由进程"),
    (re.compile(r"\bno\s+interface\s+\S+", re.I), "移除接口配置"),
    (re.compile(r"\baaa\s+new-model\b", re.I), "更改认证行为"),
    (re.compile(r"\bcrypto\s+key\s+(zeroize|generate)\b", re.I), "更改设备SSH密钥"),
]

def find_dangerous_commands(lines: list[str]) -> list[dict[str, str | int]]:
    findings = []
    for line_number, line in enumerate(lines, start=1):
        stripped = line.strip()
        for pattern, reason in DANGEROUS_PATTERNS:
            if pattern.search(stripped):
                findings.append({
                    "line": line_number,
                    "command": stripped,
                    "reason": reason,
                })
    return findings

重复IP与子网重叠

import ipaddress
import re
from collections import Counter

IP_ADDRESS_RE = re.compile(
    r"^\s*ip address\s+"
    r"(?P<ip>\d{1,3}(?:\.\d{1,3}){3})\s+"
    r"(?P<mask>\d{1,3}(?:\.\d{1,3}){3})\b",
    re.I | re.M,
)

def extract_interfaces(config: str) -> list[dict[str, str]]:
    results = []
    current = None
    for line in config.splitlines():
        if line.startswith("interface "):
            current = line.split(maxsplit=1)[1]
            continue
        match = IP_ADDRESS_RE.match(line)
        if current and match:
            ip = match.group("ip")
            mask = match.group("mask")
            network = ipaddress.ip_interface(f"{ip}/{mask}").network
            results.append({"interface": current, "ip": ip, "network": str(network)})
    return results

def find_duplicate_ips(config: str) -> list[str]:
    ips = [entry["ip"] for entry in extract_interfaces(config)]
    counts = Counter(ips)
    return sorted(ip for ip, count in counts.items() if count > 1)

def find_subnet_overlaps(config: str) -> list[tuple[str, str]]:
    networks = [ipaddress.ip_network(entry["network"]) for entry in extract_interfaces(config)]
    overlaps = []
    for index, left in enumerate(networks):
        for right in networks[index + 1:]:
            if left.overlaps(right):
                overlaps.append((str(left), str(right)))
    return overlaps

管理平面检查

按段解析VTY块,确保access-class检查不会溢出到无关的行。

import re

def iter_blocks(config: str, starts_with: str) -> list[str]:
    blocks = []
    current: list[str] = []
    for line in config.splitlines():
        if line.startswith(starts_with):
            if current:
                blocks.append("\n".join(current))
            current = [line]
            continue
        if current:
            if line and not line.startswith(" "):
                blocks.append("\n".join(current))
                current = []
            else:
                current.append(line)
    if current:
        blocks.append("\n".join(current))
    return blocks

def check_vty_blocks(config: str) -> list[str]:
    issues = []
    for block in iter_blocks(config, "line vty"):
        if re.search(r"transport\s+input\s+.*telnet", block, re.I):
            issues.append("VTY允许Telnet,应仅使用SSH。")
        if not re.search(r"\baccess-class\s+\S+\s+in\b", block, re.I):
            issues.append("VTY块没有入站access-class源限制。")
        if not re.search(r"\bexec-timeout\s+\d+\s+\d+\b", block, re.I):
            issues.append("VTY块没有显式的exec-timeout。")
    return issues

安全卫生检查

SECURITY_PATTERNS = [
    (re.compile(r"\bsnmp-server community\s+(public|private)\b", re.I),
     "配置了默认SNMP团体字"),
    (re.compile(r"\bsnmp-server community\s+\S+", re.I),
     "配置了SNMPv2团体字串,建议使用SNMPv3 authPriv"),
    (re.compile(r"\bip ssh version 1\b", re.I),
     "启用了SSH版本1"),
    (re.compile(r"\benable password\b", re.I),
     "存在enable密码,应使用enable secret"),
    (re.compile(r"\busername\s+\S+\s+password\b", re.I),
     "本地用户名使用密码而非secret"),
]

BEST_PRACTICE_PATTERNS = [
    (re.compile(r"\bntp server\b", re.I), "NTP服务器"),
    (re.compile(r"\bservice timestamps\b", re.I), "日志时间戳"),
    (re.compile(r"\blogging\s+\S+", re.I), "日志目标或缓冲区"),
    (re.compile(r"\bsnmp-server group\s+\S+\s+v3\s+priv\b", re.I), "SNMPv3 authPriv组"),
    (re.compile(r"\bbanner\s+(login|motd)\b", re.I), "登录横幅"),
]

def check_security(config: str) -> list[str]:
    return [message for pattern, message in SECURITY_PATTERNS if pattern.search(config)]

def check_missing_hygiene(config: str) -> list[str]:
    return [
        f"缺少{description}"
        for pattern, description in BEST_PRACTICE_PATTERNS
        if not pattern.search(config)
    ]

示例

变更窗口预检

  1. 对待粘贴的确切片段运行危险命令检查。
  2. 对完整候选配置运行重复IP和子网重叠检查。
  3. 确认每个引用的ACL、route-map和prefix-list都存在。
  4. 在进行任何管理平面变更之前,确认回滚命令和带外访问。

自动化预检

在Netmiko、NAPALM、Ansible或供应商API自动化推送生成的配置之前,将验证作为阻塞门禁。对危险命令和凭据实行失败关闭。对变更范围之外的最佳实践差距给出警告。

反模式

  • 将正则验证视为设备解析器。
  • 未进行dry-run差异比较就应用生成的配置。
  • 将推荐SNMPv2团体字串作为监控需求。
  • 使用正则检查VTY块时意外跨越不相关的段。
  • 通过禁用ACL而不是读取计数器/日志来测试防火墙行为。

参见

  • 智能体:network-config-reviewer
  • 智能体:network-troubleshooter
  • 技能:network-interface-health

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

相关技能