tcpdump 和 wireshark 抓包工具 ,介绍、安装、命令使用。 详解三次握手、四次挥手。两个结合使用,会更好分析报文

简介: 这篇文章详细介绍了网络抓包工具tcpdump和Wireshark的使用,包括安装、命令选项、过滤器语法,以及如何通过分析TCP的三次握手和四次挥手来理解网络通信细节。

前言

  • 一般的前后端联调是用不到抓包的,可以通过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.

其中,对于我们日常的分析有用的就是前面的五个字段。这里一定要记住

  1. SYN表示建立连接,
  2. FIN表示关闭连接,
  3. ACK表示响应,
  4. PSH表示有 DATA数据传输,
  5. 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=

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
监控 网络协议
tcpdump 常用命令
【10月更文挑战第31天】本文介绍了工作中常用的`tcpdump`命令,通过实例展示了如何使用`tcpdump 'port 10000' -i eth0 -S`监控TCP连接的三次握手和四次挥手过程。具体包括服务端和客户端的交互细节,以及每个步骤的详细解释。
62 11
|
4月前
tcpdump抓包命令详解
tcpdump抓包命令详解
|
5月前
|
运维 监控 网络协议
Linux抓包命令tcpdump使用技巧大全
【7月更文挑战第10天】
188 5
Linux抓包命令tcpdump使用技巧大全
|
4月前
|
网络协议 Linux
12条tcpdump命令,腻害的网工,都爱用!
12条tcpdump命令,腻害的网工,都爱用!
|
7月前
|
运维 网络协议 Python
使用tcpdump和wireshark进行服务器抓包分析
使用tcpdump和wireshark进行服务器抓包分析
261 0
|
7月前
|
运维 网络协议 安全
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
210 0
|
7月前
|
网络协议 Linux
Linux命令(120)之tcpdump
Linux命令(120)之tcpdump
94 0
|
Linux
linux下用tcpdump抓包
linux下用tcpdump抓包
|
5月前
|
网络协议 Linux
linux tcpdump 使用小结(二)
linux tcpdump 使用小结(二)
39 1
|
5月前
|
Linux
linux tcpdump 使用小结(一)
linux tcpdump 使用小结(一)
54 10