首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核 TCP MSS 机制详细分析

所以本文将通过Linux内核源码对TCP的MSS机制进行详细分析。 测试环境 1....攻击机器 自己日常使用的Linux设备就好了 地址:192.168.11.111 日常习惯使用Python的,需要装个scapy构造自定义TCP包 自定义SYN的MSS选项 有三种方法可以设置TCP SYN...数据包的确被分割成小块,但是只小到36,离预想的8有很大的差距 这个时候我选择通过审计源码和调试来深入研究为啥MSS无法达到我的预期值,SYN包中设置MSS值到代码中的mss_now的过程中发生了啥...在__tcp_mtu_to_mss函数中的mss_now为我们SYN包中设置MSS,从这里我们能看出MSS最小值是48,通过对TCP协议的理解和对代码的理解,可以知道SYN包中MSS的最小值48字节表示的是...这就导致了MSS无法被设置为最小值8,最终导致该漏洞无法利用。

1.8K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux 内核 TCP MSS 机制详细分析

    所以本文将通过Linux内核源码对TCP的MSS机制进行详细分析。...这个时候我选择通过审计源码和调试来深入研究为啥MSS无法达到我的预期值,SYN包中设置MSS值到代码中的mss_now的过程中发生了啥?...在__tcp_mtu_to_mss函数中的mss_now为我们SYN包中设置MSS,从这里我们能看出MSS最小值是48,通过对TCP协议的理解和对代码的理解,可以知道SYN包中MSS的最小值48字节表示的是...因此我们得到的计算mss_now的公式为:SYN包设置MSS值 - (本机发出的TCP包头部长度 - TCP头部固定的20字节长度) 所以,如果tcp_header_len的值能达到最大值60,那么mss_now...这就导致了MSS无法被设置为最小值8,最终导致该漏洞无法利用。

    1.8K20

    细说TCP的MSS选项(1)

    对于MSS选项,我以前曾经做个简单的研究,这次借着本厂遇到的这个问题,对MSS进行一个比较详细的技术总结。 MSS,全称为Max Segment Size。...同一个TCP连接,两个方向上的MSS大小可以不同,并且发送方的TCP报文的最大数据长度不能超过对端声明的MSS大小。 明确了MSS的含义之后,就要问MSS的大小由什么决定?...再次感谢开源的Linux内核,可以帮助我们解开这个秘密。 在函数tcp_syn_options中, ? 对TCP选项mss进行了赋值。接下来进入tcp_advertise_mss。...综上所述,可以总结出影响TCP的MSS的因素: 路由设置的advmss选项; 出口路由的MTU减去40(TCP和IP报文的固定首部大小); IPv4的最高IPV4_MAX_PMTU-40(同上); 通常我们都不会设置路由的...专注Linux网络领域开发,坚持每周一更。

    7.9K42

    TCP的MTU Probe和MSS(2)

    在上一篇《TCP的MTU Probe和MSS(1)》介绍了TCP使用MTU Probe来避免PMTU变小而导致发送失败的方法。...其主要思想是在TCP发送失败时,发送方会不断尝试降低MSS的大小,直至满足PMTU的限制,成功发送数据。...还有一种情况:TCP报文丢失而重传时,MTU probe功能会自动减小MSS。 如果探测成功会怎么样?...探测报文的发送时间间隔超过配置值,则更新探测上限为可能MTU的最大值(MSS上限+TCP首部+IP报文首部),下限为根据当前MSS计算的MTU值。...至此,TCP MTU Probe的原理已经分析完毕,做一个简单的总结:当PMTU变小时,MTU Probe通过丢包发现这种情况,从而不断的降低当前MSS值,达到成功发送的目的。

    2.8K20

    linux代理设置

    http代理 有些局域网环境上网需要使用代理上网,图形界面的很好解决就设置一下浏览器的代理就好了,但是Linux纯命令行的界面就需要手动配置了。      ...常用linux程序配置代理服务器的方法: [ 通用代理服务器配置 ] 对于大多数Linux控制台程序,例如Debian或Ubuntu中的apt-get和aptitude命令、git命令、wget命令,这些程序都使用...例如,假设你的代理服务器为192.168.1.1,端口是8080,用户名为easwy,密码是123456,那么应该这样设置这两个环境变量: export http_proxy=http://easwy:...公司一般出于安全考虑, 在同一局域网中只有一台机器可以访问外网,运维进行了整体的限制, 但是在后面的工作中,需要在机器上安装一些软件,及命令,所以其他的机器需要访问外网来简化工作, 但又不能打乱原有运维的设置.../centos/RPM-GPG-KEY-CentOS-5     yum clean all  清除原有缓存   yum list           获取yum列表   如果出现列表数据如下这种表示设置成功

    9K10

    细说TCP的MSS选项(2)

    使用ifconfig设置本地网卡的MTU为1000时,再次访问www.baidu.com。抓包结果如下: ? 我本地出口网卡的MTU为1000,减去40,即syn报文中MSS值,960。...从这个测试结果看,syn+ack报文的MSS值还要受到syn报文的MSS值影响,可能会取本地计算结果的MSS值和syn报文中的MSS值中的较小值。...tcp_mss_clamp用于获得syn+ack报文的mss值。 ? 而tcp_mss_clamp仅是使用user_mss(该TCP套接字配置的MSS选项)与抽口dst的MSS进行对比。...只有设置了user_mss,且其值又小于dst的MSS时,才会使用user_mss,否则syn+ack报文就是dst的MSS值——也就是前文中所述,出口路由的MTU-40。...总结一下: 标准的内核syn+ack报文中的MSS也是由出口路由的MTU-40; 目前百度公司对syn+ack的MSS做了自己的修改,会取syn报文的MSS和其实际MSS的较小值;BAT中只有百度做了这个修改

    2.6K21

    linux设置locale

    什么是locale 在Linux中,使用locale命令来设置和显示程序运行的语言环境,locale会根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统定义一个软件运行时的语言环境 locale...设置规则 _....表示中文 CN:表示大陆地区 Utf8:表示字符集 de_DE.utf-8@euro de:表示德语 DE:表示德国 Utf-8:表示字符集 euro:表示按照欧洲习惯加以修正 locale命令详解 设置...LANG:LANG的优先级是最低的,它是所有LC_*变量的默认值,下方所有以LC_开头变量(LC_ALL除外)中,如果存在没有设置变量值的变量,那么系统将会使用LANG的变量值来给这个变量进行赋值。...LC_*变量,这个变量设置之后,可以废除LC_*的设置值,使得这些变量的设置值与LC_ALL的值一致,注意LANG变量不受影响。

    15.1K20
    领券