[关闭]
@wuzhimang 2017-08-12T15:51:53.000000Z 字数 2948 阅读 4084

【总结】数据包过滤分析 tshark, tcpdump 常用实例

博客


博客链接: 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)

  1. # 过滤出 src.pcap 中 2017-06-17 10:40:00 到 2017-06-17 10:50:00 之间的数据包,其中 -F 参数表示文件格式,即 the file format of the output capture file! 留意 pcapng 格式的数据包
  2. editcap -A "2017-06-17 10:40:00" -B "2017-06-17 10:50:00" src.pcap -F pcap dst.pcap
  1. # -n 不进行域名解析, 其他参数的意思 man tshark
  2. tshark -n -r src.pcap -Y "tcp.analysis.retransmission" -T fields -e tcp.stream | wc -l
  3. echo -e "The number of retransmission packets"
  4. # 通过 -z 参数
  5. tshark -z io,stat,0,"tcp.analysis.retransmission" -n -q -r src.pcap
  1. # -c 显示文件中数据包的个数
  2. capinfos -c -M src.pcap
  3. content=$(capinfos -c -M src.pcap)
  4. total=$(echo $content | grep packet | cut -d : -f 3) # 获取文件中数据包的个数
  1. 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
  1. tshark -z io,stat,5,"ip.addr==180.153.15.118 && tcp.analysis.retransmission",\
  2. "ip.src==180.153.15.118 && tcp.analysis.retransmission",\
  3. "ip.dst==180.153.15.118 && tcp.analysis.retransmission" \
  4. -n -q -r src.pcap > dst.csv
  1. tshark -z io,stat,5,\
  2. "FRAMES()ip.src==${SERVERIP} && tcp.flags.syn==1 && !(tcp.flags.ack==1)",\
  3. "FRAMES()ip.dst==${SERVERIP} && tcp.flags.syn==1 && !(tcp.flags.ack==1)",\
  4. "FRAMES()ip.src==${SERVERIP} && tcp.flags.fin==1",\
  5. "FRAMES()ip.dst==${SERVERIP} && tcp.flags.fin==1",\
  6. "FRAMES()ip.src==${SERVERIP} && tcp.flags.reset==1",\
  7. "FRAMES()ip.dst==${SERVERIP} && tcp.flags.reset==1",\
  8. "FRAMES()ip.src==${SERVERIP} && tcp.flags.syn==1 && !(tcp.flags.ack==1) && (!tcp.analysis.retransmission)",\
  9. "FRAMES()ip.dst==${SERVERIP} && tcp.flags.syn==1 && !(tcp.flags.ack==1) && (!tcp.analysis.retransmission)",\
  10. "FRAMES()ip.src==${SERVERIP} && tcp.flags.fin==1 && (!tcp.analysis.retransmission)",\
  11. "FRAMES()ip.dst==${SERVERIP} && tcp.flags.fin==1 && (!tcp.analysis.retransmission)",\
  12. "FRAMES()ip.src==${SERVERIP} && tcp.flags.reset==1 && (!tcp.analysis.retransmission)",\
  13. "FRAMES()ip.dst==${SERVERIP} && tcp.flags.reset==1 && (!tcp.analysis.retransmission)" \
  14. -n -q -r src.pcap > dst.csv

tcpdump

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

  1. tcpdump -Z root -r src.pcap "tcp port 22" -w dst.pcap
  1. tcpdump -Z root -r src.pcap "tcp port 22 and (tcp[tcpflags] & tcp-fin != 0)" -w dst.pcap
  1. ## 示例: GET /bidimg/hello
  2. # tcp[24:4]==0x2f626964 匹配 /bid; tcp[28:4]==696d67ef 匹配 img/ 字段; 至于GET字段的匹配,可以自己去尝试!
  3. 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. 很棒的参考
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注