Python 使用Scapy缩短TCP有效负载会导致[TCP上一段未捕获]
我试图通过剥离一些字节来修改TCP负载 只要将这些字节替换为相同长度的其他字节,而不是将它们剥离,修改包就可以了 如果去掉字节,Wireshark会在转储中显示[TCP上一段未捕获]消息 我删除了修改包的校验和和包长度,以便Scapy在发送包时重新计算它们: 删除旧的校验和 del packet_mod[IP].chksum del packet_mod[TCP].chksum 删除旧的数据包长度 del packet_mod[IP]。len 如果我也在修改的数据包的末尾切断了字节,那么修改就可以工作了,因为重新发送的TCP段由接收方添加到修改的数据包中 例如:我去掉了20个字节的TCP负载。只有当我在有效负载的末尾额外切断20个字节时,修改才会起作用Python 使用Scapy缩短TCP有效负载会导致[TCP上一段未捕获],python,tcp,wireshark,scapy,Python,Tcp,Wireshark,Scapy,我试图通过剥离一些字节来修改TCP负载 只要将这些字节替换为相同长度的其他字节,而不是将它们剥离,修改包就可以了 如果去掉字节,Wireshark会在转储中显示[TCP上一段未捕获]消息 我删除了修改包的校验和和包长度,以便Scapy在发送包时重新计算它们: 删除旧的校验和 del packet_mod[IP].chksum del packet_mod[TCP].chksum 删除旧的数据包长度 del packet_mod[IP]。len 如果我也在修改的数据包的末尾切断了字节,那么修改就可
我遗漏了什么?我不明白这部分的意思: 例如:我去掉了20个字节的TCP负载。那么修改呢 仅当我在文件末尾额外剪切20个字节时才有效 有效载荷 无论如何,您缺少的是每个TCP段都承载 TCP标头字段-序列号字段-表示 此段的数据内容在指定的字节流中的位置 正在通过TCP传输 TCP接收器使用段序列号和段长度 段长度根据IP数据报的长度计算 它提供了从中构建连续字节流的段 接收到的流量。例如,如果接收器之前 收集到序列位置200和下一个传入位置之前的所有数据 分段如下所示:
(segment 1) sequence=200 length=80 data='data data data ...'
(segment 2) sequence=280 length=60 data='more data ...'
(segment 3) sequence=340 length=70 data='even more data ...'
然后接收器知道它现在已经收集了所有的数据
达到但不包括位置410。既然没有差距,,
此数据已准备好传递给应用程序
请注意,段号1、2、3不在中
TCP头。这些数字仅在那里,因此此描述
你可以参考一下
显然,如果第2段丢失,而接收器只有
收集段1和段3,然后接收器会知道
收到的数据中有一个缺口。它会确切地知道
差距在哪里:从位置280开始,它缺少60个字节。
TCP承诺提供完整的有序数据流,因此直到
如果填补了这一空白,则不允许接收者发送任何信息
后面的字节,比如它在段中得到的位置340处的70字节
3.申请表的附件。如果丢失的字节不能很快到达
然后,接收者会告诉发送者关于间隙和发送者的信息
将重新传输丢失的数据
这就是为什么从TCP段中删除字节会导致问题的原因。如果
您的程序从第2段删除了20个字节,然后从接收器删除
我们将看到:
(segment 1) sequence=200 length=80 data='data data data ...'
(segment 2) sequence=280 length=40 data='more data ...'
(segment 3) sequence=340 length=70 data='even more data ...'
接收者会得出结论,认为自己发现了
位置320处有20个字节
如果Wireshark正在观察这种流量,那么它将得出相同的结论。
TCP接收器和Wireshark都不知道
缺少的字节是已编辑的段2。线鲨的最爱
合理的猜测是丢失的字节位于
不知何故,没有提供给检查,这就是为什么它
显示上一段未捕获的消息。上面说的是以前的
因为它在检查之前不会发现有缺口
第3段,然后是间隙后的一段
接收器将以处理任何事件的相同方式处理此事件
缺口它将告诉发送者有关间隙的信息,并等待丢失的信息
要重新传输的数据。如果接收器得到丢失的数据
然后它将填补空白,然后像往常一样继续。如果你
继续拦截重传并删除丢失的字节
然后,接收器将继续报告其存在间隙,并且
发送方最终会厌倦重新传输丢失的数据
它将放弃TCP连接
这意味着您不能简单地从正在运行的TCP段中删除数据
希望TCP不会注意到数据丢失。原则上你
可以通过删除一些数据,然后操纵序列来实现
在发送方的所有后续段和所有
由接收者发送的确认,但这是一个更大的任务
参考文献:描述了基本的TCP序列号机制
长期以来
使用序列号提高安全性的最佳实践是
在和中描述
在中正式成为标准。我不理解这部分的含义: 例如:我去掉了20个字节的TCP负载。那么修改呢 仅当我在文件末尾额外剪切20个字节时才有效 有效载荷 无论如何,您缺少的是每个TCP段都承载 TCP头字段 -序列号字段-表示 此段的数据内容在指定的字节流中的位置 正在通过TCP传输 TCP接收器使用段序列号和段长度 段长度根据IP数据报的长度计算 它提供了从中构建连续字节流的段 接收到的流量。例如,如果接收器之前 收集到序列位置200和下一个传入位置之前的所有数据 分段如下所示:
(segment 1) sequence=200 length=80 data='data data data ...'
(segment 2) sequence=280 length=60 data='more data ...'
(segment 3) sequence=340 length=70 data='even more data ...'
然后接收器知道它现在已经收集了所有的数据
达到但不包括位置410。既然没有差距,,
此数据已准备好传递给应用程序
请注意,段号1、2、3不在中
TCP头。这些数字仅在那里,因此此描述
你可以参考一下
显然,如果第2段丢失,而接收器只有
收集段1和段3,然后接收器会知道
收到的数据中有一个缺口。它会确切地知道
差距在哪里:从位置280开始,它缺少60个字节。
TCP承诺提供完整的有序数据流,因此直到
如果填补了这一空白,则不允许接收者发送任何信息
后面的字节,比如它在段中得到的位置340处的70字节
3.申请表的附件。如果丢失的字节不能很快到达
然后,接收者会告诉发送者关于间隙和发送者的信息
将重新传输丢失的数据
这就是为什么从TCP段中删除字节会导致问题的原因。如果
您的程序从第2段删除了20个字节,然后从接收器删除
我们将看到:
(segment 1) sequence=200 length=80 data='data data data ...'
(segment 2) sequence=280 length=40 data='more data ...'
(segment 3) sequence=340 length=70 data='even more data ...'
接收者会得出结论,认为自己发现了
位置320处有20个字节
如果Wireshark正在观察这种流量,那么它将得出相同的结论。
TCP接收器和Wireshark都不知道
缺少的字节是已编辑的段2。线鲨的最爱
合理的猜测是丢失的字节位于
不知何故,没有提供给检查,这就是为什么它
显示上一段未捕获的消息。上面说的是以前的
因为它在检查之前不会发现有缺口
第3段,然后是间隙后的一段
接收器将以处理任何事件的相同方式处理此事件
缺口它将告诉发送者有关间隙的信息,并等待丢失的信息
要重新传输的数据。如果接收器得到丢失的数据
然后它将填补空白,然后像往常一样继续。如果你
继续拦截重传并删除丢失的字节
然后,接收器将继续报告其存在间隙,并且
发送方最终会厌倦重新传输丢失的数据
它将放弃TCP连接
这意味着您不能简单地从正在运行的TCP段中删除数据
希望TCP不会注意到数据丢失。原则上你
可以通过删除一些数据,然后操纵序列来实现
在发送方的所有后续段和所有
由接收者发送的确认,但这是一个更大的任务
参考文献:描述了基本的TCP序列号机制
长期以来
使用序列号提高安全性的最佳实践是
在和中描述
正式成为中的标准。感谢您的详细回复!这对我帮助很大!我想在我的情况下,用伪字节替换字符串将是一个更好的解决方案……谢谢您的详细回复!这对我帮助很大!我想在我的情况下,用伪字节替换字符串将是一个更好的解决方案。。。