lwIP更新记04:TCP 初始序列号

news2024/11/19 22:45:22

从 lwIP-2.0.0 开始,可以自定义 TCP 报文段的初始序列号。

TCP 报文段首部有一个序列号字段,它是一个32位的计数器,从 0 到 4294967295,它的值为当前报文段中第一个数据的字节序号。TCP 在建立连接的时候需要初始序列号(Initial Sequence Number:ISN),lwIP 为每个新的 TCP 连接生成一个 TCP 初始序列号。tcp.c 中的函数 tcp_next_iss 用于这个目的。

在1.4.1版本中,这个函数长这样:

/**
 * Calculates a new initial sequence number for new connections.
 *
 * @return u32_t pseudo random sequence number
 */
u32_t
tcp_next_iss(void)
{
  static u32_t iss = 6510;
  
  iss += tcp_ticks;       /* XXX */
  return iss;
}

这个算法很简单,算法产生的值是可以预测的。以至于 lwIP 的 TCP 连接可能成为 TCP 欺骗攻击的目标。

对 ISN 的准确预测是 IP 欺骗、数据注入和会话劫持能成功的先决条件。举一个TCP Reset攻击例子:

如果能准确预测ISN,就可以假冒客户端向服务器发送RST包,要求复位连接。由于RST包并不需要向应用层提交,服务器端的 TCP 协议栈只要接到该包就立即终止此次 TCP 连接,这将让真正的客户端连不上服务器,导致了拒绝服务攻击。

根据研究结果表明,Windows 2000、Windows XP SP1 的 ISN 都是可以预测的,从 Windows XP SP2 开始,ISN才能难以预测。

RFC 6528 中标准化了 ISN 生成算法。但是,该算法需要高分辨率计时器和加密散列函数。这远远超出了 lwIP 本身的范围。

所以 lwIP 增加了 LWIP_HOOK_TCP_ISN ,这是一个钩子函数,可以让开发者根据自己的硬件平台实现自己的 ISN。该钩子函数提供了很大的灵活性,既可以用简单的随机数生成 ISN,也可以实现完整的 RFC 6528 规定的算法。

在 lwIP-2.1.3,新的 tcp_next_iss 函数为:

/**
 * Calculates a new initial sequence number for new connections.
 *
 * @return u32_t pseudo random sequence number
 */
u32_t
tcp_next_iss(struct tcp_pcb *pcb)
{
#ifdef LWIP_HOOK_TCP_ISN
  LWIP_ASSERT("tcp_next_iss: invalid pcb", pcb != NULL);
  return LWIP_HOOK_TCP_ISN(&pcb->local_ip, pcb->local_port, &pcb->remote_ip, pcb->remote_port);
#else /* LWIP_HOOK_TCP_ISN */
  static u32_t iss = 6510;

  LWIP_ASSERT("tcp_next_iss: invalid pcb", pcb != NULL);
  LWIP_UNUSED_ARG(pcb);

  iss += tcp_ticks;       /* XXX */
  return iss;






读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
千金难买知识,但可以买好多奶粉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM系列-第11章-垃圾回收相关概念

垃圾回收相关概念 System.gc() 的理解 在默认情况下,通过System.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声…

小航助学2022年NOC初赛图形化(小高组)(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题3.0分 删除编辑 答案:C 第1题如果要控制所有角色一起朝舞台区右侧移动,下面哪个积木块是不需要的? A…

微签助力中融基金电子文件安全高效签章

中融基金重安全,炼丹炉里炼微签 这次讲一个微签在炼丹炉里炼出了火眼金睛的故事。 先看一个数字。 金融隐私泄露事件大约以每年35%的数据在增长。 数字来自《中国银行保险报》与亚信网络安全产业技术研究院发布的《金融行业网络安全白皮书》。 大数据时…

「车型分析」控制系统典型应用车型 —— 辊筒AGV

辊筒AGV (Roller conveyor ) 是一种常见的AGV机器人类型,它利用辊筒和轮子在巷道中实现货物的搬运和运输,可实现托盘物品的卸载和运输等功能, 具有更高的灵活性、适应性和效率。本文将基于这款市场上常见的AGV进行一次简单的介绍。 1 车型介绍: 辊筒AGV…

深度学习中必备的算法:神经网络、卷积神经网络、循环神经网络

深度学习是一种新兴的技术,已经在许多领域中得到广泛的应用,如计算机视觉、自然语言处理、语音识别等。在深度学习中,算法是实现任务的核心,因此深度学习必备算法的学习和理解是非常重要的。 本文将详细介绍深度学习中必备的算法…

2023彩虹易支付最新原版安装教程(内附源码)

此源码已通过检查,确认无后门,且所有代码开源,无加密文件。 测试日期 2023年5月21日 源码已扫描无后门,不放心的也可以自己再去扫描一遍 2023年5月22日 各个功能接口测试完毕,均可用 选中下方可查看下载链接 http…

gcc、makefile和git(二)

简介 现在讲述如何写 makefile 的文章很多,从几页的简易版到几十页、几百页的详细版都有。Makefile 有自己的书写格式、关键字、函数、隐含规则,像C语言一样灵活多变、功能强大。在Makefile中还可以使用系统shell所提供的任何命令来完成想要的工作&#…

国资油企能向民营市场借鉴些什么?

在中国石油集团召开的全面深化改革领导小组第四十三次会议上,集团公司董事长、党组书记、全面深化改革领导小组组长戴厚良强调:要深入推进公司治理体系和治理能力现代化,推进信息化、数字化和智能化工作。实现制度流程化、流程信息化。立足长…

GEE土地利用产品汇总

一、ESA产品: 10米分辨率,目前只有2020年和2021年的数据 (1)ESA WorldCover 10m v100(只有2020年数据) 代码: var dataset ee.ImageCollection(ESA/WorldCover/v100).first();var visualizat…

写给Android工程师的 Github CI 快速指北

背景 关于 CI/CD ,在2023年的今天,基本所有技术团队或多或少都会使用,其很大程度上减轻了我们的冗余重复工作,从而简化我们的工作流程。 不过对于大多数客户端工程师而言,其实 CI 这个词还是比较陌生。当然并不是说&…

Unity - 解决TMP FontAssetCreator 在生成 SDF 时 Font 显示 ????? 的问题

文章目录 原因问题解决下载 FontCreator,并打开有问题的字体修改字体属性重新导出字体 返回 Unity 后重新使用 TMP Font Asset Creator 来生成 原因 美术找到一个字体和某个参考的某个游戏的字体是一致 美术同学截图了参考的游戏,和 自己找到的 字体 放…

Mybatis查询语句汇总与小技巧

前言 在之前的学习中,使用到了将查询结果封装到bean对象内,使用到了将查询结果封装的bean对象封装到List集合中,但是如果我们没有对应的bean对象,我们应该将结果封装到哪呢?今天这篇文章就记录一下几种常见查询结果的封…

用蹩脚英语在StackOverflow上飞奔:试看以色列兄弟自荐的Http文件上传工具MgntUtils

上班摸鱼、下班干活,日常埋坑、加班填坑——这是我的搬砖,亦是在座的各位! 文章目录 1.试看MgntUtils来源2.下载MgntUtils源码3.初探源码4.验证API 1.试看MgntUtils来源 ​ ​上篇文章说到,有个以色列大兄弟在回答Stack Overflow…

13岁青少年DAO创始人:Web3治好了我的“丧”

“我看大家都死气沉沉的,大家都站起来活动活动。” 4月,香港Web3嘉年华的一场沙龙,橙色针织帽给黑压压的现场带来一抹亮色,13岁的Carry Zheng戴着它登台,没有“大家好”的寒暄,直接向台下的成年人发出指令&…

训练营-5月

JAVA训练营-5月 一、环境 1、idea安装 idea就是一个开发工具,写代码的地方 目录结构: --- 项目(工程 project) 比如:京东 ---- 模块(module) 比如:订单、购物车、秒杀等 -----…

ALOHA 开源机械臂(Viper 300 Widow X 250 6DOF机械臂 远程操控系统)第四部分

Teleoperation System 远程操作系统 We introduce ALOHA: A Low-cost Open-source Hardware System for Bimanual Teleoperation. With a $20k budget, it is capable of teleoperating precise tasks such as threading a zip tie, dynamic tasks such as juggling a ping p…

【2023 · CANN训练营第一季】进阶班 应用开发深入讲解→端到端案例

1 样例调试 1.1 日志文件 运行应用程序后,若出现报错或异常,需录取日志进一步定位问题。日志文件的默认目录为$HOME/ascend/log。 可通过环境变量指定日志文件的落盘路径 export ASCEND_PROCESS_LOG_PATH/$HOME/xxx但需要确保该目录为任意有读写权限…

外参手算方法

虽然有的slam系统是代外参标定功能,可以在线标定(vins)或者离线进行标定,但外参标定的质量也会与运动激励相关的,例如对于3自由度的小车很难把z方向的外参标定的很好。有些情况车子或者是定位模块是有设计图纸的&#…

Ubuntu22.04下使用Conda安装PyTorch GPU版本

环境 首先,你需要有 GPU 支持。 Ubuntu 22.04 显卡 $ nvidia-smi Mon May 22 11:15:33 2023 --------------------------------------------------------------------------------------- | NVIDIA-SMI 530.30.02 Driver Version: 530.30.02 CUDA…

MySQL在Centos7环境下的安装操作

文章目录 一、卸载不需要的环境二、通过yum安装MySQL1.安装MySQL的yum源2.安装MySQL 三、启动mysql的服务器四、登录MySQL1.方法一2.方法二3.方法三 五、配置my.cnf文件 一、卸载不需要的环境 首先要检查服务器中是否存在mariadb,mariadb是MySQL的一个开源分支&…