官方手册: https://www.wireshark.org/docs/wsug_html_chunked/
常用协议抓包示例: https://wiki.wireshark.org/SampleCaptures
1. 捕获窗口
点击捕获->选项
,就可以打开捕获窗口,它分为3个部分:输入,输出,选项
-
输入:即捕获过滤器,使用BPF语法
-
输出 输出主要关注的是我们现在在抓包的时候,它要么记到临时文件里,要么记到永久文件里。 如果记到永久文件里呢,我们可以点击"浏览",选择一个永久的文件的位置。留空表示使用临时文件。
如果是临时文件呢,我们还可以选择,经过多少秒,多少字节,我们换一个新的临时文件。 或者使用一个环形缓冲器,比如说我们有2个文件,第一个文件记录完后,就使用第二个文件, 第二个文件记录完后,就会覆盖第一个文件的内容。
- 选项 主要用来判定什么时候,多长时间,自动停止捕获。 比如说我抓了100个报文以后,或者10000个报文以后,自动停止。 或者当我记录多少个文件,抓取到多少个字节,或者过了多少秒以后,自动停止捕获。
2. 主面板
- 工具栏
- 显示过滤器
- 数据包列表
- 不同的颜色代表不同的协议(点击
试图->着色规则
按钮进行设置) - Time列:可以点击
试图->时间显式格式
来设置是使用相对时间还是绝对时间 - 每行的开头会有不同的符号,表示不同的含义
┌ : 会话中的第1个数据包 │ : 会话中选中的数据包 虚线 : 不属于所选会话中的数据包 └ : 会话中最后一个数据包 向右的箭头: 请求 向左的箭头: 响应 一个对勾 : 若当前选中的是ACk报文,则此报文是它确认的那个报文 两个对勾 : 若当前选中的是ACK报文,则此报文是它重复确认的那个报文 点 : 选中的报文与此报文有某种关联
- 不同的颜色代表不同的协议(点击
- 数据包细节: Frame是wireshark自己的一个分层,Ethernet是以太网的,Internet是网络层的, Transmmission Control Protocol是传输层的,Hypertext Transfer Protocol是应用层的。
- 数据包字节流
2.1 四种流跟踪
- TCP
- UDP
- SSL
- HTTP
2.2 文件操作
因为在分析很复杂的问题的时候,我们需要多台客户端和服务器上同时抓包,同时抓包的时候,我们就需要一个比对,比对的时候呢,还有很多干扰的报文,那么这个时候,我们怎么很好的利用wireshark工具,帮助我们减少分析的难度呢
- 标记报文Ctrl+M
- 导出标记报文(文件->导出特定分组),亦可按过滤器导出报文
- 合并读入多个报文(文件->合并)
2.3 显示过滤器
- 显示过滤器的过滤属性
- 任何在报文细节面板中解析出的字段名,都可以作为过滤属性
- 在试图->内部->支持的协议面板里,可以看到各字段名对应的属性名
- 例如,在报文细节面板中TCP协议头中的Source Port,对应着过滤属性为tcp.srcport
- 在试图->内部->支持的协议面板里,可以看到各字段名对应的属性名
>Frame 7: 753 bytes on wire (6024 bits),
>Ethernet II,
>Internet Protocol Version 4,
>Transmission Control Protocol, Src Port:
Source Port: 14569 ----------------> Source Port: tcp.srcport
Destination Port: 80
[Strem index: 4]
[TCP Segment Len: 699]
Sequence number: 1
[Next sequence number: 700]
Acknowledgment number: 1
-
过滤值比较符号
英文 符号 描述及示例 eq == 等于,ip.src==10.0.0.5 ne != 不等于, ip.src!=10.0.0.5 gt > 大于,frame.len > 10 lt < 小于,frame.len < 128 ge >= 大于等于,frame.len ge 0x100 le <= 小于等于,frame.len <= 0x20 contains 包含, sip.To contains “a1762” matches ~ 正则匹配, host matches “acme\.(org|com|net)” bitwise_add & 位与操作, tcp.flags & 0x02 -
过滤值类型
- Unsigned integer: 无符号整型,例如ip.len le 1500
- Signed integer: 有符号整型
- Boolean: 布尔值,例如tcp.flags.syn
- Ethernet address: 以:或者-或者.分隔的6字节地址,例如eth.dst==ff:ff:ff:ff:ff:ff
- IPv4 address: 例如ip.addr==192.168.0.1
- IPv6 address: 例如ipv6.addr==::1
- Text string: 例如http.request.uri==“https://www.wireshark.org/"
-
多个表达式间的组合 | 英文 | 符号 | 意义及示例 | | and | && | AND逻辑与, ip.src==10.0.0.5 and tcp.flags.fin | | or | || | OR逻辑或, ip.src==10.0.0.5 or ip.src==192.1.1.1 | | xor | ^^ | XOR逻辑异或, tr.dst[0:3]==0.6.29 xor tr.src[0:3]==0.6.29 | | not | ! | NOT逻辑非, not llc | | […]| | 见Slice切片操作符 | | in | | 见集合操作符 |
-
其他常见操作符
- 大括号{}集合操作符
- 例如, tcp.port in {443 4430..4434},实际等价于tcp.port==443||(tcp.port>=4430&&tcp.port<=4434)
- 中括号[]Slice切片操作符
- [n:m]表示n是起始偏移量,m是切片长度
- eth.src[0:3]==00:00:83
- [n-m]表示n是起始偏移量,m是截止偏移量
- eth.src[1-2]==00:83
- [:m]表示从开始处至m截止偏移量
- eth.src[:4]==00:00:83:00
- [m:]表示m是起始偏移量,至字段结尾
- eth.src[4:]==20:20
- [m]表示取偏移量m处的字节
- eth.src[2]==83
- [,]使用逗号分隔时,允许以上方式同时出现
- eth.src[0:3,1-2,:4,4:,2]==00:00:83:00:83:00:00:83:00:20:20:83
- [n:m]表示n是起始偏移量,m是切片长度
- 可用函数 upper Converts a string field to uppercase lower Converts a string field to lowercase len Returns the byte length of a string or bytes field count Returns the number of field occurrences in a frame string Converts a non-string field to a string
3. Wireshark如何解密TLS消息?
- 原理: 获得TLS握手阶段生成的密钥
- 通过Chrome浏览器DEBUG日志中的握手信息,生成密钥
- 步骤
- 配置Chrome输出DEBUG日志
- 配置环境变量SSLKEYLOGFILE 例如exprot SSLKEYLOGFILE=/root/mytestssl.txt
- 在Wireshark中配置解析DEBUG日志
- 编辑->首选项->Protocols-TLS/SSL
- (Pre)-Master-Secret log filename
- 编辑->首选项->Protocols-TLS/SSL
- 配置Chrome输出DEBUG日志
需要注意:如何我们使用wireshark抓包,因为浏览器有的时候会保持长连接, 如果这个连接不是从一开始建立的时候,我们就开始抓的话,比如说这个连接其实一直保持, 但是我们用wireshark重新抓包,这个时候我们发现,所对应的报文是解不了的, 因为这个时候wireshark没有能够生成那样一个密钥, 就是我们这个连接上的TLS密钥,所以它就解不了, 就会发现都是TLS/SSL1.2协议的报文,而不是已经解密好的http2协议的报文。
本文发表于 0001-01-01,最后修改于 0001-01-01。
本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。