| name | traffic-analysis |
| description | 流量分析与抓包 |
| version | 1.0.0 |
| author | terminal-skills |
| tags | ["networking","tcpdump","wireshark","packet-capture","traffic"] |
流量分析与抓包
概述
tcpdump、Wireshark、流量分析与网络诊断技能。
tcpdump
基础用法
tcpdump -i any
tcpdump -i eth0
tcpdump -v
tcpdump -vv
tcpdump -vvv
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
高级过滤
tcpdump 'tcp[tcpflags] & tcp-syn != 0'
tcpdump 'tcp[tcpflags] & tcp-rst != 0'
tcpdump 'tcp[tcpflags] == tcp-syn'
tcpdump -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
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
tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri
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
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 流量分析
tcpdump -i any -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump -i any -A 'tcp port 80' | grep -E "^(GET|POST|HTTP|Host:|Content-)"
tshark -i any -Y "http.request" -T fields -e http.host -e http.request.method -e http.request.uri
场景 2:DNS 问题排查
tcpdump -i any -nn port 53
tcpdump -i any -vvv port 53
tshark -i any -Y "dns" -T fields -e dns.qry.name -e dns.a
场景 3:连接问题诊断
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