install
source · Clone the upstream repo
git clone https://github.com/chaterm/terminal-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/chaterm/terminal-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/network/traffic-analysis" ~/.claude/skills/chaterm-terminal-skills-traffic-analysis && rm -rf "$T"
manifest:
network/traffic-analysis/SKILL.mdsource content
流量分析与抓包
概述
tcpdump、Wireshark、流量分析与网络诊断技能。
tcpdump
基础用法
# 监听所有接口 tcpdump -i any # 指定接口 tcpdump -i eth0 # 详细输出 tcpdump -v tcpdump -vv tcpdump -vvv # 显示 ASCII tcpdump -A # 显示十六进制 tcpdump -X tcpdump -XX # 不解析主机名 tcpdump -n # 不解析端口名 tcpdump -nn
过滤表达式
# 主机过滤 tcpdump host 192.168.1.100 tcpdump src host 192.168.1.100 tcpdump dst host 192.168.1.100 # 网段过滤 tcpdump net 192.168.1.0/24 # 端口过滤 tcpdump port 80 tcpdump src port 80 tcpdump dst port 443 tcpdump portrange 8000-9000 # 协议过滤 tcpdump tcp tcpdump udp tcpdump icmp tcpdump arp # 组合过滤 tcpdump 'host 192.168.1.100 and port 80' tcpdump 'src 192.168.1.100 and dst port 443' tcpdump 'tcp and (port 80 or port 443)' tcpdump 'not port 22'
保存与读取
# 保存到文件 tcpdump -w capture.pcap tcpdump -w capture.pcap -c 1000 # 限制包数 # 读取文件 tcpdump -r capture.pcap tcpdump -r capture.pcap -nn # 轮转文件 tcpdump -w capture-%H%M%S.pcap -G 3600 # 每小时 tcpdump -w capture.pcap -C 100 # 每 100MB
高级过滤
# TCP 标志 tcpdump 'tcp[tcpflags] & tcp-syn != 0' tcpdump 'tcp[tcpflags] & tcp-rst != 0' tcpdump 'tcp[tcpflags] == tcp-syn' # HTTP 请求 tcpdump -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' # DNS 查询 tcpdump -i any 'udp port 53' # 大包 tcpdump 'greater 1000' tcpdump 'less 100'
tshark (Wireshark CLI)
基础用法
# 安装 apt install tshark # 监听 tshark -i eth0 # 指定过滤器 tshark -i eth0 -f "port 80" # 显示过滤器 tshark -i eth0 -Y "http"
字段提取
# 提取特定字段 tshark -r capture.pcap -T fields -e ip.src -e ip.dst -e tcp.port # HTTP 请求 tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri # DNS 查询 tshark -r capture.pcap -Y "dns.qry.name" -T fields -e dns.qry.name
统计分析
# 协议统计 tshark -r capture.pcap -q -z io,phs # 会话统计 tshark -r capture.pcap -q -z conv,tcp # HTTP 统计 tshark -r capture.pcap -q -z http,tree # 端点统计 tshark -r capture.pcap -q -z endpoints,ip
ngrep
基础用法
# 安装 apt install ngrep # 搜索内容 ngrep -q 'GET' port 80 ngrep -q 'password' port 80 # 指定接口 ngrep -d eth0 'pattern' # 忽略大小写 ngrep -qi 'error'
iftop / nethogs
iftop
# 安装 apt install iftop # 基础用法 iftop iftop -i eth0 # 不解析主机名 iftop -n # 显示端口 iftop -P # 过滤 iftop -f "dst port 80"
nethogs
# 安装 apt install nethogs # 按进程显示 nethogs nethogs eth0 # 刷新间隔 nethogs -d 2
常见场景
场景 1:HTTP 流量分析
# 抓取 HTTP 请求 tcpdump -i any -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' # 提取 HTTP 头 tcpdump -i any -A 'tcp port 80' | grep -E "^(GET|POST|HTTP|Host:|Content-)" # tshark 分析 tshark -i any -Y "http.request" -T fields -e http.host -e http.request.method -e http.request.uri
场景 2:DNS 问题排查
# 抓取 DNS tcpdump -i any -nn port 53 # 详细 DNS 信息 tcpdump -i any -vvv port 53 # tshark DNS 分析 tshark -i any -Y "dns" -T fields -e dns.qry.name -e dns.a
场景 3:连接问题诊断
# TCP 握手 tcpdump -i any 'tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0' # 重传 tcpdump -i any 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0' # 连接重置 tcpdump -i any 'tcp[tcpflags] & tcp-rst != 0'
场景 4:带宽分析
# 实时带宽 iftop -i eth0 -P -n # 按进程 nethogs eth0 # 统计流量 tcpdump -i eth0 -w - | pv > /dev/null
故障排查
| 问题 | 排查方法 |
|---|---|
| 丢包 | 检查 tcpdump 统计、网卡队列 |
| 延迟高 | 分析 RTT、重传 |
| 连接失败 | 检查 SYN/RST 包 |
| 带宽占用 | 使用 iftop/nethogs |
# 查看丢包 tcpdump -i eth0 -w /dev/null 2>&1 | grep -i drop # 网卡统计 ethtool -S eth0 | grep -i error cat /proc/net/dev # 连接状态 ss -s netstat -s | grep -i retrans