当前位置: 首页 > news >正文

tshark + tcpdump 入门实战笔记:从网站分析到 DDoS 模拟


tshark + tcpdump 实战笔记:从网站分析到 DDoS 模拟

环境说明

  • 操作系统:CentOS 7
  • 服务端网卡:eth0(示例)
  • 客户端测试机:任意 Linux
  • 目标网站:example.com(实际请替换)

一、安装 tshark 和 tcpdump

# 安装 epel 源sudoyuminstallepel-release-y# 安装 wireshark(含 tshark)和 tcpdumpsudoyuminstallwireshark tcpdump-y# 验证tshark-vtcpdump-v

二、客户端分析:curl 时间分解

1. 创建 curl 格式化模板

cat>curl-format.txt<<'EOF' time_namelookup: %{time_namelookup}\n time_connect: %{time_connect}\n time_appconnect: %{time_appconnect}\n time_pretransfer: %{time_pretransfer}\n time_redirect: %{time_redirect}\n time_starttransfer: %{time_starttransfer}\n ----------\n time_total: %{time_total}\n EOF

2. 测试目标网站

curl-w"@curl-format.txt"-o/dev/null-s"http://example.com/test"

输出示例:

time_namelookup: 0.003 time_connect: 0.025 time_starttransfer: 0.218 time_total: 0.245

指标含义:

  • time_namelookup:DNS 解析耗时
  • time_connect:TCP 三次握手耗时
  • time_starttransfer:从开始到收到第一个字节(TTFB)
  • time_total:总耗时

三、服务端抓包分析(配合 tcpdump + tshark)

场景:定位服务端性能瓶颈

1. 服务端抓包(假设客户端 IP 为 192.168.1.100)
# 实时抓取与该客户端的交互sudotcpdump-ieth0-s1500-wserver_trace.pcaphost192.168.1.100 and port80
2. 分析 TCP 握手耗时
tshark-rserver_trace.pcap-Y"tcp.flags.syn==1 or tcp.flags.ack==1"\-Tfields-eframe.time_relative-etcp.stream-etcp.flags.syn-etcp.flags.ack|awk' BEGIN { stream_time=0 } { if ($3==1 && $4==0) { syn_time=$1; stream=$2 } if ($3==1 && $4==1 && stream==$2) { handshake = $1 - syn_time; printf "Stream %d 握手耗时 = %.6f 秒\n", stream, handshake } }'
3. 计算 TTFB(服务端处理时间)
tshark-rserver_trace.pcap-Y"http.request or http.response"\-Tfields-eframe.time_relative-ehttp.request.method-ehttp.request.uri-ehttp.response.code|awk' /request/ { req_time=$1; req_uri=$3 } /response/ { ttfb = $1 - req_time; printf "请求 %s TTFB = %.6f 秒\n", req_uri, ttfb }'
4. 自动分析脚本server_analyze.sh
#!/bin/bashPCAP=$1CLIENT_IP=$2echo"服务端分析报告"SYN_TIME=$(tshark-r$PCAP-Y"tcp.flags.syn==1 and ip.src==$CLIENT_IP"-Tfields-eframe.time_relative2>/dev/null|head-1)SYNACK_TIME=$(tshark-r$PCAP-Y"tcp.flags.syn==1 and tcp.flags.ack==1 and ip.dst==$CLIENT_IP"-Tfields-eframe.time_relative2>/dev/null|head-1)if[-n"$SYN_TIME"]&&[-n"$SYNACK_TIME"];thenecho"TCP握手耗时:$(echo"$SYNACK_TIME-$SYN_TIME"|bc)秒"fiREQ_TIME=$(tshark-r$PCAP-Y"http.request"-Tfields-eframe.time_relative2>/dev/null|head-1)RESP_FIRST=$(tshark-r$PCAP-Y"http.response"-Tfields-eframe.time_relative2>/dev/null|head-1)if[-n"$REQ_TIME"]&&[-n"$RESP_FIRST"];thenecho"TTFB:$(echo"$RESP_FIRST-$REQ_TIME"|bc)秒"fiRETRANS=$(tshark-r$PCAP-Y"tcp.analysis.retransmission"2>/dev/null|wc-l)echo"TCP重传次数:$RETRANS"

运行:

chmod+x server_analyze.sh ./server_analyze.sh server_trace.pcap192.168.1.100

四、模拟 DDoS 攻击并抓包分析

1. 在服务器上启动抓包

sudotcpdump-ieth0-s1500-wddos_attack.pcap'tcp port 80'&

2. 使用 Python 模拟高并发攻击(本机 127.0.0.1)

python3-c" import socket, threading, time def flood(): while True: try: s = socket.socket() s.connect(('127.0.0.1',80))s.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n') # 不关闭连接,耗尽资源 except: pass for i in range(500): threading.Thread(target=flood, daemon=True).start() print('攻击中... 按 Ctrl+C 停止') time.sleep(999999) "

3. 使用 hping3 发起 SYN Flood(需要安装)

sudohping3-S-p80--flood--rand-source127.0.0.1

4. 使用 ab 进行压力测试

ab-n10000-c100http://127.0.0.1/

5. 实时观察连接状态

watch-n1'ss -tan | grep :80 | wc -l'

6. tshark 分析 DDoS 抓包文件

6.1 查看基本信息
capinfos ddos_attack.pcap
6.2 TCP 标志位统计(识别攻击类型)
tshark-rddos_attack.pcap-Y"tcp"-Tfields-etcp.flags|sort|uniq-c|sort-rn
6.3 统计半开连接(SYN Flood 特征)
SYN=$(tshark-rddos_attack.pcap-Y"tcp.flags.syn==1 and tcp.flags.ack==0"2>/dev/null|wc-l)SYNACK=$(tshark-rddos_attack.pcap-Y"tcp.flags.syn==1 and tcp.flags.ack==1"2>/dev/null|wc-l)echo"SYN:$SYN, SYN+ACK:$SYNACK, 半开比例: $(echo "scale=2;$SYN*100/($SYN+$SYNACK)"|bc)%"
6.4 攻击源 IP TOP 10
tshark-rddos_attack.pcap-Tfields-eip.src|sort|uniq-c|sort-rn|head-10
6.5 自动识别攻击类型脚本ddos_detect.sh
#!/bin/bashPCAP=$1TOTAL=$(tshark-r$PCAP2>/dev/null|wc-l)SYN=$(tshark-r$PCAP-Y"tcp.flags.syn==1 and tcp.flags.ack==0"2>/dev/null|wc-l)ACK=$(tshark-r$PCAP-Y"tcp.flags.ack==1 and tcp.flags.syn==0 and tcp.flags.reset==0"2>/dev/null|wc-l)UDP=$(tshark-r$PCAP-Y"udp"2>/dev/null|wc-l)echo"SYN占比:$(echo"scale=2;$SYN*100/$TOTAL"|bc)%"echo"ACK占比:$(echo"scale=2;$ACK*100/$TOTAL"|bc)%"if(($(echo "$SYN>$TOTAL*0.5"|bc-l)));thenecho"检测到 SYN Flood 攻击"elif(($(echo "$ACK>$TOTAL*0.5"|bc-l)));thenecho"检测到 ACK Flood 攻击"elseecho"非典型 DDoS 或正常流量"fi

运行:

chmod+x ddos_detect.sh ./ddos_detect.sh ddos_attack.pcap

五、实战案例分析(脱敏)

以下是一次真实抓包的输出示例(已脱敏):

=== 抓包文件基本信息 === File name: ddos_attack.pcap Number of packets: 484 Capture duration: 154 seconds Average packet rate: 3 packets/sec === 协议分布 === eth frames:484 bytes:197644 ip frames:484 bytes:197644 tcp frames:484 bytes:197644 ssh frames:233 bytes:157970 http frames:10 bytes:16946

结论:该流量为正常的 SSH + HTTP 混合流量,非 DDoS。真正的攻击需要更高的包速率(>1000 pps)和明显的半开连接比例。


六、常用 tshark 过滤表达式速查

目的表达式
只显示 HTTP 请求-Y "http.request"
显示 SYN 包-Y "tcp.flags.syn==1 and tcp.flags.ack==0"
显示 RST 包-Y "tcp.flags.reset==1"
按源 IP 过滤-Y "ip.src==192.168.1.100"
提取字段-T fields -e ip.src -e http.request.uri
统计会话-z conv,tcp
统计每秒包数-z io,stat,1

七、注意事项

  • 抓包请勿在生产环境随意发起 DDoS 攻击,应在隔离测试环境中进行。
  • 所有 IP、域名已替换为示例值,实际操作请替换为真实地址。
  • 大流量抓包时注意磁盘空间,建议使用-C-G参数滚动保存。

http://www.jsqmd.com/news/694086/

相关文章:

  • Oracle EBS(Oracle E-Business Suite)是 Oracle 公司推出的一套集成化企业资源计划(ERP)解决方案,其应用架构围绕 “集成性”“模块化” 和 “可扩展性” 设
  • 抖音视频批量下载终极指南:开源神器让无水印收藏变得如此简单
  • R语言实战:从summary()函数看数据探索的起点
  • Spring Boot开发中,@RequestParam、@RequestBody、@PathVariable到底怎么选?一个真实项目案例讲清楚
  • 电话号码精确定位系统:3分钟搭建免费查询平台的完整指南
  • 从标准库到HAL库:手把手教你魔改淘宝1.3寸TFT屏例程,并用STM32CubeMX快速配置SPI驱动
  • Matlab fmincon实战:从Rosenbrock函数到带圆域约束,手把手教你搞定非线性优化
  • 财务造假退市后东方通能否重生?17亿资金、30年积淀成关键砝码
  • 2026 年临沂企业管理咨询公司权威推荐
  • 告别外置变压器!手把手教你用B64843HC打造更紧凑的无人机飞控总线
  • 路由策略实战:双点双向重发布场景下的OSPF与ISIS防环与选优
  • imFile下载管理器:如何实现高效的多协议下载管理?
  • 【CTR预估技术演进】从FM到DeepFM:因子分解机家族的原理、演进与实战
  • 告别PWM纹波!用Arduino UNO和MCP4725 DAC模块实现精准电压输出(附校准教程)
  • 别光看简介了!手把手带你用LVGL 8.3在ESP32上跑起来第一个UI
  • Keras模型预测全流程详解与优化实践
  • real-anime-z开源模型部署案例:GPU算力优化的动漫风图片生成方案
  • 手把手教你用C语言内嵌汇编调用CPUID指令,获取CPU型号、品牌和地址位数
  • 手把手教你用DSP28335的定时器中断实现增量式PID控制(附完整代码)
  • OpenWebUI 接入 Claude API
  • 别再死记硬背了!Halcon仿射变换核心算子vector_to_hom_mat2d与vector_angle_to_rigid的保姆级区别与实战选择指南
  • Elsevier Tracker:学术投稿效率神器终极指南
  • Elasticsearch核心精讲:Index索引详解与全生命周期管理实战
  • 华为交换机sFlow配置避坑指南:Agent IP选错、采样率设多少?一次讲清
  • LeRobot机器人学习框架深度解析:从多模态感知到实时控制的端到端架构揭秘
  • 【C++26反射元编程实战图谱】:含完整UML架构设计图+AST遍历时序图+编译期契约检查模板(附GitHub私有仓库邀请码)
  • 告别Techpoint和Nextchip!手把手教你用XS9922A/B搞定车载摄像头国产化替代(附完整选型指南)
  • 你的模型真的‘看懂’数据了吗?用scikit-plot可视化帮你诊断5个常见模型问题
  • OBS多路RTMP推流插件完全指南:轻松实现多平台同步直播 [特殊字符]
  • WeChatMsg:让微信聊天记录成为你的永久数字记忆