1.在ESTABLISHED状态时,连接收到SYN会回复什么?
2.TCPDUMP简介
3.Netty åºç° Connection reset by peer å¼å¸¸çå 个åå
4.你不知道的linux抓包神器—— tcpdump
在ESTABLISHED状态时,连接收到SYN会回复什么?
最初的问题,读者在阅读我关于《TCP RST 攻击与如何杀掉一条 TCP 连接》时提出,即处于 ESTABLISHED状态的连接为什么还需要响应 SYN 包?接下来,我们通过实验、asp 公司网站源码内核源码分析与工具介绍,详细解答这一问题。实验复现
在机器 A(IP:...)使用 nc 启动服务监听 端口。同时,机器 B 使用 nc 连接 A 的 nc 服务器,并输入 "hello"。通过 tcpdump 观察此次连接信息。随后,机器 B 使用 scapy 模拟发送 SYN 包,并查看 tcpdump 显示的包结果。实验发现,对于一个序列号为随意的 SYN 包,TCP 回复了正确的 ACK 包,确认号为 。nacos源码调用RFC 文档也指出,Linux 内核收到乱序 SYN 报文时,会回复携带正确序列号和确认号的 ACK 包,即 Challenge ACK。原因分析
发送 SYN 包的一端记为 A,接收 SYN 的 ESTABLISHED 状态端记为 B。B 对收到的 SYN 包回复 ACK 的目的是验证先前的连接是否失效,以便采取相应处理。若 A 的连接仍在,则正常处理 ACK 包。若连接已不在,此 SYN 包试图发起新连接,收到 ACK 后,A 会立即回复 RST 包,序列号等于 ACK 包的序列号,B 收到合法的 RST 包后释放连接。若 A 想重新与 B 创建连接,则可再次发送 SYN 包。内核源码分析
使用 SystemTap 工具插入探针,源码框架教程观察内核函数 tcp_send_ack 的调用过程。在端口号为 时,打印函数调用堆栈。通过 SystemTap 脚本执行后,发现 ACK 包经过了 tcp_validate_incoming 和 tcp_send_challenge_ack 函数。RFC 提出了 ACK Throttling 方案,限制每秒最多发送 个 Challenge ACK 报文,通过 sysctl 函数可以调整此限制。RST 攻击
RST 攻击通过伪造 RST 包关闭正常连接。攻击难点在于构造序列号落在对方滑动窗口内的包。实验中,启动 tcpkill 工具并发送 RST 包,观察服务端与客户端进程退出。tcpkill 通过 libpcap 库抓取符合条件的包,从而获取序列号,伪造 IP 发送 RST 包。此外,介绍 killcx 工具,用于处理僵死连接。richtext源码笔记工具介绍
杀掉 TCP 连接的工具包括 tcpkill 和 killcx。tcpkill 假冒 IP 发送 RST 包,依赖有数据传输的连接才能获取序列号。killcx 是一个 perl 编写的脚本,可以在任何 TCP 连接状态下关闭连接。 总结,本文通过实验、内核源码分析和工具介绍,详细解答了 ESTABLISHED 状态连接为何响应 SYN 包,以及如何使用 Challenge ACK、ACK Throttling、tcpkill 和 killcx 来处理相关连接问题。TCPDUMP简介
Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是必不可少的。TcpDump是Linux中强大的网络数据采集分析工具之一。 简单来说,TcpDump就是对网络上的数据包进行截获和包分析的工具。它的arm驱动源码强大功能和灵活的截取策略,使其成为高级系统管理员分析网络、排查问题的必备工具。 顾名思义,TcpDump能够完整截获网络中传送的数据包的“头”,并根据用户定义进行过滤。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句帮助去除无用信息。 TcpDump具有源代码和接口公开的特性,使其具备极强的可扩展性,对于网络维护和入侵者而言都是有用的工具。它存在于基本的FreeBSD系统中,但需要将网络接口设置为混杂模式,普通用户无法执行,仅具备root权限的用户能直接获取网络信息。因此,系统中的网络分析工具主要对网络上的其他计算机安全构成威胁,而非本机安全。 基本上,TcpDump的输出格式为:系统时间,来源主机.端口 > 目标主机.端口,数据包参数。通过这种方式,用户可以详细分析网络数据,了解网络流量、发现潜在问题,以及进行安全监控等。扩展资料
TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。Netty åºç° Connection reset by peer å¼å¸¸çå 个åå
æè¿ä½¿ç¨ netty è¿ç¨ä¸åç°äºå 个æ¯è¾ç»èç Connection reset by peer å¼å¸¸ï¼å个ç¬è®°ã
è¿ä¸ªåºæ¯åºç°å¨ç¨ Jedis ping æ£æµçåºæ¯ï¼ç¨å®ç´æ¥ closeï¼æå¡ç«¯ç¨³å®åºç° Connection reset by peerã
tcpdump ä¸ä¸å°±å¾å®¹æå®ä½å°é®é¢æå¨ï¼å®¢æ·ç«¯æ¶å° PONG ååºåç´æ¥åäºä¸ä¸ª RST å ç»æå¡ç«¯ï¼
æ¥ç Jedis çæºç åç° socket æ个æ¯è¾ç¹æ®çé ç½® socket.setSoLinger(true, 0) ã
å çä¸ä¸ man7/socket.7 ç解éï¼
å¦ç½è¯´ä¸æ¯å¾æç½å¥ææããã
æç»å¨ stackoverflow ä¸æ¾å°ä¸ä¸ªæ¯è¾å®¹æç解ç解éï¼
ç®èè¨ä¹ï¼è®¾ç½® SO_LINGER(0) å¯ä»¥ä¸è¿è¡å次æ¥æç´æ¥å ³é TCP è¿æ¥ï¼å¨å议交äºä¸å°±æ¯ç´æ¥å RST å ï¼è¿æ ·ç好å¤æ¯å¯ä»¥é¿å é¿æ¶é´å¤äº TIME_WAIT ç¶æï¼å½ç¶ TIME_WAIT åå¨ä¹æ¯æåå çï¼å¤§é¨åè¯è®ºé½ä¸å»ºè®®è¿æ ·é ç½®ã
è¿ä¸ªåºæ¯æç¹å¿å¾®å¦ï¼é¦å å¾ç解ä¸ä¸ tcp ç两个éåã
è¿ç¯æç« è®²å¾æ¯è¾æ¸ æ¥ï¼ SYN packet handling in the wild
accept éå满é常æ¯ç±äº netty boss 线ç¨å¤çæ ¢ï¼ç¹å«æ¯å¨å®¹å¨åä¹åï¼æå¡åå¯å¨çæ¶åå¾å®¹æåºç° CPU åéã
为äºæ¨¡æè¿ä¸ªç°è±¡ï¼æåäºä¸ªç¤ºä¾ç¨åº shichaoyuan/netty-backlog-test ï¼è®¾ç½® SO_BACKLOG 为 1ï¼å¹¶ä¸å¨ accept 第ä¸ä¸ªè¿æ¥å设置 autoRead 为 falseï¼ä¹å°±æ¯è®© boss 线ç¨ä¸åç»§ç» accept è¿æ¥ã
å¯å¨ç¬¬ä¸ä¸ª Clientï¼å¯ä»¥æ£å¸¸è¿æ¥ï¼åé PINGï¼æ¥æ¶ PONGã
å¯å¨ç¬¬äºä¸ª Clientï¼ä¹å¯ä»¥æ£å¸¸è¿æ¥ï¼ä½æ¯æ²¡ææ¶å° PONGï¼
å¯è§è¿ä¸ªè¿æ¥å建æåäºï¼å·²ç»å¨ Accept Queue éäºï¼ä½æ¯è¿ç¨æ²¡æ acceptï¼æ以没æä¸è¿ç¨ç»å®ã
å¯å¨ç¬¬ä¸ä¸ª Clientï¼ä¹å¯ä»¥æ£å¸¸è¿æ¥ï¼ä¹æ²¡ææ¶å° PONGï¼
ä¸ç¬¬äºä¸ªè¿æ¥ä¸æ ·ã
å¯å¨ç¬¬å个 Clientï¼ä¹å¯ä»¥æ£å¸¸è¿æ¥ï¼ä½æ¯å¨åé PING ååºç° Connection reset by peerï¼
è¿ä¸ªè¿æ¥å¨æå¡ç«¯å¹¶æ²¡æè¿å ¥ accept queueï¼å¤äº SYN_RECV ç¶æï¼å¹¶ä¸å¾å¿«å°±æ¶å¤±äºï¼å 为 accept queue å·²ç»æ»¡äºï¼æ æ³è½¬å ¥ ESTABLISHED ç¶æï¼ã
æå çä¸ä¸ï¼
ä»å®¢æ·ç«¯è§è§æ¥çè¿æ¥ç¡®å®æ¯å»ºæåäºï¼æä¸ä¸ªæ¯è¾ç¹æ®çå°æ¹å¨ä¸æ¬¡æ¡æä¹åï¼æå¡ç«¯åå客æ·ç«¯åéäºä¸ä¸ª [S.]ï¼å®¢æ·ç«¯åå¤äºä¸ä¸ª [.]ï¼è¿ä¸ªäº¤äºçèµ·æ¥ä¸å½±åè¿æ¥ã
æå¡ç«¯åæ¥éæ¯äºè¿æ¥ï¼è客æ·ç«¯è¿è®¤ä¸ºè¿æ¥æ¯ ESTABLISHED çï¼åé PING æ¶æ¯ï¼æå¡ç«¯èªç¶å¾åå¤ä¸ä¸ª RSTã
PSï¼æå¨ Windows ç WSL2 ä¸å®éªè¿ç§åºæ¯æ¯å»ºè¿æ¥è¶ æ¶ï¼å¯è½ä¸åçæä½ç³»ç»æ linux çæ¬å¯¹è¿ä¸ªäº¤äºçè¿ç¨å¤çä¸åï¼å¨æ¤ä¸è¿è¡è¿ä¸æ¥æµè¯äºã
以ä¸ï¼è¿ä¸ªæ äºåè¯æ们å¤æè¿æ¥æ¯å¦å¯ç¨ï¼å»ºæåä¹ååºè¯¥å个å¿è·³å æµè¯ä¸ä¸ã
你不知道的linux抓包神器—— tcpdump
在Linux世界中,tcpdump这款神器就像一个无与伦比的网络数据侦探,为网络分析提供了强大的工具。让我们深入了解这款工具及其众多强大的参数,它们将帮助你洞察网络世界的每一个细节。-a:当你想要揭示网络的真实名字而非地址时,这个选项派上用场,让你的报告更具人性化。
-d, -dd, -ddd:想要深入到数据包的底层?这些选项分别展示了汇编、C语言代码和十进制代码,揭示了数据包的构造秘密。
-e:显示链路和网络层的头部信息,让你瞬间明白数据包的旅程起点和终点。
-n, -nn:增强细节呈现,nn选项甚至会揭示IP地址和端口,让你对数据包的交互了如指掌。
-t:如果时间不是你的关注点,-t则会移除包的发送时间,让关键信息更突出。
-v, -vv:从常规输出到深度解析,vv让你能够深入探究每个报文的来龙去脉。
-c:定义抓包数量限制,让你对流量进行精细管理。
-F:这个选项允许你自定义过滤规则,让你的抓包更具针对性。
-i:指定你感兴趣的网络接口,确保只捕获你需要的数据。
-p:非混杂模式下,只捕获指定接口的流量,提高抓包效率。
-r, -w:分别用于读取和写入包文件,为数据备份或长期分析提供方便。
-s:控制抓包的包大小,节省存储空间,同时保持关键信息完整。
-T:将报文类型进行解释,让你快速识别关键类型的数据。
-X:原样显示协议,保留原始格式,方便深入理解协议细节。
此外,学习之路并非孤立,加入我们的交流群,前名成员将有机会获得内核资料包的馈赠。这里有丰富的学习资源,如内核技术解析视频、源码解析,以及深入的Linux内核系统学习课程,助你提升网络知识。 在实战中,你可以用tcpdump less greater 来过滤出大于字节且小于字节的报文,然后保存到文件或实时查看。抓取特定端口数据也轻而易举,比如跟踪..1.的端口交互,或者指定源/目的网段(如.//.)。通过观察数据包,你可以清晰地看到三次握手的整个过程,包括SYN(带有S标志)和SYN-ACK(带有S.标志)的发送和接收。 总之,tcpdump是Linux网络分析的得力助手,通过掌握这些参数和技巧,你将能深入解析网络行为,解锁更多可能。现在就拿起你的工具,开始探索网络的无限奥秘吧!