Wireshark网络分析工具

Wireshark基础

过滤的用法

需要区分两种过滤语言

Capture Filter: Berkley Packet Filter

示例: host xulizhao.com and port 443

Display Filter

常用过滤器

# 地址/端口
ip.addr == 10.0.0.1
ip.src ==
ip.src_host ==
tcp.port==4000
tcp.port == 8080 and ip.addr==127.0.0.1
# HTTP
http
http.request # 显示所有GET请求
# 其他
# 显示所有 TCP resets
tcp.flags.reset==1 
# 显示所有retransmissions
tcp.analysis.retransmission 
tcp.analysis.lost_segment
tcp.analysis.ack_lost_segment
# 显示包含关键字 traffic 的包
tcp contains traffic 
frame contains ...

配置

如果SSL端口不是默认的443端口,需要修改配置项以显示TLS/SSL协议抓包:
位于 Edit -> Preferences -> Protocols -> HTTP -> SSL/TLS Ports,把值修改为 443,8443

知识点

  • Wireshark的时间戳存在偏差,非标准时间
  • 每个包在Info存在唯一标识
  • DUP ACK/TCP Retransmission 是正常的
  • 协议
    • 802.11即以太网,在frames
    • Internet Protocol/IP: 包含在每个以太frame,在packets
    • Transmission Control Protocol/TCP: 包在每个IP packet,在segments
    • Transport Layer Security/TLS: 通过TCP字节流,在records/messages
    • Hypertext Transfer Protocol/HTTP: 在加密的TLS连接中携带,一般不可见
  • 名词解释
    • TCP Spurious Retransmission: 发送方重传了接收方已确认的数据, 通常因为发送方认为该数据包丢失而重发.
    • TCP post number reused: 可能意味网络存在重复包.

编辑/合并文件

editcap -c 10000 in.pcap out.pcap
editcap -A "2017-05-11 12:00:00" -B "2017-05-11 13:00:00" in.pcap out.pcap
mergecap out.pcap in1.pcap in2.pcap

高级用法

解密SSL抓包

  • 使用服务端私钥:
    • Edit → Preferences - Protocols → TLS;
    • RSA keys list: 需要从服务器导出证书,不支持DHE加密算法 (填写 “any” 应用到所有IP地址)
    • 可在ServerHello中搜索是否包含EDH或EECDH,以确定密钥交换算法
  • SSLKEYLOGFILE: 只支持Chrome、Firefox,但支持DHE

注: DHE算法符合完全正向保密协议/perfect forward secrecy,中间人即使得到私钥也破解不了密文。

流程图

[Statistics]-[Flow Graph]

相关工具

tcpdump

sudo tcpdump -n -s 4096 -w l.log port 80

常用选项:

  • -n: 不做地址和端口的数字/名称转换
  • -i: 捕获的网卡名
  • -w: 把原始包写到文件, 而不是解析并打印(默认行为). 可以用-r选项再次打印

tcpflow

tcpflow, 轻量级网络包分析

扩展阅读