[工具使用] Wireshark 手册速览

25 0
Honkers 12 小时前 | 显示全部楼层 |阅读模式

Wireshark 手册速览

一、工具基础介绍

1.1 核心功能定位

Wireshark 是开源网络协议分析工具,提供以下核心能力:

  • 全包捕获:支持千兆/万兆网络实时抓包
  • 深度协议解析:内置2000+种协议解码器(含5G/IoT/工业协议)
  • 三平面分析:物理层/链路层/应用层数据可视化
  • 专家诊断系统:自动检测TCP重传、RST包等异常
  • 多平台支持:Windows/macOS/Linux全覆盖

1.2 版本演进

版本发布时间核心改进
1.02006首次跨平台支持
2.02014重新设计GUI,支持IPv6/TLSv1.2
3.02019引入QML界面,支持25GHz时钟捕获
4.02023集成AI分析引擎,支持DPDK硬件加速

1.3 工作原理

二、核心功能详解

2.1 实时捕获配置

接口选择

  • 物理接口:eth0/en0
  • 虚拟接口:veth0(Docker网络)
  • 远程捕获:rpcap://remote-host/eth0

捕获过滤器

  1. # 语法:BPF语法
  2. host 192.168.1.100 and port 80
  3. # 高级示例
  4. (tcp or udp) and (src net 10.0.0.0/8 or dst net 172.16.0.0/12)
复制代码

捕获选项

参数功能说明推荐值
缓冲区避免丢包1024KB(Linux)
混杂模式捕获所有流量启用(需管理员权限)
限速模式限制捕获带宽1Gbps(万兆网络)
文件分割避免单个文件过大1GB/15分钟

2.2 协议解析引擎

层次化解析

  1. Frame 1: 66 bytes on wire (528 bits), 66 bytes captured
  2. Ethernet II, Src: 00:1a:2b:3c:4d:5e, Dst: ff:ff:ff:ff:ff:ff
  3. Internet Protocol Version 4, Src: 192.168.1.100, Dst: 8.8.8.8
  4. Transmission Control Protocol, Src Port: 54321, Dst Port: 443
  5. Hypertext Transfer Protocol
  6. GET / HTTP/1.1\r\n
  7. Host: example.com\r\n
  8. ...
复制代码

协议字段提取

  • TCP窗口大小:tcp.window_size
  • HTTP状态码:http.response.code
  • DNS查询类型:dns.qry.type
  • TLS证书指纹:ssl.handshake.certificates

2.3 显示过滤器语法

基础过滤

  1. # 协议过滤
  2. tcp || udp || icmp
  3. # 地址过滤
  4. ip.addr == 192.168.1.100
  5. # 端口过滤
  6. tcp.port == 8080
复制代码

高级过滤

  1. # 检测TCP重传
  2. tcp.analysis.retransmission
  3. # 查找零窗口事件
  4. tcp.analysis.zero_window
  5. # 识别DNS隧道
  6. dns.flags.response == 1 && dns.qry.name contains ".exe"
  7. # 分析HTTP/2帧
  8. http2.stream.id == 1 && http2.headers.name == ":method"
复制代码

2.4 统计分析功能

IO图表

  • TCP流图:Statistics > IO Graph
    • 配置Y轴:SUM(tcp.len)tcp.len > 0
    • 时间窗口:1秒/10秒/1分钟

会话统计

  • TCP会话:Statistics > Conversations
    • 按字节/包数排序
    • 导出为CSV格式

协议分层

  • 协议层级:Statistics > Protocol Hierarchy
    • 展开TLS层查看应用协议分布
    • 过滤加密流量:ssl.handshake.type == 1

三、典型应用场景

3.1 协议深度分析

HTTP/2性能分析

  1. 启用http2协议解析
  2. 使用过滤器:http2.stream.id == 1
  3. 关键指标:
    • HEADERS帧大小
    • DATA帧间隔
    • WINDOW_UPDATE频率

QUIC协议解码

  1. 安装QUIC协议插件
  2. 配置过滤器:quic.header.connection_id == 0x1a2b3c4d
  3. 分析0-RTT握手过程

3.2 故障排查实战

网络延迟诊断

  1. 捕获ICMP回显请求
  2. 添加时间列:View > Time Display Format > Seconds Since Beginning of Capture
  3. 计算RTT:icmp.time - delta_time_displayed

TCP连接失败

  1. 查找SYN包:tcp.flags.syn == 1
  2. 检测SYN重传:tcp.analysis.retransmission
  3. 分析RST原因:tcp.flags.reset == 1

DNS解析异常

  1. 过滤DNS响应:dns.flags.response == 1
  2. 检查NXDOMAIN:dns.qry.type == 1 && dns.flags.rcode == 3
  3. 验证DNSSEC:dns.sec.ds.digest_type == 2

3.3 安全审计应用

恶意流量检测

  1. 识别C2通信:dns.qry.name contains "weird-domain.com"
  2. 检测数据泄露:tcp contains "password="
  3. 分析加密流量:ssl.handshake.extension.server_name == "malware-site.com"

APT攻击追踪

  1. 重建TCP流:Follow > TCP Stream
  2. 识别Beaconing:tcp.time_delta > 60
  3. 分析DNS隧道:dns.count > 100

四、高级功能集成

4.1 命令行工具tshark

基础用法

  1. # 提取HTTP GET请求
  2. tshark -r capture.pcap -Y "http.request.method == GET" -T fields -e http.request.full_uri
  3. # 生成流量摘要
  4. tshark -qz io,stat,1
复制代码

自动化脚本

  1. #!/bin/bash
  2. tshark -i eth0 -f "port 53" -T json | jq '.[] | select(.dns.qry.name=="evil-domain.com")'
复制代码

4.2 Python集成

PyShark示例

  1. import pyshark
  2. cap = pyshark.FileCapture('capture.pcap', display_filter='http.request.method == POST')
  3. for pkt in cap:
  4. if 'HTTP' in pkt:
  5. print(f"POST请求: {pkt.http.request.full_uri}")
  6. print(f"载荷大小: {len(pkt.http.file_data)}字节")
复制代码

Scapy集成

  1. from scapy.all import *
  2. packets = rdpcap('capture.pcap')
  3. http_packets = [p for p in packets if p.haslayer(HTTPRequest)]
  4. for p in http_packets:
  5. print(p[HTTPRequest].Method.decode(), p[HTTPRequest].Path.decode())
复制代码

4.3 Lua扩展脚本

自定义协议解析

  1. -- 注册新协议
  2. local custom_proto = Proto("CUSTOM","Custom Protocol")
  3. local f_magic = ProtoField.uint32("custom.magic", "Magic Number", base.HEX)
  4. custom_proto.fields = { f_magic }
  5. function custom_proto.dissector(buffer, pinfo, tree)
  6. pinfo.cols.protocol = "CUSTOM"
  7. local subtree = tree:add(custom_proto, buffer())
  8. subtree:add(f_magic, buffer(0,4))
  9. end
  10. -- 注册到端口4444
  11. local tcp_table = DissectorTable.get("tcp.port")
  12. tcp_table:add(4444, custom_proto)
复制代码

五、性能优化技巧

5.1 硬件加速方案

DPDK捕获

  1. 安装DPDK驱动:modprobe uio_pci_generic
  2. 绑定网卡:dpdk-devbind.py --bind=igb_uio 0000:01:00.0
  3. 启动Wireshark:WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1 ./wireshark -k -i dpdk0

PF_RING支持

  1. # 安装PF_RING
  2. git clone https://github.com/ntop/PF_RING
  3. cd PF_RING/kernel
  4. make && sudo make install
  5. # 启动Wireshark
  6. wireshark -i zc:eth0
复制代码

5.2 过滤表达式优化

避免正则表达式

  1. # 低效写法
  2. http.request.uri matches "user=\d+"
  3. # 高效写法
  4. http.request.uri contains "user=" && tcp.len > 20
复制代码

使用字段哈希

  1. # 快速查找特定IP
  2. ip.addr == 192.168.1.100
  3. # 替代写法
  4. frame contains "c0.a8.01.64"
复制代码

5.3 捕获文件管理

文件分片

  1. # 按时间分片
  2. wireshark -b filesize:1000 -b files:10 -w capture
  3. # 按包数分片
  4. editcap -c 100000 capture.pcap split_
复制代码

文件压缩

  1. # 实时压缩捕获
  2. wireshark -w - | gzip > capture.pcap.gz
  3. # 解压分析
  4. wireshark -r <(gzip -dc capture.pcap.gz)
复制代码

六、生态工具链

6.1 协同工具

工具名称功能描述集成方式
CloudShark云端pcap分析上传至https://www.cloudshark.org
NetworkMiner取证分析文件 > 导入 > 选择NetworkMiner格式
tcpflow流重建运行后选择Wireshark数据包

6.2 扩展插件

插件名称功能描述安装方式
Lua插件自定义协议解析放入~/.config/wireshark/plugins
Dissector插件增强协议支持通过插件管理器安装
ColorRules自定义着色规则编辑colorfilters文件

七、最佳实践指南

7.1 捕获策略

  1. 明确目标:确定需要分析的协议/端口/IP
  2. 最小化捕获:使用捕获过滤器减少数据量
  3. 分段存储:设置文件分片避免单个文件过大
  4. 时间同步:启用NTP保证时间戳准确性

7.2 分析流程

  1. 全局概览:使用IO图表识别流量峰值
  2. 协议分层:通过Protocol Hierarchy定位异常协议
  3. 会话跟踪:Follow TCP Stream重建通信内容
  4. 专家诊断:查看专家信息提示的警告/错误

7.3 性能调优

  • 内存优化:设置Edit > Preferences > Capture > Allow subdissector to reassemble TCP streams为Off
  • 显示优化:禁用View > Auto Scroll in Live Capture
  • 硬件加速:启用DPDK/PF_RING捕获引擎

八、常见问题解决

8.1 权限问题

现象:Could not open interface eth0

解决方案

  1. # Linux
  2. sudo setcap 'CAP_NET_RAW+eip' /usr/bin/wireshark
  3. # macOS
  4. sudo chmod 644 /dev/bpf*
复制代码

8.2 性能问题

现象:分析万兆流量时丢包

优化方案

  1. 启用DPDK捕获
  2. 关闭实时解码:Capture > Options > Update list of packets in real time设为Off
  3. 使用环形缓冲区:-b ringbuffer:1024

8.3 解码问题

现象:协议显示为DATA

解决方案

  1. 右键数据包 > Decode As > 选择正确协议
  2. 安装对应协议插件:Help > About Wireshark > Plugins
  3. 更新协议定义文件:Help > Check for Updates
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行