“Wireshark怎么抓HTTPS流量?”“怎么从流量中分析攻击?”“显示过滤器怎么写?”
Wireshark是网络流量分析的"标准工具"。无论是排查网络故障、分析攻击行为,还是做流量取证,Wireshark都是必备技能。
在护网和应急响应中,流量分析是发现攻击的关键手段。一个精心构造的攻击,可能绕过WAF、绕过IDS,但流量中总会留下痕迹。能不能发现,取决于你对流量分析的理解深度。
我第一次用Wireshark分析攻击流量是在应急响应中,通过过滤HTTP流量,发现了一波扫描和爆破的请求,顺藤摸瓜找到了攻击者利用的漏洞。从此以后,流量分析成了我排查安全事件的第一步。
今天我把Wireshark的完整知识整理出来:抓包配置、过滤器语法、协议分析、攻击识别、流量取证。看完这篇,你用Wireshark不再只是"看个热闹"。
⚠️ 注意:流量分析仅用于安全运维和防御目的。
一、Wireshark基础
核心功能
| 功能 | 说明 |
|---|---|
| 实时抓包 | 捕获网络接口流量 |
| 协议解析 | 支持2000+协议解析 |
| 过滤器 | 捕获过滤+显示过滤 |
| 流分析 | TCP流重组和跟踪 |
| 统计分析 | 协议分级、IO图表 |
| 导出对象 | 导出HTTP/DNS/SMB对象 |
界面布局
┌─────────────────────────────┐ │ 过滤器栏 │ ├─────────────────────────────┤ │ 数据包列表区 │ ├─────────────────────────────┤ │ 数据包详情区 │ ├─────────────────────────────┤ │ 数据包原始数据 │ ├─────────────────────────────┤ │ 状态栏 │ └─────────────────────────────┘抓包配置
1. 选择接口 → Capture → Options 2. 混杂模式(Promiscuous mode)→ 开启 3. 捕获过滤器 → 限定抓包范围 4. 输出文件 → 设置自动轮转 5. 开始抓包捕获过滤器(BPF语法)
# 只抓指定主机host192.168.1.10# 只抓指定端口port80port80or port443# 排除指定主机nothost192.168.1.5# 组合过滤host192.168.1.10 and port80srchost192.168.1.10 and dst port443# 抓指定协议tcp udp icmp arp# 不抓广播和组播not broadcast and not multicast二、显示过滤器
基本语法
# 基本比较ip.addr==192.168.1.10 ip.src==192.168.1.5 tcp.port==80http.request.method=="POST"# 逻辑运算http and ip.addr==192.168.1.10 tcp.port==80or tcp.port==443not arp and not icmp# 协议过滤http dns tls tcp udp# 字段比较http.response.code==200http.request.uri contains"admin"tcp.flags.syn==1frame.len>1000常用过滤器速查
| 过滤器 | 说明 |
|---|---|
ip.src == x.x.x.x | 源IP |
ip.dst == x.x.x.x | 目标IP |
tcp.port == 80 | TCP端口 |
udp.port == 53 | UDP端口 |
http | HTTP流量 |
http.request.method == "POST" | POST请求 |
http.response.code == 200 | 200响应 |
http.request.uri contains "union" | URL含union |
dns | DNS流量 |
dns.qry.name contains "evil" | DNS查询含evil |
tls.handshake.type == 1 | TLS Client Hello |
tcp.flags.syn == 1 && tcp.flags.ack == 0 | SYN包 |
tcp.flags.reset == 1 | RST包 |
frame.len > 1000 | 大于1000字节 |
tcp.analysis.retransmission | TCP重传 |
组合过滤器
# 找SQL注入攻击http.request.uri contains"union"or http.request.uri contains"select"or http.request.uri contains"sleep"or http.request.uri contains"benchmark"# 找目录扫描http.response.code==404or http.response.code==403# 找密码爆破http.request.method=="POST"and http contains"password"# 找Webshell上传http.request.method=="POST"and(http.request.uri contains"upload"or http.request.uri contains"file"or http.file_data contains"eval")# 找反弹Shelltcp.flags.syn==1and tcp.flags.ack==0and ip.src!=192.168.0.0/16# 找DNS隧道dns.qry.name.len>50or dns.qry.name contains"base64"三、协议分析
HTTP分析
# 查看HTTP请求http.request# 跟踪HTTP流右键 → Follow → HTTP Stream# 提取HTTP对象File → Export Objects → HTTP# 查看POST请求内容http.request.method=="POST"# 在详情区查看FormDataDNS分析
# 所有DNS查询dns.qry.name# 特定域名查询dns.qry.name contains"malicious"# DNS响应中的IPdns.a# DNS隧道检测# 特征:超长子域名、高频查询、TXT记录异常dns.qry.name.len>50dns.txtTLS/SSL分析
# TLS握手tls.handshake.type==1# Client Hellotls.handshake.type==2# Server Hello# 查看SNI(服务器名指示)tls.handshake.extensions_server_name# HTTPS解密(需要私钥)Edit → Preferences → Protocols → TLS → Add → 配置IP/端口/密钥文件TCP分析
# TCP三次握手tcp.flags.syn==1&&tcp.flags.ack==0# SYNtcp.flags.syn==1&&tcp.flags.ack==1# SYN-ACKtcp.flags.syn==0&&tcp.flags.ack==1# ACK# TCP流跟踪右键 → Follow → TCP Stream# 查看TCP重传tcp.analysis.retransmission# 查看TCP连接建立和关闭tcp.flags.syn==1or tcp.flags.fin==1or tcp.flags.reset==1四、攻击流量识别
1. 端口扫描
# TCP SYN扫描特征:大量SYN包,少量回应tcp.flags.syn==1&&tcp.flags.ack==0# 统计扫描源IP# Statistics → IPv4 Statistics → Destination# 或使用过滤器后查看端点统计| 扫描类型 | 流量特征 |
|---|---|
| SYN扫描 | 大量SYN,无完整连接 |
| 全连接扫描 | 完成三次握手 |
| UDP扫描 | 大量UDP包+ICMP不可达 |
| 端口扫描 | 短时间内大量不同端口 |
2. 密码爆破
# HTTP爆破特征# 大量POST请求,大量401/403响应http.request.method=="POST"and(http.response.code==401or http.response.code==403)# SSH爆破特征# 大量SSH连接,相同源IPsshand tcp.flags.syn==1# RDP爆破特征tcp.port==3389and tcp.flags.syn==1# 统计连接频率3. SQL注入
# GET注入http.request.uri contains"union"or http.request.uri contains"select"or http.request.uri contains"'"# POST注入http.request.method=="POST"and(http.file_data contains"union"or http.file_data contains"select"or http.file_data contains"sleep")# 时间盲注特征# 请求后出现固定延迟的响应4. Webshell通信
# 一句话木马特征http.request.method=="POST"and(http.file_data contains"eval"or http.file_data contains"system"or http.file_data contains"exec"or http.file_data contains"passthru")# 命令执行特征http.file_data contains"whoami"or http.file_data contains"net user"or http.file_data contains"id;"5. 反弹Shell
# 常见反弹Shell端口tcp.dstport==4444or tcp.dstport==1234or tcp.dstport==9001# Bash反弹特征tcp.stream and data contains"/dev/tcp/"or data contains"bash -i"# 特征:内网主机主动外连非常见端口ip.src==192.168.0.0/16 and tcp.flags.syn==1and tcp.flags.ack==0and tcp.dstport notin{80,443,53,25,22}6. 挖矿木马
# 常见矿池连接# Stratum协议特征tcp.port==3333or tcp.port==5555or tcp.port==7777or tcp.port==14444# 常见矿池域名tls.handshake.extensions_server_name contains"pool"or tls.handshake.extensions_server_name contains"mining"or dns.qry.name contains"xmr"or dns.qry.name contains"monero"五、统计分析
协议分级
# Statistics → Protocol Hierarchy# 查看各协议占比# 异常:大量未知协议或非常见端口通信端点统计
# Statistics → Endpoints# 查看通信端点# 异常:内网主机与未知外网IP大量通信会话统计
# Statistics → Conversations# 查看IP间会话# 异常:某IP与大量主机通信(可能扫描)IO图表
# Statistics → I/O Graphs# 查看流量趋势# 异常:突发大流量(可能数据外泄或DDoS)六、流量取证
提取文件
# HTTP对象提取File → Export Objects → HTTP# 可提取上传/下载的文件# SMB对象提取File → Export Objects → SMB# 从TCP流中提取数据Follow TCP Stream → 数据部分 → Save as数据包还原
# 还原完整HTTP会话# 使用 tshark 命令行工具tshark-rcapture.pcap-Y"http"-Tfields\-eframe.time-eip.src-eip.dst\-ehttp.request.method-ehttp.request.uri\-ehttp.response.code# 提取所有URLtshark-rcapture.pcap-Y"http.request"-Tfields\-ehttp.host-ehttp.request.uri# 提取DNS查询tshark-rcapture.pcap-Y"dns.qry.name"-Tfields\-edns.qry.name|sort-uPCAP分析自动化
fromscapy.allimportrdpcap,TCP,IP,Rawdefanalyze_pcap(pcap_file):"""分析PCAP文件,提取关键信息"""packets=rdpcap(pcap_file)urls=set()dns_queries=set()suspicious_ips=set()forpktinpackets:# 提取HTTP URLifpkt.haslayer(Raw)andpkt.haslayer(TCP):payload=pkt[Raw].load.decode('utf-8',errors='ignore')if'GET 'inpayloador'POST 'inpayload:start=payload.find(' ')+1end=payload.find(' HTTP')ifstart<end:path=payload[start:end]url=f"{pkt[IP].dst}{path}"urls.add(url)# 检测可疑外连ifpkt.haslayer(TCP)andpkt.haslayer(IP):tcp=pkt[TCP]ip=pkt[IP]# 非常见端口外连iftcp.flags=='S'andtcp.dportnotin[80,443,53,22,25]:suspicious_ips.add(f"{ip.src}→{ip.dst}:{tcp.dport}")print(f"URL数量:{len(urls)}")forurlinsorted(urls):print(f"{url}")print(f"\n可疑外连:{len(suspicious_ips)}")foripinsorted(suspicious_ips):print(f"{ip}")# 使用analyze_pcap("capture.pcap")七、tshark命令行工具
# 基本统计tshark-rcapture.pcap-q-zio,stat,0# 协议统计tshark-rcapture.pcap-q-zio,phs# 会话统计tshark-rcapture.pcap-q-zconv,tcp# 提取HTTP请求tshark-rcapture.pcap-Y"http.request"-Tfields\-eframe.time-eip.src-ehttp.host-ehttp.request.uri# 提取DNS查询tshark-rcapture.pcap-Y"dns.qry.name"-Tfields-edns.qry.name# 按时间过滤tshark-rcapture.pcap-Y"frame.time >= 2024-09-25 10:00:00"\-Y"frame.time <= 2024-09-25 11:00:00"# 提取特定IP的流量tshark-rcapture.pcap-Y"ip.addr == 192.168.1.10"八、实战案例
案例1:分析Web攻击
1. 过滤HTTP请求:http.request 2. 查看异常URI:http.request.uri contains "union" 3. 跟踪TCP流:查看完整请求和响应 4. 提取上传文件:Export Objects → HTTP 5. 分析攻击路径:从扫描到利用的完整过程案例2:检测数据外泄
1. 统计大流量会话:Statistics → Conversations 2. 过滤外连流量:ip.dst != 192.168.0.0/16 3. 查看上传数据:http.request.method == "POST" 4. 分析数据内容:Follow TCP Stream 5. 提取外传文件:Export Objects案例3:排查入侵行为
1. 时间线分析:IO Graph查看流量趋势 2. 协议分析:Protocol Hierarchy看异常协议 3. 会话分析:Conversations找异常连接 4. 深入分析:Follow TCP Stream看具体内容 5. 取证提取:导出文件和关键数据九、Wireshark快捷键
| 快捷键 | 功能 |
|---|---|
| Ctrl+K | 捕获选项 |
| Ctrl+E | 开始/停止捕获 |
| Ctrl+R | 重新打开文件 |
| Ctrl+F | 查找数据包 |
| Ctrl+N | 查找下一个 |
| Ctrl+M | 标记/取消标记 |
| Shift+Ctrl+M | 跳转到下一个标记 |
| Ctrl+G | 跳转到指定包 |
| Alt+N | 下一个会话 |
十、学习资源
Wireshark是网络分析的基础工具。无论是应急响应、入侵检测还是网络运维,流量分析能力都是核心竞争力。工具本身不难学,难的是对协议的理解和对攻击流量的敏锐识别。
从基本过滤到攻击识别,从协议分析到流量取证,每一步都需要大量的实战练习。建议多抓一些靶场环境的流量,反复分析各种攻击的流量特征。
如果你对网络安全和流量分析感兴趣,想系统学习更多知识——包括网络协议、入侵检测、应急响应、CTF实战等——可以参考下面整理的完整学习资料包。
内容涵盖:
从零基础到实战进阶,200+节视频课程,配套工具和靶场环境,涵盖攻防对抗全生命周期。
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
总结
| 分析维度 | 核心方法 |
|---|---|
| 过滤筛选 | 显示过滤器精确过滤 |
| 协议分析 | 逐层解析协议字段 |
| 攻击识别 | 匹配攻击流量特征 |
| 统计分析 | 协议分级/会话/IO图表 |
| 取证提取 | 导出对象/跟踪流/tshark |
🔒 流量是攻击的"指纹"。再隐蔽的攻击,在流量中也会留下痕迹。学会流量分析,等于拥有了"看见一切"的能力。
————————————————