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