前言
- 一般的
前后端联调
是用不到抓包的,可以通过postman、chrome的开发者工具进行调试,查看请求和相应。 - 当做
数据对接
,或者再做几个服务连接的时候,中间会有restful或者thirft请求,这个时候之只能通过抓包
来看请求和相应了。 抓包
其实就是:将网络传输发送
与接收的数据包
进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。- 这里的包就是
数据包
,也就是TCP/IP协议
通信传输中的数据单位
,一般也称“数据包”
补充:TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,帧工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。
一、tcpdump 工具
1、tcpdump 工具
Tcpdump提供了一整套完善的规则来对截获的数据包进 行过滤,由于大多数图像化的嗅探器都使用类似的过滤机制,因此对Linux网络管理员来说,了解如何使用Tcpdump来捕获感兴趣的数据包是一项必须掌控的基本功。
2、下载
可到 官网: http://www.tcpdump.org 下载最新的Tcpdump源码包。
注意:
因tcpdump的运行需要pcap的支持,所以最好先行安装pcap软件包,另外还要注意软件的版本问题,建议按照网站上匹配的软件包tcpdump和pcap一同下载。
前期在测试时我使用的yum 安装的pcap包(版本1.9.1),然后在网上下载了tcpdump(版本为4.9.3)。
此处使用的操作系统是 CentOS release 5.5 (Final)
3、编译安装
在编译Tcpdump之前,应先确定pcap库(libpcap)已安装完毕。这个库是编译Tcpdump时所必需的。
安装过程非常简单如下示:
tar -zxvf libpcap-1.9.1.tar.gz
cd libpcap-1.3.0
./configure
make
make install
该库已安装完毕,下面执行下面的命令来编译并安装Tcpdump:
tar -zxvf tcpdump-4.9.3.tar.gz
cd tcpdump-4.3.0
./configure
make
make install
二、抓包命令选项
Tcpdump是个命令行方式的 网络嗅探器
。他通过使用命令选项来过滤网卡截获的数据包,假如不进行过滤,过多数量的包会使网络管理员很难理清头绪。Tcpdump的命令格式如下:
这个就可以直接使用:
tcpdump -s 0 -i any host ip -w 路径 -v
tcpdump常用参数
-n 显示IP地址和端口号
-v 显示更多信息,ttl,长度,其他选项等,tcpdump的详细信息有3个级别,因此-vvv显示最多信息
-D 列出可以抓包的网络接口
-i + 网络接口抓包
-c + 数字 一次抓取多少数据包后停止抓取
-w + 文件名 抓包结果保存到文件
-r + 文件名 读取抓包文件
-s + 数字 抓包的大小
如:tcpdump -nvvv -i any -c 100
tcpdump的过滤器参数
协议名,如icmp,过滤出icmp的制定报文
host + ip 特定主机,抓取目标地址和源地址为特定ip的数据包
port + 数字 特定端口抓包
src + [host] ip 源地址
dst + [host] ip 目标地址
多条件选择使用and,or和小括号,在shell中需要用引号包含多个条件的过滤规则如, tcpdump -nvvv -i any -c 20 ‘port 80 or port 443’
-X 以十六进制打印出数据报文
-A 打印数据报文的ASCII值
抓包之后,需要对报文进行分析。如果用wireshark 进行分析的话,就特别清晰明了
三、wireshark工具
wireshark 也可以进行抓包,这是一个window上面的一个应用。一般是再本地进行抓包。然后对报文进行可视化分析。
而我一般则是在Linux上使用 tcpdump 进行抓报文,抓取报文之后,再使用 wireshark 进行分析报文。这样可以准确看到再TCP/IP协议中的 请求 和 响应 情况。
1. 概念介绍
提取特征时,要对session(会话)进行过滤,找到关键的stream,这里总结了wireshark过滤的基本语法,供自己以后参考。(脑子记不住东西)
wireshark进行过滤时,按照过滤的语法可分为协议过滤
和内容过滤
。
对标准协议,既支持粗粒度的过滤如HTTP,也支持细粒度的、依据协议属性值进行的过滤如tcp.port= =53、http.request.method==“GET”。
对内容的过滤,既支持深度的字符串匹配过滤如http contains “Server”,也支持特定偏移处值的匹配过滤如tcp[20:3] == 47:45:54。
2. 两种过滤
捕捉过滤器
(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。显示过滤器
(DisplayFilters):用于在捕捉结果中进行详细查找。
- 捕捉过滤器在抓抱前进行设置,决定抓取怎样的数据;显示过滤器用于过滤抓包数据,方便stream的追踪和排查。
- 捕捉过滤器仅支持协议过滤,显示过滤器既支持协议过滤也支持内容过滤。
- 两种过滤器它们支持的过滤语法并不一样。
四、下载、安装使用
下载官网:https://www.wireshark.org/download.html
六、三次握手、四次挥手详解
解读 报文时 ,看着 一行行的代码有点懵逼。 仔细看了一下,大体还是能了解的,比如No、Time、Source、Destination、Protocol、Length 字段 还是可以明白的,但是 Info 信息,就直接懵逼了,看不懂,百度了一下,是数据 TCP 协议的 三次握手、四次挥手的知识,那这里需要学习一下了。
1. flags字段(记住)
首先,在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.
其中,对于我们日常的分析有用的就是前面的五个字段。这里一定要记住:
SYN
表示建立连接,FIN
表示关闭连接,ACK
表示响应,PSH
表示有 DATA数据传输,RST
表示连接重置。
分析:
- 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,
- 如果只是单个的一个SYN,它表示的只是建立连接。
- TCP的几次握手就是通过这样的ACK表现出来的。
- 但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。
- RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。
- 一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。
- PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。
- TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。
2. 三次握手
TCP(Transmission Control Protocol)传输控制协议
,TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码
即 tcp标志位
,有6种标示
:
SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
Sequence number(顺序号码)
Acknowledge number(确认号码)
TCP连接三次握手 示意图:
图文分析:
第一步:客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(
TCP规定SYN=1时不能携带数据
,x为随机产生的一个值),然后进入SYN_SEND状态;
服务器 由SYN=1知道,A要求建立联机第二步:服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态
第三步:客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态。
主机B收到后确认 seq=x+1 与ACK=1则连接建立成功。
完成三次握手,主机A与主机B开始传送数据。
3. 四次挥手
TCP三次握手是TCP连接建立的过程,TCP四次挥手则是TCP连接释放的过程。
TCP四次挥手的流程图:
当客户端没有数据再需要发送给服务端时,就需要释放客户端的连接,这整个过程为:
第一步:客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态
第二步:服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态
第三步:服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态
第四步:客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态
五、wireshark 详解分析 pcap报文文件
从第四章学习了 三次握手和四次挥手,主要学习这两个阶段的流程和其中的字段。
接下来就分析用wireshark打开的报文协议。
先打开 编辑->查找分组,就会出现一个过滤器:
- 第一处红框:就是 过滤协议 的地方,
- 第二处红框:就是准确过滤的地方。
- 第三处红框:就是报文协议的详细信息,从字段名称就可以知道其意思,最应该关注的是 最右边的 info 信息
我按IP地址过滤后
ip.address=