소스 정보
- 저장소
- aaione/everything-claude-code-zh
- 최근 소스 활동
- 2026년 5월 31일 02:24
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 27
- 포크
- 13
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/aaione/everything-claude-code-zh --skill network-interface-health명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | network-interface-health |
| description | 诊断路由器、交换机和 Linux 主机上的接口错误、丢包、CRC、双工不匹配、抖动、速度协商问题和计数器趋势。 |
| origin | community |
当网络症状可能由物理链路、交换机端口、电缆、收发器、双工设置或拥塞接口引起时使用此技能。
ifInErrors、ifOutErrors 或 ifOutDiscards。接口计数器是证据,但趋势比绝对数字更重要。捕获基线,等待测量间隔,再次捕获,然后比较增量。
show interfaces <interface>
show interfaces <interface> status
show logging | include <interface>|changed state|line protocol
在 Linux 主机上:
ip -s link show <interface>
ethtool <interface>
ethtool -S <interface>
| 计数器 | 含义 | 常见原因 |
|---|---|---|
| CRC | 接收帧校验和失败 | 坏电缆、脏光纤、坏光模块、双工不匹配 |
| input errors | 聚合接收端错误 | 在得出结论之前检查子计数器 |
| runts | 低于最小以太网大小的帧 | 双工不匹配、冲突域、故障网卡 |
| giants | 大于预期 MTU 的帧 | MTU 不匹配或巨型帧边界 |
| input drops | 设备无法接受入站数据包 | 突发、超额订阅、CPU 路径、队列压力 |
| output drops | 出站队列丢弃数据包 | 拥塞、QoS 策略、上行链路不足 |
| resets | 接口硬件重置 | 抖动、keepalive、驱动程序、光模块、电源 |
| collisions | 以太网冲突计数器 | 半双工或协商不匹配 |
在双方都支持的现代以太网链路上优先使用自动协商。如果一方必须固定,请在双方明确配置并记录原因。永远不要在一方混合固定速度/双工与另一方的自动。
show interfaces <interface> | include duplex|speed
将每个接口块从一个头部切片到下一个。不要使用任意字符窗口;大型接口块可能导致计数器丢失或分配给错误的端口。
import re
from typing import Any
HEADER_RE = re.compile(
r"^(?P<name>\S+) is (?P<status>(?:administratively )?down|up), "
r"line protocol is (?P<protocol>up|down)",
re.I | re.M,
)
ERROR_RE = re.compile(r"(?P<input>\d+) input errors, (?P<crc>\d+) CRC", re.I)
DROP_RE = re.compile(r"(?P<output>\d+) output errors", re.I)
DUPLEX_RE = re.compile(r"(?P<duplex>Full|Half|Auto)-duplex,\s+(?P<speed>[^,]+)", re.I)
def parse_show_interfaces(raw: str) -> list[dict[str, Any]]:
headers = list(HEADER_RE.finditer(raw))
interfaces = []
for index, header in enumerate(headers):
end = headers[index + 1].start() if index + 1 < len(headers) else len(raw)
block = raw[header.start():end]
errors = ERROR_RE.search(block)
drops = DROP_RE.search(block)
duplex = DUPLEX_RE.search(block)
interfaces.append({
"name": header.group("name"),
"status": header.group("status"),
"protocol": header.group("protocol"),
"duplex": duplex.group("duplex") if duplex else "unknown",
"speed": duplex.group().strip() duplex ,
: (errors.group()) errors ,
: (errors.group()) errors ,
: (drops.group()) drops ,
})
interfaces
network-troubleshooternetwork-config-validationhomelab-network-setup