1、Wireshark下载官网链接(https://www.wireshark.org/download.html)
2、抓包过滤语法和实例
tcp ##只显示TCP协议的数据包列表,注意大小写
http
icmp
ip.addr == 10.118.10.1 ##显示源地址或者目的地址为10.118.10.1的数据包列表
ip.src == 10.118.10.1 ##显示源地址为10.118.10.1的数据包列表
ip.dst == 10.118.10.1 ##显示目的地址为10.118.10.1的数据包列表
tcp.port == 80 ##显示源主机或者目的主机端口为80的数据包列表
tcp.srcport == 80 ##显示源主机端口为80的数据包列表
tcp.dstport == 80 ##显示目的主机端口为80的数据包列表
http.request.method== "GET" ##只显示HTTP GET方式的
过滤多个条件组合时,使用and/or。 比如获取IP地址为192.168.1.3的http数据包的表达式为:
ip.addr == 192.168.1.3 and http
ip.addr == 192.0.2.1 and tcp.port not in {80, 25}
eth.src == 04:f9:38:ad:13:26 ##筛选源mac地址为04:f9:38:ad:13:26的数据包
ip contains "192.168.1.1" ##筛选192.168.1.0网段的数据
tcp.port == 12345 &&tcp.port == 80 ##筛选12345端口和80端口之间的数据包
tcp.srcport == 12345 &&tcp.dstport == 80 ##筛选从12345端口到80端口的数据包
应用层:
特别说明: http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1) http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。
http.request.uri contains ".php" ##筛选url中包含.php的http数据包
http contains "username" ##筛选内容包含username的http数据包
TCP三次握手:
Step1:客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;
Step2:服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;
Step3:服务端发送一个SYN=0,ACK=1的数据包给客户端端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯。
第一次握手数据包
客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。
数据包的关键属性如下:
SYN :标志位,表示请求建立连接
Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据
Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据
第二次握手的数据包
服务器发回确认包, 标志位为 SYN,ACK。将确认序号(Acknowledgement Number)字段+1,即0+1=1。
数据包的关键属性如下:
[SYN + ACK]: 标志位,同意建立连接,并回送SYN+ACK
Seq = 0 :初始建立值为0,表示当前还没有发送数据
Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)
第三次握手的数据包
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方,并且在Flag段写ACK的+1:
数据包的关键属性如下:
ACK :标志位,表示已经收到记录
Seq = 1 :表示当前已经发送1个数据
Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。
就这样通过了TCP三次握手,建立了连接。开始进行数据交互