1. 工具介绍与准备工作
1.1 tcpdump 简介
tcpdump 是 Linux 系统中最强大的命令行网络抓包工具,它能够捕获网络接口上的数据包,并以可读的形式显示出来,或者保存到文件中供后续分析。
1.2 Wireshark 简介
Wireshark 是一个图形化的网络协议分析器,可以深入检查数百种协议的数据包,具有强大的过滤器和统计分析功能。
1.3 系统环境要求
- Linux 操作系统(本教程以 Ubuntu 22.04 为例)
- root 或 sudo 权限
- 至少 100MB 可用磁盘空间
1.4 安装必要的工具
创建安装脚本文件:install_tools.sh
bash
#!/bin/bash
# 更新系统包列表
sudo apt update
# 安装 tcpdump
sudo apt install -y tcpdump
# 安装 Wireshark(非交互模式,避免弹窗)
sudo DEBIAN_FRONTEND=noninteractive apt install -y wireshark
# 将当前用户添加到 wireshark 组,避免需要 root 权限
sudo usermod -a -G wireshark $USER
# 安装辅助工具
sudo apt install -y curl net-tools
# 显示安装版本
echo "tcpdump 版本:"
tcpdump --version | head -n 1
echo "Wireshark 版本:"
wireshark --version | head -n 1
echo "安装完成!请重新登录以使组权限生效"
给脚本执行权限并运行:
bash
chmod +x install_tools.sh
./install_tools.sh
2. 网络接口识别与基础配置
2.1 查看网络接口
创建查看接口脚本:list_interfaces.sh
bash
#!/bin/bash
echo "=== 系统网络接口列表 ==="
echo "1. 使用 ip 命令查看:"
ip addr show | grep -E "^[0-9]+:" | awk '{print $2}' | tr -d ':'
echo -e "\n2. 使用 ifconfig 命令查看:"
ifconfig -a | grep -E "^[a-zA-Z0-9]+:" | awk '{print $1}' | tr -d ':'
echo -e "\n3. 使用 tcpdump 查看可用接口:"
tcpdump -D
echo -e "\n4. 详细的接口信息:"
for interface in $(ip link show | grep -E "^[0-9]+:" | awk -F: '{print $2}' | tr -d ' '); do
echo "接口: $interface"
ip addr show $interface | grep -E "inet|state" | sed 's/^/ /'
done
运行脚本:
bash
chmod +x list_interfaces.sh
./list_interfaces.sh
2.2 测试网络连接
创建网络测试脚本:network_test.sh
bash
#!/bin/bash
# 测试目标(Google DNS)
TARGET="8.8.8.8"
WEBSITE="www.google.com"
echo "=== 网络连接测试 ==="
echo "1. 测试本地网络接口:"
ip route show default
echo -e "\n2. Ping 测试:"
ping -c 3 $TARGET
echo -e "\n3. DNS 解析测试:"
nslookup $WEBSITE
echo -e "\n4. HTTP 连接测试:"
curl -I --connect-timeout 5 http://$WEBSITE 2>/dev/null | head -n 1
echo -e "\n5. 端口连接测试:"
nc -zv $WEBSITE 80 2>&1
nc -zv $WEBSITE 443 2>&1
3. tcpdump 基础抓包技术
3.1 基础抓包命令
创建基础抓包示例:basic_capture.sh
bash
#!/bin/bash
# 设置默认接口
INTERFACE="${1:-eth0}"
OUTPUT_FILE="basic_capture_$(date +%Y%m%d_%H%M%S).pcap"
echo "开始在接口 $INTERFACE 上抓包,输出文件: $OUTPUT_FILE"
echo "按 Ctrl+C 停止抓包"
# 基础抓包命令
sudo tcpdump -i $INTERFACE -w $OUTPUT_FILE
echo "抓包完成!文件保存为: $OUTPUT_FILE"
echo "文件大小: $(du -h $OUTPUT_FILE | cut -f1)"
3.2 高级抓包选项
创建高级抓包脚本:advanced_capture.sh
bash
#!/bin/bash
INTERFACE="${1:-eth0}"
DURATION="${2:-60}" # 默认抓包60秒
SNAPLEN="${3:-1514}" # 快照长度
BUFFER_SIZE="${4:-128}" # 缓冲区大小(MB)
OUTPUT_FILE="advanced_capture_$(date +%Y%m%d_%H%M%S).pcap"
echo "=== 高级抓包配置 ==="
echo "接口: $INTERFACE"
echo "持续时间: $DURATION 秒"
echo "快照长度: $SNAPLEN 字节"
echo "缓冲区: $BUFFER_SIZE MB"
echo "输出文件: $OUTPUT_FILE"
# 高级抓包命令
sudo tcpdump \
-i $INTERFACE \
-w $OUTPUT_FILE \
-s $SNAPLEN \
-B $BUFFER_SIZE \
-G $DURATION \
-W 1 \
-v
echo "高级抓包完成!"
echo "统计信息:"
tcpdump -r $OUTPUT_FILE -q -n 2>/dev/null | wc -l | awk '{print "捕获数据包数量: " $1}'
3.3 实时数据包分析
创建实时分析脚本:realtime_analysis.sh
bash
#!/bin/bash
INTERFACE="${1:-eth0}"
HOST="$(hostname -I | awk '{print $1}')"
echo "=== 实时网络分析 ==="
echo "监控接口: $INTERFACE"
echo "本机IP: $HOST"
echo "按 Ctrl+C 停止监控"
# 实时显示 TCP 连接
echo -e "\n1. TCP 连接监控:"
sudo tcpdump -i $INTERFACE -n "tcp" 2>/dev/null | \
awk '
{
if ($1 ~ /[0-9]+:/) {
timestamp = $1;
src = $3;
dst = $5;
flags = $7;
if (src ~ /\./) {
split(src, s, ".");
src_ip = s[1]"."s[2]"."s[3]"."s[4];
src_port = s[5];
}
if (dst ~ /\./) {
split(dst, d, ".");
dst_ip = d[1]"."d[2]"."d[3]"."d[4];
dst_port = d[5];
}
printf "时间: %s | 源: %s:%s -> 目标: %s:%s | 标志: %s\n",
timestamp, src_ip, src_port, dst_ip, dst_port, flags;
}
}'
4. tcpdump 过滤器详解
4.1 常用过滤器示例
创建过滤器示例文件:filter_examples.sh
bash
#!/bin/bash
INTERFACE="${1:-eth0}"
DURATION=30
echo "=== tcpdump 过滤器示例 ==="
# 1. 按协议过滤
echo "1. 只捕获 HTTP 流量 (端口 80):"
sudo timeout $DURATION tcpdump -i $INTERFACE -A "port 80"
echo -e "\n2. 捕获 HTTPS 流量 (端口 443):"
sudo timeout $DURATION tcpdump -i $INTERFACE -A "port 443"
echo -e "\n3. 捕获 DNS 查询:"
sudo timeout $DURATION tcpdump -i $INTERFACE -v "port 53"
# 4. 按IP地址过滤
echo -e "\n4. 捕获特定主机的流量:"
read -p "输入要监控的IP地址: " TARGET_IP
if [ ! -z "$TARGET_IP" ]; then
sudo timeout $DURATION tcpdump -i $INTERFACE -v "host $TARGET_IP"
fi
# 5. 按网络段过滤
echo -e "\n5. 捕获网络段流量:"
sudo timeout $DURATION tcpdump -i $INTERFACE -v "net 192.168.1.0/24"
# 6. 复杂条件过滤
echo -e "\n6. 捕获来自特定源到特定目标的HTTP流量:"
sudo timeout $DURATION tcpdump -i $INTERFACE "tcp and port 80 and (src host 192.168.1.100 or dst host 192.168.1.100)"
4.2 高级过滤技巧
创建高级过滤器文件:advanced_filters.sh
bash
#!/bin/bash
INTERFACE="${1:-eth0}"
OUTPUT_FILE="filtered_capture_$(date +%Y%m%d_%H%M%S).pcap"
echo "=== 高级过滤器示例 ==="
# 组合过滤器示例
FILTERS=(
"捕获 TCP SYN 包:tcp[13] & 2 != 0"
"捕获 TCP FIN 包:tcp[13] & 1 != 0"
"捕获带有数据的 TCP 包:tcp and greater 60"
"捕获 ICMP 包:icmp"
"捕获广播/多播流量:ether broadcast or ether multicast"
"捕获特定大小的包:greater 1024"
)
for filter in "${FILTERS[@]}"; do
name="${filter%%:*}"
condition="${filter##*:}"
echo -e "\n执行: $name"
echo "条件: $condition"
sudo timeout 10 tcpdump -i $INTERFACE -c 5 "$condition" 2>/dev/null
done
# 保存过滤结果到文件
echo -e "\n保存综合过滤结果到: $OUTPUT_FILE"
sudo timeout 30 tcpdump -i $INTERFACE -w $OUTPUT_FILE \
"(tcp port 80 or tcp port 443 or tcp port 22 or udp port 53)"
echo "过滤抓包完成!"
5. 数据包分析流程
以下是完整的网络数据包分析流程:
6. 实战案例:HTTP 流量分析
6.1 HTTP 请求捕获分析
创建 HTTP 分析脚本:http_analysis.sh
bash
#!/bin/bash
INTERFACE="${1:-eth0}"
OUTPUT_FILE="http_analysis_$(date +%Y%m%d_%H%M%S).pcap"
DURATION=120
echo "=== HTTP 流量分析实战 ==="
echo "开始捕获 HTTP 流量,持续时间: $DURATION 秒"
echo "输出文件: $OUTPUT_FILE"
# 生成一些 HTTP 流量(可选)
echo "生成测试 HTTP 流量..."
curl -s http://httpbin.org/get > /dev/null &
curl -s http://httpbin.org/post -X POST -d "test=data" > /dev/null &
# 捕获 HTTP 流量
sudo timeout $DURATION tcpdump -i $INTERFACE -w $OUTPUT_FILE -s 0 "tcp port 80"
echo "捕获完成!开始分析..."
# 基本分析
echo -e "\n=== 基本统计 ==="
echo "总数据包数: $(tcpdump -r $OUTPUT_FILE 2>/dev/null | wc -l)"
echo -e "\n=== HTTP 请求统计 ==="
tcpdump -r $OUTPUT_FILE -A 2>/dev/null | grep -E "(GET|POST|PUT|DELETE|HEAD) " | \
awk '
{
method = $2;
if (method ~ /^HTTP/) next;
methods[method]++;
total++;
}
END {
for (m in methods) {
printf "方法: %-8s 数量: %d 占比: %.2f%%\n", m, methods[m], (methods[m]/total)*100;
}
printf "总HTTP请求: %d\n", total;
}'
echo -e "\n=== 主机通信统计 ==="
tcpdump -r $OUTPUT_FILE -n 2>/dev/null | awk '
{
if ($1 ~ /IP/) {
src = $3;
dst = $5;
split(src, s, ".");
split(dst, d, ".");
src_host = s[1]"."s[2]"."s[3]"."s[4];
dst_host = d[1]"."d[2]"."d[3]"."d[4];
hosts[src_host]++;
hosts[dst_host]++;
}
}
END {
print "主机通信统计:";
for (h in hosts) {
if (hosts[h] > 1) {
printf "主机: %-15s 数据包数: %d\n", h, hosts[h];
}
}
}' | sort -k4 -nr | head -10
6.2 深入 HTTP 分析
创建详细 HTTP 分析脚本:detailed_http_analysis.sh
bash
#!/bin/bash
PCAP_FILE="${1}"
if [ -z "$PCAP_FILE" ]; then
echo "用法: $0 <pcap文件>"
exit 1
fi
echo "=== 深入 HTTP 分析: $PCAP_FILE ==="
# 提取 HTTP 请求头
echo -e "\n1. HTTP 请求头:"
tcpdump -r $PCAP_FILE -A 2>/dev/null | grep -A 10 -E "(GET|POST|PUT|DELETE) " | \
head -30
# 提取 HTTP 响应
echo -e "\n2. HTTP 响应:"
tcpdump -r $PCAP_FILE -A 2>/dev/null | grep -A 10 "HTTP/1.[01] [23].." | \
head -30
# 用户代理分析
echo -e "\n3. 用户代理统计:"
tcpdump -r $PCAP_FILE -A 2>/dev/null | grep -i "user-agent:" | \
sed 's/.*User-Agent: //i' | sort | uniq -c | sort -nr
# Cookie 分析
echo -e "\n4. Cookie 信息:"
tcpdump -r $PCAP_FILE -A 2>/dev/null | grep -i "cookie:" | \
head -5
# 响应时间分析(简化版)
echo -e "\n5. 请求-响应时间分析:"
tcpdump -r $PCAP_FILE -ttt 2>/dev/null | grep -E "HTTP" | \
head -10
7. Wireshark 图形化分析
7.1 pcap 文件导入分析
创建 Wireshark 分析脚本:wireshark_analysis.sh
bash
#!/bin/bash
PCAP_FILE="${1}"
if [ -z "$PCAP_FILE" ]; then
echo "用法: $0 <pcap文件>"
echo "可用 pcap 文件:"
ls -la *.pcap 2>/dev/null || echo "未找到 pcap 文件"
exit 1
fi
echo "=== Wireshark 分析: $PCAP_FILE ==="
# 检查文件基本信息
echo "1. 文件基本信息:"
capinfos $PCAP_FILE 2>/dev/null || {
echo "安装 capinfos 工具:"
sudo apt install -y wireshark-common
capinfos $PCAP_FILE
}
# 生成统计信息
echo -e "\n2. 生成协议统计:"
tshark -r $PCAP_FILE -q -z io,phs 2>/dev/null | head -20
echo -e "\n3. 会话统计:"
tshark -r $PCAP_FILE -q -z conv,tcp 2>/dev/null | head -15
echo -e "\n4. HTTP 统计:"
tshark -r $PCAP_FILE -q -z http,tree 2>/dev/null | head -20
# 自动打开 Wireshark(如果有图形界面)
if [ -n "$DISPLAY" ]; then
echo -e "\n5. 在 Wireshark 中打开文件..."
wireshark "$PCAP_FILE" 2>/dev/null &
else
echo -e "\n5. 无图形界面,使用 tshark 继续分析"
echo -e "\nTCP 流统计:"
tshark -r $PCAP_FILE -q -z tcp,streams 2>/dev/null
fi
7.2 高级 Wireshark 分析技巧
创建 Wireshark 高级分析指南:wireshark_advanced.md
markdown
# Wireshark 高级分析技巧
## 1. 显示过滤器常用语法
### 协议过滤
- `http` - 显示所有 HTTP 流量
- `dns` - 显示所有 DNS 流量
- `tcp.port == 443` - 显示 HTTPS 流量
- `udp` - 显示所有 UDP 流量
### IP 地址过滤
- `ip.addr == 192.168.1.100` - 显示涉及该 IP 的所有流量
- `ip.src == 192.168.1.100` - 显示该源 IP 的流量
- `ip.dst == 192.168.1.1` - 显示该目标 IP 的流量
### 协议特定字段过滤
- `http.request.method == "GET"` - 显示 GET 请求
- `http.response.code == 404` - 显示 404 响应
- `tcp.flags.syn == 1` - 显示 TCP SYN 包
- `tcp.analysis.retransmission` - 显示重传包
## 2. 统计功能
### 会话统计
- 菜单: Statistics → Conversations
- 查看 TCP、UDP、IP 等会话统计
### 协议层级统计
- 菜单: Statistics → Protocol Hierarchy
- 查看各协议流量占比
### HTTP 统计
- 菜单: Statistics → HTTP → Packet Counter
- 查看请求方法、响应代码统计
## 3. 流量图分析
### IO 图表
- 菜单: Statistics → IO Graph
- 查看流量随时间变化
### 流量序列图
- 菜单: Statistics → TCP Stream Graphs → Time-Sequence Graph
- 分析 TCP 序列号变化
## 4. 专家信息
- 菜单: Analyze → Expert Information
- 查看错误、警告、注意等信息
8. 性能问题诊断实战
8.1 网络延迟分析
创建延迟分析脚本:latency_analysis.sh
bash
#!/bin/bash
INTERFACE="${1:-eth0}"
OUTPUT_FILE="latency_analysis_$(date +%Y%m%d_%H%M%S).pcap"
DURATION=300
echo "=== 网络延迟分析 ==="
echo "开始捕获数据包分析网络延迟,持续时间: $DURATION 秒"
sudo timeout $DURATION tcpdump -i $INTERFACE -w $OUTPUT_FILE -s 0
echo "捕获完成,开始分析..."
# 使用 tshark 分析 TCP 问题
echo -e "\n=== TCP 问题分析 ==="
# 重传分析
RETRANS=$(tshark -r $OUTPUT_FILE -q -z io,stat,0,"tcp.analysis.retransmission" 2>/dev/null | grep "<>" | awk '{print $2}')
echo "TCP 重传包数量: $RETRANS"
# 重复ACK分析
DUP_ACK=$(tshark -r $OUTPUT_FILE -q -z io,stat,0,"tcp.analysis.duplicate_ack" 2>/dev/null | grep "<>" | awk '{print $2}')
echo "重复ACK数量: $DUP_ACK"
# 零窗口分析
ZERO_WINDOW=$(tshark -r $OUTPUT_FILE -q -z io,stat,0,"tcp.analysis.zero_window" 2>/dev/null | grep "<>" | awk '{print $2}')
echo "零窗口包数量: $ZERO_WINDOW"
# RTT 统计
echo -e "\n=== TCP 往返时间统计 ==="
tshark -r $OUTPUT_FILE -q -z rtt,tcp 2>/dev/null | head -10
# 连接建立时间
echo -e "\n=== TCP 握手时间 ==="
tshark -r $OUTPUT_FILE -Y "tcp.flags.syn==1 && tcp.flags.ack==0" -T fields -e frame.time_epoch -e ip.src -e ip.dst 2>/dev/null | \
head -5
8.2 带宽使用分析
创建带宽分析脚本:bandwidth_analysis.sh
bash
#!/bin/bash
PCAP_FILE="${1}"
INTERVAL=1 # 统计间隔(秒)
if [ -z "$PCAP_FILE" ]; then
echo "用法: $0 <pcap文件> [间隔秒数]"
exit 1
fi
INTERVAL=${2:-1}
echo "=== 带宽使用分析: $PCAP_FILE ==="
echo "统计间隔: $INTERVAL 秒"
# 生成带宽使用图表数据
tshark -r $PCAP_FILE -q -z io,stat,$INTERVAL 2>/dev/null | \
grep -E "^[0-9]+\|" | \
awk -F'|' '
BEGIN {
print "时间段 | 包数量 | 字节数 | 带宽(kbps)"
print "------|--------|--------|-----------"
}
{
time = $1;
packets = $2;
bytes = $3;
kbps = (bytes * 8) / (1000 * '$INTERVAL');
printf "%s | %d | %d | %.2f\n", time, packets, bytes, kbps;
}'
# Top 会话带宽使用
echo -e "\n=== 带宽使用最高的TCP会话 ==="
tshark -r $PCAP_FILE -q -z conv,tcp 2>/dev/null | grep -E "^[0-9]" | \
sort -k5 -nr | head -10 | \
awk 'BEGIN {printf "%-30s %-30s %10s %10s %12s\n", "源地址", "目标地址", "包数量", "字节数", "带宽(kbps)"}
{printf "%-30s %-30s %10d %10d %12.2f\n", $1, $2, $4, $5, ($5*8)/(1000*'$DURATION')}'
9. 安全威胁分析
9.1 异常流量检测
创建安全分析脚本:security_analysis.sh
bash
#!/bin/bash
PCAP_FILE="${1}"
if [ -z "$PCAP_FILE" ]; then
echo "用法: $0 <pcap文件>"
exit 1
fi
echo "=== 安全威胁分析: $PCAP_FILE ==="
# 端口扫描检测
echo "1. 端口扫描检测:"
tshark -r $PCAP_FILE -Y "tcp.flags.syn==1 && tcp.flags.ack==0" -T fields -e ip.src 2>/dev/null | \
sort | uniq -c | sort -nr | head -10 | \
awk 'BEGIN {print "源IP | SYN包数量"; print "------|-----------"}
{printf "%-15s | %d\n", $2, $1}'
# 异常协议检测
echo -e "\n2. 非常用端口检测:"
tshark -r $PCAP_FILE -T fields -e tcp.dstport -e udp.dstport 2>/dev/null | \
tr '\n' ',' | sed 's/,/\n/g' | grep -E "^[0-9]+$" | \
grep -v -E "^(80|443|53|22|23|25|110|143|993|995|21|20|67|68|69|161|162|389|636|3389)$" | \
sort -n | uniq -c | sort -nr | head -10
# 大流量传输检测
echo -e "\n3. 大文件传输检测:"
tshark -r $PCAP_FILE -Y "tcp.len > 1000" -T fields -e ip.src -e ip.dst -e tcp.len 2>/dev/null | \
awk '{sum[$1" -> "$2] += $3} END {for (i in sum) if (sum[i] > 1000000) print i " 传输数据: " sum[i] " 字节"}' | \
sort -k5 -nr
# DNS 异常查询
echo -e "\n4. DNS 异常查询检测:"
tshark -r $PCAP_FILE -Y "dns" -T fields -e dns.qry.name 2>/dev/null | \
sort | uniq -c | sort -nr | head -10
10. 自动化监控脚本
10.1 长期网络监控
创建监控脚本:network_monitor.sh
bash
#!/bin/bash
# 配置参数
INTERFACE="eth0"
CAPTURE_DURATION=300 # 每次捕获时长(秒)
ROTATION_COUNT=24 # 保留文件数量
OUTPUT_DIR="/tmp/network_captures"
LOG_FILE="/var/log/network_monitor.log"
# 创建输出目录
mkdir -p $OUTPUT_DIR
# 日志函数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 清理旧文件
cleanup_old_files() {
ls -t $OUTPUT_DIR/*.pcap 2>/dev/null | tail -n +$(($ROTATION_COUNT+1)) | xargs -r rm
}
# 主监控循环
monitor_network() {
while true; do
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
OUTPUT_FILE="$OUTPUT_DIR/capture_$TIMESTAMP.pcap"
log "开始捕获网络流量: $OUTPUT_FILE"
# 捕获网络流量
timeout $CAPTURE_DURATION sudo tcpdump -i $INTERFACE -w $OUTPUT_FILE -s 0 -B 256
# 基本分析
PACKET_COUNT=$(tcpdump -r $OUTPUT_FILE 2>/dev/null | wc -l)
log "捕获完成: $OUTPUT_FILE, 数据包数: $PACKET_COUNT"
# 检查异常
check_anomalies $OUTPUT_FILE
# 清理旧文件
cleanup_old_files
# 等待下一轮
sleep 60
done
}
# 异常检测
check_anomalies() {
local pcap_file=$1
# 检测高重传率
local total_packets=$(tshark -r $pcap_file -q -z io,stat,0,"frame" 2>/dev/null | grep "<>" | awk '{print $2}')
local retrans_packets=$(tshark -r $pcap_file -q -z io,stat,0,"tcp.analysis.retransmission" 2>/dev/null | grep "<>" | awk '{print $2}')
if [ "$total_packets" -gt 0 ] && [ "$retrans_packets" -gt 0 ]; then
local retrans_rate=$((retrans_packets * 100 / total_packets))
if [ $retrans_rate -gt 5 ]; then
log "警告: 高TCP重传率 detected: $retrans_rate%"
fi
fi
# 检测端口扫描
local syn_packets=$(tshark -r $pcap_file -Y "tcp.flags.syn==1 && tcp.flags.ack==0" 2>/dev/null | wc -l)
local unique_dest_ports=$(tshark -r $pcap_file -Y "tcp.flags.syn==1 && tcp.flags.ack==0" -T fields -e tcp.dstport 2>/dev/null | sort -u | wc -l)
if [ $syn_packets -gt 100 ] && [ $unique_dest_ports -gt 50 ]; then
log "警告: 可能的端口扫描 detected - SYN包: $syn_packets, 唯一端口: $unique_dest_ports"
fi
}
# 信号处理
trap "log '监控停止'; exit 0" SIGINT SIGTERM
# 启动监控
log "网络监控启动 - 接口: $INTERFACE, 时长: $CAPTURE_DURATION秒"
monitor_network
11. 总结与最佳实践
11.1 工具使用总结
创建总结文档:tcpdump_wireshark_summary.md
markdown
# tcpdump 和 Wireshark 使用总结
## tcpdump 常用命令速查
### 基础捕获
- `tcpdump -i eth0` - 在指定接口捕获
- `tcpdump -w file.pcap` - 保存到文件
- `tcpdump -r file.pcap` - 读取文件
### 过滤表达式
- `host 192.168.1.1` - 按主机过滤
- `net 192.168.0.0/24` - 按网络过滤
- `port 80` - 按端口过滤
- `tcp, udp, icmp` - 按协议过滤
### 输出控制
- `-v, -vv, -vvv` - 详细程度
- `-c 100` - 捕获包数量
- `-s 0` - 完整数据包捕获
- `-A` - ASCII 输出
- `-X` - 十六进制输出
## Wireshark 分析技巧
### 显示过滤器
- 协议级过滤: `http`, `dns`, `tcp`
- 字段过滤: `http.request.uri contains "login"`
- 比较过滤: `frame.len > 1000`
### 统计功能
- 会话统计: Conversations
- 协议分级: Protocol Hierarchy
- 流量图: IO Graphs
## 性能优化建议
### tcpdump 优化
- 使用足够大的缓冲区 (`-B` 选项)
- 适当设置快照长度 (`-s` 选项)
- 在繁忙网络中使用 BPF 过滤器
### 分析优化
- 对大文件使用导出对象功能
- 使用着色规则快速识别问题
- 配置首选项优化显示性能
11.2 故障排查流程
创建故障排查指南:troubleshooting_guide.md
markdown
# 网络问题排查流程指南
## 1. 连接问题
1. 使用 `tcpdump -i eth0 host 目标IP` 确认数据包是否发出
2. 检查 TCP 握手是否完成
3. 分析是否有 RST 包或超时
## 2. 性能问题
1. 检查 TCP 重传和重复ACK
2. 分析往返时间 (RTT)
3. 查看窗口大小变化
## 3. 应用层问题
1. 检查 HTTP 状态码
2. 分析 DNS 响应时间
3. 查看 SSL/TLS 握手
## 4. 安全相关问题
1. 检测异常连接模式
2. 分析端口扫描行为
3. 检查数据泄露迹象
通过本教程,已经掌握了从基础的 tcpdump 抓包到高级的 Wireshark 分析的完整技能栈。这些工具和技巧将帮助您有效地诊断和解决各种网络问题。