《SQL基础教程》简要总结 《设计师要懂心理学》读书笔记 MySQL与MariaDB学习笔记 WDT (Folly) 安装指南 -- CentOS 7 [solved]Page build failed(Jekyll) 数据包过滤及分析实例 tshark tcpdump Scala Tour 学习总结 “Docker容器和容器云”读书笔记(1) “Docker Practice”读书笔记 “图解基础设施设计模式”小结 “图解服务器端网络架构”小结 Python网络安全编程 数据包解析笔记 华为挑战赛(1) DDoS攻击防御与云服务 基于网络回溯分析技术的异常行为分析 “Linux程序设计”小结(进程间通信) C语言编程规范(华为软件精英挑战赛) 2017阿里在线编程题--单源最短路径问题 2017年阿里在线编程题-- 数串分组 Uinx/Linux上的帮助查询命令 你懂C,所以C++不在话下 一篇特别长的总结(C专家编程) 程序员面试金典--笔记(精华篇) C陷阱与缺陷--笔记 半小时搭建电子商务网站--opencart linux网络知识和工具(持续更新) 网卡参数查询及设置工具ethtool 高性能流量生成工具trafgen(DDoS模拟) Linux流量控制工具TC 流量控制工具TC详细说明 tcpdump过滤数据包,结果不对? Lecture 网络攻击与防御技术笔记 gotgit-git权威指南 高效使用MacOS所要知道的 shell内置字符串处理 配置ntp(知其所以然) 360黑客攻防技术分享会--记录 中毒U盘恢复--快捷键病毒 Tor--anonymity network介绍(PPT) IBM bluemix 再读《Linux Shell脚本攻略》 linux shell 学习摘记(9) linux shell 学习摘记(8) linux shell 学习摘记(7) linux shell 学习摘记(6) linux shell 学习摘记(5) linux shell 学习摘记(4) linux shell 学习摘记(3) linux shell 学习摘记(2) linux shell 学习摘记(1) firefox vim 插件 vimperator A Byte of Vim 笔记 windows注册表小知识 安全测试工具篇(开源&商业) 安全及性能测试工具(网站收集) 性能测试工具 屡试不爽的“3个”iPad使用技巧 Shell Shortcuts(和Tab键一样实用) vim--自动添加jekyll post信息头 vim 自动给文件添加头部信息 GitHub Tips (很实用,值得收藏) Linux路由、防火墙、NAT命令

数据包过滤及分析实例 tshark tcpdump

2017年08月08日

博客链接: http://codeshold.me/2017/08/tcpdump_tshark_notes.html

平时需要对数据包进行分析和统计,尽管使用python scapy库来开发很方便,但若是熟悉tshark(wireshark的命令行),tcpdump 等工具,含editcap,mergecap 等,写个简单的shell分析脚本,那会更加方便!

简介

  1. tcpdump
    • man tcpdump
  2. tshark
    • tshark 是一次性将整个数据包读入内存的,分析好后再统一输出,所以针对超大文件的分析,需要注意!但是和wireshark相比,tshark能分析的文件已经很大了,具体和系统配置有关!
    • 同tshark一起的还有其他工具,是一套的,如 editcap, mergecap, capinfos
    • man tshark, man wireshark-filter, man editcap, man mergecap
    • 一个很棒的网页,自己一直收藏着
      • This is a place for scripts and tools related to Wireshark / TShark that users may like to share, and for links to related NetworkTroubleshooting tools.

常用实例

tshark (editcap, capinfos)

  • 过滤出特定时间段的数据包
# 过滤出 src.pcap 中 2017-06-17 10:40:00 到 2017-06-17 10:50:00 之间的数据包,其中 -F 参数表示文件格式,即 the file format of the output capture file! 留意 pcapng 格式的数据包

editcap -A "2017-06-17 10:40:00" -B "2017-06-17 10:50:00" src.pcap -F pcap dst.pcap
  • 统计重传数据包的个数
# -n 不进行域名解析, 其他参数的意思 man tshark
tshark -n -r src.pcap -Y "tcp.analysis.retransmission" -T fields -e tcp.stream | wc -l
echo -e "The number of retransmission packets"

# 通过 -z 参数
tshark -z io,stat,0,"tcp.analysis.retransmission" -n -q -r src.pcap
  • 查看抓包文件的信息
# -c 显示文件中数据包的个数
capinfos -c -M src.pcap

content=$(capinfos -c -M src.pcap)
total=$(echo $content | grep packet | cut -d : -f 3) # 获取文件中数据包的个数
  • 以5秒为单位,统计不同方向上的数据包个数
tshark -z io,stat,5,"ip.addr==180.153.15.118","ip.src==180.153.15.118","ip.dst==180.153.15.118" -n -q -r 1030_1038_8300.pcap > five_second.csv
  • 以5秒为单位,不同方向上的重传数据包的个数, 含字节数 (注意:,后不能有空格)
tshark -z io,stat,5,"ip.addr==180.153.15.118 && tcp.analysis.retransmission",\
"ip.src==180.153.15.118 && tcp.analysis.retransmission",\
"ip.dst==180.153.15.118 && tcp.analysis.retransmission" \
-n -q -r src.pcap > dst.csv
  • 以5秒为单位,统计不同方向上的含SYN, FIN, RST等标记的数据包个数 (注意:,后不能有空格)
tshark -z io,stat,5,\
"FRAMES()ip.src==${SERVERIP} && tcp.flags.syn==1 && !(tcp.flags.ack==1)",\
"FRAMES()ip.dst==${SERVERIP} && tcp.flags.syn==1 && !(tcp.flags.ack==1)",\
"FRAMES()ip.src==${SERVERIP} && tcp.flags.fin==1",\
"FRAMES()ip.dst==${SERVERIP} && tcp.flags.fin==1",\
"FRAMES()ip.src==${SERVERIP} && tcp.flags.reset==1",\
"FRAMES()ip.dst==${SERVERIP} && tcp.flags.reset==1",\
"FRAMES()ip.src==${SERVERIP} && tcp.flags.syn==1 && !(tcp.flags.ack==1) && (!tcp.analysis.retransmission)",\
"FRAMES()ip.dst==${SERVERIP} && tcp.flags.syn==1 && !(tcp.flags.ack==1) && (!tcp.analysis.retransmission)",\
"FRAMES()ip.src==${SERVERIP} && tcp.flags.fin==1 && (!tcp.analysis.retransmission)",\
"FRAMES()ip.dst==${SERVERIP} && tcp.flags.fin==1 && (!tcp.analysis.retransmission)",\
"FRAMES()ip.src==${SERVERIP} && tcp.flags.reset==1 && (!tcp.analysis.retransmission)",\
"FRAMES()ip.dst==${SERVERIP} && tcp.flags.reset==1 && (!tcp.analysis.retransmission)" \
-n -q -r src.pcap > dst.csv

tcpdump

过滤速度最快,而且是实时输出!

  • 最简单的–过滤出 src.pcap 中端口号为 22 的数据包
tcpdump -Z root -r src.pcap "tcp port 22" -w dst.pcap
  • 过滤出端口为22, 且含有 FIN 标记的数据包
tcpdump -Z root -r src.pcap "tcp port 22 and (tcp[tcpflags] & tcp-fin != 0)" -w dst.pcap
  • 根据应用层数据进行过滤,如HTTP GET的请求路径, 注意tcp[xx:offset]中的偏移最多为4
## 示例: GET /bidimg/hello
# tcp[24:4]==0x2f626964 匹配 /bid; tcp[28:4]==696d67ef 匹配 img/ 字段; 至于GET字段的匹配,可以自己去尝试!
tcpdump -Z root -r src.pcap "((tcp[24:4]==0x2f626964 and tcp[28:4]==696d67ef) and dst port 80)" -w dst.pcap

Ref

  1. 一些简单的脚本
  2. 很棒的参考

知识共享许可协议
SWF's Hacking Dreamonephone 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2017. All rights reserved by onephone. Powerd by Jekyll.