traffic-analysis

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

流量分析与抓包

流量分析与抓包

概述

概述

tcpdump、Wireshark、流量分析与网络诊断技能。
tcpdump、Wireshark、流量分析与网络诊断技能。

tcpdump

tcpdump

基础用法

基础用法

bash
undefined
bash
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
undefined
tcpdump -nn
undefined

过滤表达式

过滤表达式

bash
undefined
bash
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'
undefined
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'
undefined

保存与读取

保存与读取

bash
undefined
bash
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
undefined
tcpdump -w capture-%H%M%S.pcap -G 3600 # 每小时 tcpdump -w capture.pcap -C 100 # 每 100MB
undefined

高级过滤

高级过滤

bash
undefined
bash
undefined

TCP 标志

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'
undefined
tcpdump 'greater 1000' tcpdump 'less 100'
undefined

tshark (Wireshark CLI)

tshark (Wireshark CLI)

基础用法

基础用法

bash
undefined
bash
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"
undefined
tshark -i eth0 -Y "http"
undefined

字段提取

字段提取

bash
undefined
bash
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
undefined
tshark -r capture.pcap -Y "dns.qry.name" -T fields -e dns.qry.name
undefined

统计分析

统计分析

bash
undefined
bash
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
undefined
tshark -r capture.pcap -q -z endpoints,ip
undefined

ngrep

ngrep

基础用法

基础用法

bash
undefined
bash
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'
undefined
ngrep -qi 'error'
undefined

iftop / nethogs

iftop / nethogs

iftop

iftop

bash
undefined
bash
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"
undefined
iftop -f "dst port 80"
undefined

nethogs

nethogs

bash
undefined
bash
undefined

安装

安装

apt install nethogs
apt install nethogs

按进程显示

按进程显示

nethogs nethogs eth0
nethogs nethogs eth0

刷新间隔

刷新间隔

nethogs -d 2
undefined
nethogs -d 2
undefined

常见场景

常见场景

场景 1:HTTP 流量分析

场景 1:HTTP 流量分析

bash
undefined
bash
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
undefined
tshark -i any -Y "http.request" -T fields -e http.host -e http.request.method -e http.request.uri
undefined

场景 2:DNS 问题排查

场景 2:DNS 问题排查

bash
undefined
bash
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
undefined
tshark -i any -Y "dns" -T fields -e dns.qry.name -e dns.a
undefined

场景 3:连接问题诊断

场景 3:连接问题诊断

bash
undefined
bash
undefined

TCP 握手

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'
undefined
tcpdump -i any 'tcp[tcpflags] & tcp-rst != 0'
undefined

场景 4:带宽分析

场景 4:带宽分析

bash
undefined
bash
undefined

实时带宽

实时带宽

iftop -i eth0 -P -n
iftop -i eth0 -P -n

按进程

按进程

nethogs eth0
nethogs eth0

统计流量

统计流量

tcpdump -i eth0 -w - | pv > /dev/null
undefined
tcpdump -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
undefined
ss -s netstat -s | grep -i retrans
undefined