wireShark总结
一、常见协议包:1.ARP协议 2.ICMP协议 3.TCP协议 4.UDP协议 5.DNS协议 6.HTTP协议
1、ARP 协议
- 简述:就像你要给朋友家送快递,但只知道朋友家的门牌号(IP 地址),不知道具体位置。这时你就去问小区物业(ARP 协议的作用),物业告诉你朋友家的具体位置(MAC 地址)。
- 常见问题:ARP 欺骗就好比有个坏人冒充物业,给你错误的朋友家位置信息,结果你的快递就送错地方了。
- 解决方案:可以像给重要朋友家设置专门的联系卡片一样,使用静态 ARP 缓存,手动设置正确的 IP 地址和 MAC 地址对应关系;也可以安装类似小区安保系统的防火墙,防止坏人冒充物业;还可以使用专门的检测软件,就像安排专人监督物业的工作。
2、ICMP 协议
- 简述:好比你给朋友寄快递后,时不时去问问快递站(ICMP 协议的作用)包裹到哪了,快递站给你一些反馈信息。
- 常见问题:可能快递站太忙了,不回应你的询问,就像 Ping 不通目标主机,可能是因为网络故障或者某些设置阻止了这种询问。
- 解决方案:检查是不是自己的询问方式不对,就像检查防火墙设置;再看看是不是快递运输过程中出了问题,即检查网络连接。
3、TCP 协议
- 简述:你和朋友写信交流,要先打招呼确认对方能收到信(三次握手建立连接),然后很认真地一封信一封信地交流,确保每封信都能准确无误地送到对方手里,而且顺序也不会乱。
- 常见问题:可能因为邮路堵塞(网络拥塞)、朋友搬家了(目标主机不可达)或者朋友家邮箱坏了(服务未启动),导致信送不出去或者很久才送到,甚至信丢了。
- 解决方案:看看邮路是不是真的堵了,优化网络设置;确认朋友是不是真的搬家了,检查网络连接和目标主机状态;检查朋友家邮箱是不是正常,看看服务有没有启动。
4、UDP 协议
- 简述:就像你给朋友发语音消息,很快就发出去了,也不管朋友有没有收到或者顺序对不对,只要能快点传达就行。
- 常见问题:可能朋友没收到消息,或者收到的顺序乱了,因为 UDP 协议不保证数据的可靠传输。
- 解决方案:如果很重要的话,可以在发语音消息的时候加上一些确认的话,就像在应用层增加数据校验和重传机制;如果不是很重要,那就可以容忍这种情况。
5、DNS 协议
- 简述:你想去一个商场(网站),但只知道商场的名字(域名),这时候你就去问导航(DNS 协议的作用)商场的具体位置(IP 地址)。
- 常见问题:导航坏了找不到商场(DNS 服务器故障),或者根本没有这个商场(域名不存在),还有可能被坏人误导去了假商场(DNS 劫持)。
- 解决方案:换一个靠谱的导航,即更换可靠的 DNS 服务器;确认商场名字对不对,检查域名是否正确;加强安全防范,防止被坏人误导,就像加强网络安全防护。
6、HTTP 协议
- 简述:你在网上浏览网页,就像在逛一个超级大的虚拟商场,HTTP 协议就是你和商场之间的通道,让你能看到商场里的各种商品信息。
- 常见问题:你想去的店铺不存在了(404 错误),商场内部出问题了(500 内部服务器错误),或者你等了很久商场的页面都没加载出来(连接超时)。
- 解决方案:确认店铺是不是真的不在了,检查请求的资源是否存在;看看商场内部是不是出了问题,检查服务器端程序是否正常运行;优化网络设置,提高网络速度,就像让商场的通道更顺畅。
二、wireShark的使用
1、wireShark的两个模式:
混杂模式与普通模式
-
混杂模式:混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。
-
普通模式:普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。
一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用,
模式打开方式:点击左上角的捕获-选项,把在所有接口上使用混杂模式勾上,点击开始即可
2、WireShark过滤器使用
1.抓包过滤器语法和实例
- 抓包过滤器由类型
Type
(host、net、port)、方向Dir
(src、dst)、协议Proto
(ether、ip、tcp、udp、http、icmp、ftp 等)以及逻辑运算符(&& 与、|| 或、!非)组成。- 协议过滤:直接在抓包过滤框中输入协议名即可,如
tcp
只显示 TCP 协议的数据包列表(注意 HTTP 底层也是 TCP 的封装)。 - IP 过滤:
host 192.168.1.104
表示特定 IP 的数据包;src host 192.168.1.104
是源地址为该 IP 的数据包;dst host 192.168.1.104
是目的地址为该 IP 的数据包。 - 端口过滤:
port 80
表示特定端口的数据包;src port 80
是源端口为该值的数据包;dst port 80
是目的端口为该值的数据包。 - 逻辑运算符:
src host 192.168.1.104 && dst port 80
抓取主机地址为 192.168.1.80、目的端口为 80 的数据包;host 192.168.1.104 || host 192.168.1.102
抓取主机为 192.168.1.104 或者 192.168.1.102 的数据包;!broadcast
不抓取广播数据包。
- 协议过滤:直接在抓包过滤框中输入协议名即可,如
2.显示过滤器语法和实例
- 比较操作符有
==
等于、!=
不等于、>
大于、<
小于、>=
大于等于、<=
小于等于。- ip 过滤:
ip.src ==192.168.1.104
显示源地址为 192.168.1.104 的数据包列表;ip.dst==192.168.1.104
显示目标地址为 192.168.1.104 的数据包列表;ip.addr == 192.168.1.104
显示源 IP 地址或目标 IP 地址为 192.168.1.104 的数据包列表。 - 端口过滤:
tcp.port ==80
显示源主机或者目的主机端口为 80 的数据包列表;tcp.srcport == 80
只显示 TCP 协议的源主机端口为 80 的数据包列表;tcp.dstport == 80
只显示 TCP 协议的目的主机端口为 80 的数据包列表。 - Http 模式过滤:
http.request.method=="GET"
只显示 HTTP GET 方法的。 - 逻辑运算符为
and/or/not
:过滤多个条件组合时,使用and/or
。比如获取 IP 地址为 192.168.1.104 的 ICMP 数据包表达式为ip.addr == 192.168.1.104 and icmp
。 - 按照数据包内容过滤:假设以 IMCP 层中的内容进行过滤,可单击选中界面中的码流,在下方进行选中数据。右键单击选中后,选中 Select,在过滤器中显示相关内容,后面条件表达式需自己填写。如想过滤出 data 数据包中包含"abcd"内容的数据流,关键词是
contains
后面跟上内容,如data contains "abcd"
。
- ip 过滤:
看到这里,基本上对 wireshak 有了初步了解。
三、Wireshark分析TCP三次握手
1、TCP 三次握手连接建立过程
第一次握手
客户端发送一个带有SYN=1
、ACK=0
标志的数据包给服务端,以此请求进行连接。
第二次握手
当服务端收到请求并且同意连接时,会发送一个带有SYN=1
、ACK=1
标志的数据包给发送端,告知客户端可以进行通讯了,并且要求客户端发送一个确认数据包。
第三次握手
客户端接着发送一个带有SYN=0
、ACK=1
的数据包给服务端,告诉服务端连接已被确认。至此,TCP 连接建立,双方可以开始通讯了。
2、wireshark抓包获取访问指定服务端数据包
-
:启动 wireshark 抓包,打开浏览器输入
www.huawei.com
。 -
:使用
ping www.huawei.com
获取 IP。
-
:输入过滤条件获取待分析数据包列表
ip.addr == 211.162.2.183
。
图中可以看到 wireshark 截获到了三次握手的三个数据包。第四个包才是 HTTP 的,这说明 HTTP 的确是使用 TCP 建立连接的。
3、第一次握手数据包
客户端发送一个 TCP,标志位为 SYN,序列号为 0,代表客户端请求建立连接。如下图。
数据包的关键属性如下:
SYN
:标志位,表示请求建立连接。Seq = 0
:初始建立连接值为 0,数据包的相对序列号从 0 开始,表示当前还没有发送数据。Ack =0
:初始建立连接值为 0,已经收到包的数量,表示当前没有接收到数据。
4、第二次握手的数据包
服务器发回确认包,标志位为SYN,ACK
。将确认序号(Acknowledgement Number)设置为客户的 ISN 加 1 即 0+1=1,如下图。
数据包的关键属性如下:
[SYN + ACK]
:标志位,同意建立连接,并回送SYN+ACK
。Seq = 0
:初始建立值为 0,表示当前还没有发送数据。Ack = 1
:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加 1,因为包含SYN
或FIN
标志位。(并不会对有效数据的计数产生影响,因为含有SYN
或FIN
标志位的包并不携带有效数据)。
5、第三次握手的数据包
客户端再次发送确认包(ACK
),SYN
标志位为 0,ACK
标志位为 1。并且把服务器发来ACK
的序号字段+1,放在确定字段中发送给对方。并且在数据段放写ISN
的+1,如下图。
数据包的关键属性如下:
ACK
:标志位,表示已经收到记录。Seq = 1
:表示当前已经发送 1 个数据。Ack = 1
:表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加 1,因为包含SYN
或FIN
标志位(并不会对有效数据的计数产生影响,因为含有SYN
或FIN
标志位的包并不携带有效数据)。
就这样通过了 TCP 三次握手,建立了连接。开始进行数据交互。
6、数据交互过程数据包关键属性说明
在 TCP 层,有个FLAGS
字段,这个字段有以下几个标识:SYN
, FIN
, ACK
, PSH
, RST
, URG
。如下:
其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN
表示建立连接,FIN
表示关闭连接,ACK
表示响应,PSH
表示有 DATA 数据传输,RST
表示连接重置。