Wireshark抓包分析(ARP TCP DNS HTTP)

目录

一、ARP

二、DNS

三、TCP

TCP的总过程:

​TCP三次握手:

 TCP四次挥手:

 四、HTTP


一、ARP

1.ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。

我们要抓ARP 同网段内的访问网关的情况。

先cmd执行 arp -a 命令,从ARP表中查看本网段内有哪些主机

然后 arp -d 清空ARP表

cmd执行 arp -a,验证ARP表已被清空(ARP的自主学习)

2.Ping本网段内任意主机

1)cmd执行下面这条命令获取局域网内所有主机:

命令的意思是:ping 10.200.1.xxx到 10.200.1.255 之间的所有IP,注意将IP地址改成自己的网段。

for /L %i IN (1,1,254) DO ping -w 2 -n 1 10.200.1.%i

ipconfig -all 查看本机IP及MAC地址:

全部ping网段 或者ping网关或某个ip

3.过滤ARP协议的数据包

显示过滤器中输入:arp,过滤ARP协议的数据包。

两个数据包,第一个包是ARP请求包,第二个包是ARP响应包。

先看第一个数据包,源地址(Source字段)是我自己的MAC地址(8d:e4:71)。
目标地址(Destination字段)是 Broadcast,就是广播的意思。
Info 字段,是对当前动作的描述。

总结一下第一个数据包做了什么:
我的电脑,发送了一个广播,广播的内容是 “谁是10.200.1.8?告诉10.200.1.36”
10.200.1.36是我电脑的IP,意思就是:呼叫10.200.1.8,收到请回复我。

第二个数据包的目的地址(Destination 字段)是我电脑的MAC地址

结合 Info 字段的信息,总结一下第二个数据包做了什么:
有个主机,向我的电脑发送了一个信息,信息的内容是 “10.200.1.36 是 c0-25-a5-8d-e4-71”
这个主机把MAC地址告诉了我的电脑。

结论:

ARP地址解析协议就像一个队内语音,他会向局域网内所有主机广播请求,索要目标IP的MAC地址;知道的主机就会响应具体的MAC地址。

4.数据包内容分析

接下来我们根据包的数据分析一下,这两个包是怎么做的:

1)第一个包的数据:

  • 第一处:ARP后面的括号里是 request,说明这是个请求包
  • 第二处:源IP、源MAC、目标IP都有值,目标MAC却全是0,意思就是告诉他们:我不知道这个IP的MAC地址。

2)第二个包的数据:

  • 第一处:ARP后面的括号里是 reply,说明这是个响应包
  • 第二处:源IP、源MAC、目标IP、目标MAC都有值,接收方可以从这里获取IP对应的MAC地址。

5.ARP自主学习

再次使用 arp -a 查看ARP表

可以发现,表中添加了我们刚才 ping 的IP,以及对应的MAC地址,这就是ARP的学习能力:解析成功的MAC地址会被临时缓存,以节约资源。

第六步:再次访问
1)Wireshark开启抓包,重新访问这个主机

2)查看ARP请求包的目的MAC地址

由于是第二次访问,ARP表中已经缓存了MAC地址,所以这次ARP请求不再广播,而是直接从ARP表中获取。

二、DNS

        DNS是一个应用层协议,基于TCP/IP传输,一般的DNS报文传输层是UDP报文。查询的时候一般请求DNS服务器的53端口号。

        启动wireshark,在浏览器输入www.xiaomi.com,访问小米的官网。(ps:网址会自动跳转到www.mi.com,这是因为小米官网做了域名重定向。)

 ping www.xiaomi.com 

 

 请求报文:

172.16.7.1(DNS服务器地址)

响应报文: 

可以看到,经过DNS查询,得到了IP地址123.125.103.192 和111.202.1.202

三、TCP

        传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流传输层通信协议,由IETFRFC 793 [1]  定义。

wireshark数据包详细栏每个字段对应的分层。

TCP的总过程:

TCP三次握手:

TCP三次握手示意图 

 

 

1)第一次握手

可以看到,客户端发起一个SYN请求,初始序列号为0

2)第二次握手

服务端返回SYN+ACK,并且包含服务端的一个初始序列号seq=0,同时返回一个确认号ack=1

 3) 第三次握手

客户端返回一个ACK,并且返回一个确认号ack=1,并且将自己的序列号seq更新为1

  到此,TCP三次握手就结束了。客户端与服务端之间已经成功建立起连接。

 TCP四次挥手:

 TCP四次挥手示意图

 第一次挥手:客户端发起一个FIN,表示客户端希望断开连接。

 第二次挥手:服务端返回一个ACK,表示对客户端断开请求的应答。

 第三次挥手:服务端发起一个FIN,表示服务端希望断开连接。

 第四次挥手:客户端返回一个ACK,表示对服务端断开请求的应答。

 1)第一次挥手

        客户端发起一个FIN请求(表示客户端希望断开连接),

序列号seq=1,应答号ack=1。注意这里的应答是上一次数据通信过程中的应答。

2)第二次

        服务端返回一个ACK(表示对客户端断开请求的应答) 

应答号ack=2,序列号seq=1

 3)第三次挥手

         服务端返回一个ACK(表示对客户端断开请求的应答)+FIN(表示服务端希望发起断开请求)

应答号ack=2,序列号seq=1      

4)第四次挥手

         客户端返回一个ACK(表示对服务端断开请求的应答)

应答号ack=2,序列号seq=2

附:

访问www.xiaomi.com的TCP总过程: 

 四、HTTP

         超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。

HTTP报文由三部分组成,开始行、首部行和实体主体,如图。

在请求报文中,开始行就是请求行。

以超星学习通为例吧:

因为现在大部分网站都是用https加密了。

超星

鲨鱼抓包:

 200的响应码:

小米的 mi.com:

 TLS协议Client Hello

 服务端发出的Server Hello

 到此,TLS的握手过程就结束了,后面可以加密传输消息了。

猜你喜欢

转载自blog.csdn.net/m0_65712192/article/details/131181929