wireshark使用
wireshark工作原理
wireshark是一个网络封包分析软件,处于混杂模式(Promiscuous)的Wireshark可以抓取改冲突域的所有网络封包。它的基本原理是通过程序将网卡的工作模式设置为“混杂模式”,这时网卡将接受所有流经它的数据帧,这实际上就是Sniffer工作的基本原理:让网卡接收一切他所能接收的数据。Sniffer就是一种能将本地网卡状态设成混杂状态的软件,当网卡处于这种”混杂”方式时,该网卡具备”广播地址”,它对所有遇到的每一个数据帧都 产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。
Wireshark界面说明
Wireshark界面主要分为三部分
第一部分
第一部分展示的是wireshark抓取的所有数据包的列表。
注意:最后一列Info是wireshark组织的说明并不一定是数据包中的原始内容
我们可以看到有很多的色彩显示这是wireshark为了区分不同的报文做的颜色提示,可以通过点击上方视图->试图规则,查看并修改。
其中重要的规则有以下几条
黑色代表报文错误
红色代表各类异常
其他颜色都为正常
第二部分
第二部分是针对第一部分窗口中选中的数据包的分协议展示
注意:如果出现红色是因为wireshark开启校验和验证而该层协议验证和校验不正确导致
- Frame:物理层的数据帧概况
- Ethernet Ⅱ:数据链路层以太网帧头部信息
- Internet Protocol Version 4: 互联网层IP包头部信息
- Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP
- Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
第三部分
第三部分是对第一部分选中的数据包的元数据,其中左侧是十六进制表示右侧是ASCll码表示,当第二部分中选中某层或某字段,第三部分中的对应位置也会被高亮提示。
wireshark过滤器使用
因为信息量大,有很多的冗余报文。为了方便的从中获取需要的报文,我们必须熟练使用wireshark提供的过滤器,捕获过滤器和显示过滤器。
捕获过滤器
捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。
显示过滤器
显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。
两种过滤器使用时都需要遵守一定的语法,不过在使用的过程中,wireshark提供一些简单常用的过滤命令基本可以满足需求。
过滤规则
符号 | 含义 |
---|---|
eq, == | 等于 |
ne,!= | 不等于 |
gt,> | 大于 |
lt,< | 小于 |
ge,>= | 大于等于 |
le,<= | 小于等于 |
and,&& | 且 |
or,|| | 或 |
not,! | 取反 |
举例
过滤源IP、目的IP
ip.dst==192.168.101.8
ip.src==1.1.1.1
端口过滤
tcp.dstport==80
tcp.srcport==80
http模式过滤
http.request.method=="GET"
http.request.method=="POST"
wireshark使用
当你筛选过后数据包的数量会少很多,我们可以通过右键-》追踪流-》选择相应协议进行追踪,因为我使用的是tcp协议所以我这边只有tcp流可以点击。
点击后弹出窗口即可看到
主要分为两种颜色红色与蓝色
红色:源地址到目的地址
蓝色:目的地址到源地址
FLAGS字段含义
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.
它们的含义是:
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
RST表示连接重置。
TCP的SEQ和ACK总结:
在TCP通讯中,无论是建立连接,数据传输,友好断开,强制断开,都离不开Seq值和Ack值,它们是TCP传输的可靠保证。Seq是发送方告诉接收方,我当前从第Seq个字节开始发送len个字节数据(不包括以太网Eth头,IP头和Tcp头,也就是纯数据长度)给你,而Ack则是接收方给发送方回复:接收方回复的Ack=发送方Seq+发送数据长度len。
在建立连接双方握手时,发送方的Seq为0,表示发送的数据长度也为0,这时接收方收到数据帧后,会判断Seq+数据长度为0或者Seq+数据长度为1的话,那么在回应发送方的Ack的值就为1(也就表示确认号有效,为0的话就表示数据包中不包含确认信息(即不含有Ack字段),忽略确认号字段)。
在数据传输中,如果Seq+数据长度不为0或1并且数据长度不为0的话,则回应时的Ack就等于Seq+数据长度的值,这就表示我已经收到Seq+数据长度个字节的数据。发送方收到该Ack就会比较自己的Seq+刚发出去的纯数据长度,如果一致,则回应接收方的Ack,并且发送下一个包,否则将重发该包,若超时还没收到Ack也会重发该包。