网络抓包分析利器:Tcpdump与Wireshark完全指南
网络抓包分析工具使用指南
1. Tcpdump基础
1.1 基本语法
# 基本抓包
tcpdump -i eth0
# 指定网卡并显示详细信息
tcpdump -i eth0 -n -vv
# 保存抓包结果
tcpdump -i eth0 -w capture.pcap
# 读取抓包文件
tcpdump -r capture.pcap
1.2 常用过滤器
# 按主机过滤
tcpdump host 192.168.1.1
# 按源地址过滤
tcpdump src 192.168.1.1
# 按目标地址过滤
tcpdump dst 192.168.1.1
# 按端口过滤
tcpdump port 80
# 组合过滤
tcpdump 'src 192.168.1.1 and port 80'
2. Tcpdump高级用法
2.1 协议过滤
# 抓取TCP包
tcpdump tcp
# 抓取UDP包
tcpdump udp
# 抓取ICMP包
tcpdump icmp
# 抓取HTTP流量
tcpdump 'tcp port 80 or tcp port 443'
2.2 输出控制
# 限制抓包数量
tcpdump -c 100
# 显示时间戳
tcpdump -tttt
# 显示ASCII码
tcpdump -A
# 显示十六进制
tcpdump -X
3. Wireshark基础
3.1 捕获设置
1. 选择网络接口
- 有线网卡
- 无线网卡
- 本地回环
2. 捕获过滤器
- tcp port 80
- host 192.168.1.1
- !broadcast and !multicast
3. 显示过滤器
- ip.addr == 192.168.1.1
- tcp.port == 80
- http.request.method == "GET"
3.2 基本分析
1. 流量统计
Statistics -> Protocol Hierarchy
2. 会话分析
Statistics -> Conversations
3. 端点分析
Statistics -> Endpoints
4. 专家信息
Analyze -> Expert Information
4. Wireshark高级分析
4.1 协议分析
1. HTTP分析
- 过滤器: http
- 查看请求/响应
- 提取文件
2. TCP分析
- 过滤器: tcp
- 流重组
- 连接状态
3. DNS分析
- 过滤器: dns
- 查询/响应
- 域名解析
4.2 安全分析
1. 检测网络扫描
tcp.flags.syn == 1 and tcp.flags.ack == 0
2. 检测DOS攻击
tcp.flags.syn == 1 and tcp.flags.ack == 0 and ip.addr == target
3. 检测ARP欺骗
arp.duplicate-address-detected
5. 性能分析
5.1 TCP性能
1. 延迟分析
Statistics -> TCP Stream Graph -> Round Trip Time
2. 吞吐量分析
Statistics -> TCP Stream Graph -> Throughput
3. 窗口大小分析
Statistics -> TCP Stream Graph -> Window Scaling
5.2 应用性能
1. HTTP性能
Statistics -> HTTP -> Load Distribution
2. DNS性能
Statistics -> DNS -> Load Distribution
3. 响应时间分析
Statistics -> Service Response Time
6. 故障排查
6.1 连接问题
1. TCP连接重置
tcp.flags.reset == 1
2. 连接超时
tcp.analysis.retransmission
3. 握手失败
tcp.flags.syn == 1 and tcp.analysis.duplicate_ack
6.2 应用问题
1. HTTP错误
http.response.code >= 400
2. DNS解析失败
dns.flags.rcode != 0
3. SSL/TLS错误
ssl.alert_message.level == 2
7. 自动化分析
7.1 Tshark命令行
# 基本抓包
tshark -i eth0
# 应用显示过滤器
tshark -Y "http.request.method == GET"
# 提取字段
tshark -T fields -e frame.time -e ip.src -e http.request.method
# 生成统计信息
tshark -r capture.pcap -q -z io,phs
7.2 分析脚本
#!/usr/bin/env python3
from scapy.all import *
def analyze_packet(packet):
if TCP in packet:
if packet[TCP].flags & 2: # SYN包
print(f"SYN包: {packet[IP].src} -> {packet[IP].dst}")
# 开始抓包
sniff(filter="tcp", prn=analyze_packet)
8. 最佳实践
8.1 抓包建议
1. 合理使用过滤器
- 减少不必要的流量捕获
- 使用精确的过滤条件
2. 性能考虑
- 避免长时间大量抓包
- 定期保存和清理抓包文件
- 使用ring buffer限制文件大小
8.2 分析技巧
1. 系统分析方法
- 确定问题范围
- 使用合适的过滤器
- 关注关键指标
- 对比正常流量
2. 常见分析场景
- 网络延迟分析
- 应用性能问题
- 安全事件调查
- 协议一致性检查
9. 安全注意事项
9.1 数据保护
1. 敏感数据处理
- 避免捕获密码等敏感信息
- 及时删除包含敏感信息的抓包文件
- 使用加密存储抓包数据
2. 访问控制
- 限制抓包工具的使用权限
- 控制抓包文件的访问权限
- 记录工具使用日志
9.2 合规性
1. 法律合规
- 遵守隐私保护法规
- 获取必要的授权
- 保持操作记录
2. 安全策略
- 制定抓包规范
- 定期审查使用情况
- 培训操作人员
10. 注意事项
10.1 reset之后,客户端不回复
当TCP层的服务端发送一个连接重置(通常通过发送带有RST标志的TCP段)给客户端后,客户端的行为取决于它当前的状态以及实现细节。然而,根据TCP协议的标准行为:
客户端收到RST包后的典型反应:一般情况下,客户端在接收到带有RST标志的TCP段时,会直接关闭相应的套接字连接,并释放与该连接相关的资源。这是因为RST标志表示对方认为这是一个错误状态,或者连接无法继续进行下去。 不会回复数据或ACK:标准的TCP实现不会对RST包回复ACK确认,因为接收RST本身就意味着连接已经异常终止了。这样做是为了避免潜在的回环问题和不必要的网络流量。