linux过滤端口抓包_TCP 协议三次握手抓包分析amp;查看状态
前面文章介绍了 TCP 报文头部的格式,TCP 协议是一个面向连接的协议,所以在使用 TCP 协议之前需要先建立连接,而建立连接就需要先 握手,在握手的时候就会有 TCP 报文头部数据的传递,这篇文章介绍一下 TCP 连接的 三次握手,然后使用 tcpdump 抓包工具分析 三次握手是如何被建立的,然后使用 netstat 命令查看分析 TCP 状态。
1.TCP 三次握手的目的
同步 Sequence 序列号,初始化序列号 ISN(Initial Sequence Number)
交换 TCP 通讯参数,如 MSS、窗口比例因子、选择性确认、指定校验和算法
2.三次握手示意图
3.tcpdump抓包分析
以 curl www.baidu.com 为例,使用如下命令抓取 TCP 报文:
tcpdump host www.baidu.com -c 3 -S
Tips:其中 host www.baidu.com 表示使用 BFP 过滤语法抓取和 www.baidu.com 相关的报文数据,-c 3 表示抓取次数为 3,-S 表示 信息以绝对序列号替代相对序列号。
如下图所示:
Tips:图中窗口是 tcpdump 抓取报文窗口,可以另起一个窗口执行 curl www.baidu.com。
4.tcpdump报文关系示意图对应
第一次:SYN
18:33:27.289687 IP localhost.localdomain.33952 > localhost.http: Flags [S], seq 1108648416, win 29200, options [mss 1460,sackOK,TS val 3178219629 ecr 0,nop,wscale 7], length 0
Tips:其中 seq 的值为 1108648416。
第二次:SYN/ACK
18:33:27.317960 IP localhost.http > localhost.localdomain.33952: Flags [S.], seq 737377256, ack 1108648417, win 64240, options [mss 1460], length 0
Tips:其中 seq 的值为 737377256,ack 的值为 1108648417,比第一次的 seq 大 1。
第三次:ACK
18:33:27.318021 IP localhost.localdomain.33952 > localhost.http: Flags [.], ack 737377257, win 29200, length 0
Tips:其中 ack 的值为 737377257,比第二次的 seq 大 1。
5.wireshark 抓包分析
以抓取浏览器访问 http://www.singwa666.com 网站发起的 HTTP/1.1 请求时,建立的 TCP 连接握手为例,使用 BPF 捕获过滤器语法 host www.singwa666.com 抓取报文,然后使用 显示过滤器 语法 tcp.stream eq 1过滤报文,如下图所示:
第一次:SYN
Tips:其中 Sequence Number(seq) 的值为 4150432755(f7 62 93 f3),FLAGS 的第 7 位置 1。
第二次:SYN/ACK
Tips:其中 Sequence Number(seq) 的值为 257427380(0f 58 07 b4),Acknowledgment number (ack) 的值为 4150432756(f7 62 93 f4),比第一次的 Sequence Number(seq) 大 1。
第三次:ACK
Tips:其中 Acknowledgment number (raw) 的值为 257427381(0f 58 07 b5),比第二次的 Sequence Number(seq) 大 1。
6.三次握手报文说明
6.1 第一次:SYN 报文说明
Tips:FLAGS 报文中的第 7 位置 1 表示 SYN 报文,此时 seq 序列号码有效,需要传递设置 序列号码(seq)。
6.2 第二次:SYN/ACK 报文说明
Tips:FLAGS 报文中的第 4 和 第 7 位置 1 表示 SYN/ACK 报文,此时 seq 和 ack序列号码有效,需要传递 序列号码(seq)和 确认号码(ack),此时确认号码(ack)是第上一次 seq 加 1。
6.3 第三次:ACK 报文说明
Tips:FLAGS 报文中的第 4 位置 1 表示 ACK 报文,此时 ack 序列号码有效,需要传递设置 确认号码(ack),此时 确认号码(ack)是第上一次 seq 加 1。
7.三次握手过程中的状态变迁
当我们做服务器端的开发时,服务器端同时处理成千上万的 TCP 连接时,需要理解 三次握手 中的状态变迁,对于定位复杂的网络问题非常有帮助。
7.1 三次流程中涉及到的五种状态及示意图
CLOSED
LISTEN
SYN-SENT
SYN-RECEIVED
ESTABLISHED
Tips:TCB 的意思是 Transmission Control Block,保存连接使用的源端口、目的端口、目的 IP、序号、应答序号、对方窗口大小、己方窗口大小、TCP 状态、TCP 输入/输出队列、应用层输出队列、TCP 的重传有关变量等。
7.2 netstat 命令参数介绍
interval:重新显示选定的统计信息,各个显示间暂停的间隔秒数
-a:显示所有连接和监听端口
-n:以数字形式(如IP地址)显示地址和端口号
-r:显示路由表
-s:显示每个协议的统计信息
-o(Widnows):显示拥有的每个连接关联的进程
ID
-b(Windows)/-p(Linux):显示对应的可执行程序名字
7.3 服务端查看 TCP 状态变迁
下面在服务器端使用如下命令:
netstat -anp
Tips:其中 -anp 的 a 所有的连接,n 表示以数字的形式,p 表示显示进程号。
Tips:一般很难观察到 SYN-SENT 状态,有一种 ACK 攻击就是攻击者构造一个 SYN 帧,却不返回 ACK 帧,这样会让服务器大量的连接都处于 SYN-RECEIVED 状态。
关联文章:TCP 协议报文格式&tcpdump抓包工具Wireshark 抓包工具介绍Wireshark 捕获和显示过滤器网络协议-HTTP 协议(抓包实战和网络分层)
linux过滤端口抓包_TCP 协议三次握手抓包分析amp;查看状态相关推荐
- linux过滤端口抓包_Linux抓包工具tcpdump使用总结,WireShark的过滤用法
tcpdump与WireShark是Linux下的两个常用,功能强大的抓包工具,下面列出这两个工具的简单用法. tcpdump用法 tcpdump用法: sudo tcpdump -i ens33 s ...
- linux udp 端口 抓包,tcpdump之UDP抓包
摘要 使用tcpdump抓UDP包,过滤过滤IP和port,并且自动拆分片段. 安装tcpdump yum install -y tcpdump 使用方法 tcpdump -i bond0 udp p ...
- TCP三次握手抓包分析
1. TCP三次握手过程 最开始双方都是CLOSED关闭状态.然后服务端开启监听某个端口,进入LISTEN状态. 客户端发起请求,发送SYN,客户端变为SYN_SENT(同步消息发送)状态 服务端收到 ...
- linux下tcpdump抓包保存cap文件,使用Wireshark分析
1.tcpdump是对网络上的数据包进行截获的包分析工具: 2.安装:yum install tcpdump(yum安装即可),安装完成之后创建一个文件夹,专门存放抓取数据保存的文件,执行tcpdum ...
- linux端口抓包工具下载,linux下的抓包工具tcpdump
linux下的抓包工具. 抓包工具比较好用的有两个,一个是snort,一个是tcpdump,这次不说snort了,觉得这个工具虽然很强大,但是比较复杂,还是tcpdump比较简单.tcpdump wi ...
- Linux内核网络数据包发送(三)——IP协议层分析
Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...
- Linux之tcpdump抓包命令详解
目录 前言 1. 控制抓包行为 2. 控制信息如何显示 3. 控制显示什么数据 4. 过滤命令 4.1 地址过滤 4.2 协议及端口过滤 4.3 报文特征过滤 4.3.1 IP选项设置(20字节,可变 ...
- linux抓包库libpcap,linux下libpcap抓包分析.doc
linux下libpcap抓包分析 HYPERLINK "/Seiyagoo/archive/2012/04/28/2475618.html" linux下libpcap抓包分析 ...
- LiveGBS流媒体平台GB/T28181常见问题-播放花屏、没有通道、无法语音对讲等情况下Windows和Linux中如何抓包
LiveGBS播放花屏.没有通道.无法语音对讲等情况下Windows和Linux中如何抓包 1.第一步:抓包工具准备 1.1.Linux 1.2.windows 2.第二步:找到设备出口ip 3.第三 ...
最新文章
- Calendar如何只显示“一、二、三...日”,不显示“星期”
- python的历史 常量 注释 基础数据类型等基本操作 和if 判断语句
- 七问唐骏:真的性格好就能成功?
- 进口配额管理和出口配额管理_SAP采购管理模块中的quot;配额协议quot;应用详解...
- Idea缺少Version Control 底部菜单
- 作为参数给后端为空_后端 API 接口文档 Swagger 使用指南
- Bailian4148 生理周期【枚举+中国剩余定理】
- HTML5移动端最新兼容问题解决方案
- 百度人脸识别,一次耗时600毫秒
- linux 硬盘自动休眠,【Linux】硬盘休眠
- 安全基础--21--安全运维
- [渝粤教育] 广东-国家-开放大学 21秋期末考试电算化会计10169k2
- first season twenty-second episode,the color(yellow) dream???
- 计算机提示无法验证发布者,win10 ie11提示由于无法验证发布者所以windows已经阻止此软件怎么办...
- Unity UI拉伸缩放适配屏幕尺寸
- Spring基础学习
- linux安装浏览器 linux本地浏览器进行访问
- VMware配置Ubuntu 编写c程序
- VirtualBox 不能为虚拟电脑 打开一个新任务 VERR_NEM_VM_CREATE_FAILED
- 计算机访问控制机制,访问控制策略和机制-信息安全工程师知识点
热门文章
- Qt4_Laying Out Widgets Widgets
- SQL Server中的T-SQL RegEx命令
- power bi自定义地图_如何使用自定义形状图在Power BI中创建地理图
- 墨鏡的bism_如何使用商业智能语义模型(BISM)和Excel设计基于地图的报表
- azure云数据库_如何使用SQL Data Sync同步Azure SQL数据库和本地数据库
- SQL Server数据库迁移最佳实践,可降低风险和停机时间
- python面试题No6
- MYSQL小函数大用途之-------FIND_IN_SET
- Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用
- 使用Spark分析拉勾网招聘信息(四): 几个常用的脚本与图片分析结果