简介
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 | ip.src_host == 源地址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