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=

相关文章
|
2天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1517 4
|
29天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
5天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
492 19
|
2天前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
179 1
|
8天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
9天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
448 5
|
7天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
314 2
|
23天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
25天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2608 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析