简介

wireshark是一款网络封包分析软件。网络封包协议软件的功能是获取网络封包,并尽可能的显示出最为详细的封包资料。wireshark使用WinPCAP作为接口直接与网卡进行数据报文交换。

快速分析数据包技巧

1、确定wireshark的物理位置,如果没有一个正确的位置,启动wireshark将会耗费较长的时间捕获一些不相关的数据包。

2、选择捕获接口,一般都是选择连接到Internet网络的接口,这样才可以捕获到与网络相关的数据,否则捕获到的其他数据也没有任何的用处。

3、使用捕获过滤器,通过使用设置捕获过滤器,可以避免产生过大的捕获数据,这样用户在分析数据时,也不会受其他数据干扰,而且还可以节约大量的时间。

4、使用显示过滤器,通常使用捕获过滤器后的数据,往往还是很复杂,为了使过滤的数据包再更细致,此时使用显示过滤器进行过滤。

5、使用着色规则,通常使用显示过滤器过滤后的数据,都是有用的数据包这样可以更加突出显示的某个会话。

6、构建图表,如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以很便捷的展现数据的分布情况。

7、重组数据,当传输较大的图片或文件时,需要将信息分布在多个数据包中,这时候就需要使用重组数据的方法来抓取完整的数据。wireshark的重组功能可以重组一个会话中不同的数据包的信息,或是重组一个完整的图片或文件。

Wireshark抓包基础

混杂模式

混杂模式会接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。

普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序没其他的包一律丢弃。

关闭与开启混杂模式

点击关闭后点击捕获

点击捕获选项中的设置

勾选后即可完成

wireshark的过滤器使用

开启混杂模式下:

如下则为过滤器。

筛选TCP数据包

1、直接输入TCP,所有TCP的数据包都会显示出来

2、指定TCP三次握手数据包

TCP三次握手

第一次握手:客户端将标志位SYN置为1,随机产生一个值序列号seq=x,并将该数据包发送给服务端,客户端 进入syn_sent状态,等待服务端确认。

第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和 ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务端进入syn_rcvd状态。

第三次握手:客户端收到确认后检查,如果正确则将标志位ACK为1,ack=y+1,并将该数据包发送给服务端,服务端进行检查如果正确则连接建立成功,客户端和服务端进入established状态,完成三次握手,随后客户端和服务端之间可以开始传输数据了。

如下网图(baidu):

FIN:终止标志符,用以终止TCP连接。

ACK确认标志符, 取值为1时确认号字段才有效;取值为0时确认号字段无效。TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1。

同步标志位SYN ,在TCP连接建立时用来同步序号。

a、获取第一次握手包

b、获取第二次握手包

c、获取关闭连接的TCP

flags为标志位含义

如TCP.flags.SYN == 1

TCP连接中标志位SYN为1 的数据包

筛选ARP过滤包

1、直接输入arp

筛选UDP过滤包

直接使用过滤器输入“UDP”以筛选udp报文,但是输入udp后却出现众多协议;

原因为:oicp和dns都是基于udp的传输层之上的协议。

客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可,不用经过三次握手,这样DNS的服务器负载更低,响应更快。理论上说客户端也可以指定向DNS服务器查询时用TCP,但事实上很多DNS服务器进行配置时仅支持UDP查询包。

通过IP地址进行报文筛选

1
2
3
ip.src_host == 源地址IP
ip.dst_host == 目的地址IP
ip.addr == 不分源地址和目的地址的IP

筛选源地址为192.168.1.102目的地址为220.181.38.148(baidu)的报文

筛选源地址为192.168.1.102目的地址为220.181.38.148(baidu)的报文

筛选ip地址为192.168.1.102的报文

常用协议抓包并分析

关闭混淆模式,避免干扰数据包。

ARP协议

地址解析协议,通过解析网络层地址来寻找数据链路层地址的网络传输协议,它在IPV4中极为重要,ARP是通过网络地址来定位MAC地址。

使用Nmap基于ARP对192.168.1.105进行扫描

协议分析

ARP回复包

可以看到请求包与应答包中的源地址与源IP地址进行了调换。

请求过程

who has 192.168.1.102? Tell 192.168.1.1

192.168.1.102 is at xxxxxxx

192.168.1.1 广播:谁有192.168.1.102的MAC地址?

192.168.1.102 应答:192.168.1.102 的MAC地址是xxxxx

ICMP协议

ping一下baidu即可抓到ICMP协议包。

协议分析

请求包

响应包

TCP协议

三次握手,四次挥手。

目标机IP:192.168.1.104   

本机IP:192.168.1.102

三次握手

四次挥手

此时在终端中输入EXIT,实际是终端(kali)上执行的命令,表示我们SSHD的Server端向客户端发送关闭连接请求。

1、第一次挥手,客户端发送一个【FIN,ACK】表示自己没有数据要发送了,想断开链接,并进入FIN_WAIT_1状态。

2、第二次挥手,服务端收到FIN后,知道不会再有数据从客户端传来,发送ACK进行确认,确认序号收到序号为1(与SYN相同,一个FIN占有一个序号),服务端进入CLOSE_WAIT状态。

3、第三次挥手,服务端发送【FIN,ACK】给对方,表示自己没有数据要发送,服务端进入LAST_ACK状态,然后直接断开TCP会话的连接,释放相应资源。

4、第四次挥手,客户端收到服务端的FIN信令后,进入TIMED_WAIT状态,并发送ACK确认消息。客户端进入TIMED_WAIT状态下,等待一段时间,没有数据到来,就认为对面已经收到了自己发送的ACK并正确关闭进入CLOSE状态,自己也断开TCP连接,释放所有资源。当服务端收到客户端的ACK回应后,会进入CLOSE状态并关闭本地端口会话连接,释放相应资源。

HTTP协议

还是筛选TCP协议,因为HTTP是TCP的上层协议,所以过滤的TCP的数据包会包含HTTP协议的数据包。

可以通过使用浏览器等等方式使用HTTP协议,此处使用curl -I baidu.com进行流量抓取(仅返回头部信息)。

报文抓取

三次握手,获取数据。

四次握手,结束连接

查看请求baidu报文内容

请求过程

1、发送一个HTTP的HEAD请求。

2、服务器收到请求。返回一个Seq/ACK进行确认。

3、服务器将HTTP头部信息返回到客户端,状态码为200,表示页面正常。

4、客户端收到服务器返回的头部信息后向服务器发送Seq/ACK进行确认。并且发送完成后客户端会发生FIN/ACK进行关闭连接请求。

扩展

TTL:数据报文的生存周期。

Linux操作系统默认值为64,没经过一个节点,TTL减1,TTL值为0时,说明目标地址不可达。

作用: 防止数据包无限制在公网中进行抓发

TTL的值:

Linux默认为64

Windows默认为128