scapy修改TCP标志位

TCP标志位

TCP报文段结构如图所示

image-20240621095724514

下面介绍一些重要的标志位:

  1. URG (Urgent):

    紧急指针(Urgent Pointer)有效。当URG标志位设置为1时,表示TCP报文段中有紧急数据需要处理。接收端会优先处理带有URG标志的报文段,并根据紧急指针的值跳过其他数据,直接读取紧急数据。

  2. ACK (Acknowledgment):

    确认号(Acknowledgment Number)有效。当ACK标志位设置为1时,表示TCP报文段是一个确认报文,确认号字段包含了一个期待接收的字节的序号。

  3. PSH (Push):

    提示接收端应用程序应该立即从TCP接收缓冲区中读走这段数据,而不是等待缓冲区满后再进行读取。这通常用于实时数据传输,如音频或视频流。

  4. RST (Reset):

    重置连接。当RST标志位设置为1时,TCP连接将被立即终止。RST报文通常用于在出现严重错误时关闭连接,例如连接超时、无效的连接请求等。

  5. SYN (Synchronize):

    同步序号。在建立TCP连接时,客户端会发送一个带有SYN标志的报文段(SYN报文),请求与服务器建立连接。服务器收到SYN报文后,会回复一个带有SYN和ACK标志的报文段(SYN-ACK报文),表示同意建立连接。最后,客户端再发送一个带有ACK标志的报文段,完成连接的建立。

  6. FIN (Finish):

    结束连接。当FIN标志位设置为1时,表示发送端已经完成了数据的发送,希望关闭连接。接收端在收到FIN报文后,会回复一个带有ACK标志的报文,表示同意关闭连接。当双方都完成了数据发送并收到了对方的确认后,TCP连接就会关闭。

  7. ECE (Explicit Congestion Notification Echo):

    显式拥塞通知回声。这是一个可选的标志位,用于TCP的显式拥塞通知(ECN)机制。当发送端收到带有ECE标志的报文时,它知道之前发送的带有ECN-Echo(CE)标志的报文已经被成功接收并处理。

  8. CWR (Congestion Window Reduced):

    拥塞窗口减少。这也是一个可选的标志位,用于TCP的ECN机制。当接收端检测到网络拥塞时,它会向发送端发送一个带有CE标志的报文。发送端在收到CE报文后,会适当地减少其发送窗口的大小,并在后续的报文中设置CWR标志,通知接收端已经减少了发送窗口。

这些标志位共同协作,确保TCP连接能够可靠地传输数据,并在必要时进行错误处理和连接管理。

scapy修改标志位

在对网络流量包进行分析时,可能会涉及到TCP包标志位的修改,下面给出标志位的修改方法。

设置标志位

单个函数设置单个标志位

def fin_1(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags |= 0x01
    return packet


def syn_1(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags |= 0x02
    return packet


def rst_1(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags |= 0x04
    return packet


def psh_1(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags |= 0x08
    return packet


def ack_1(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags |= 0x10
    return packet


def urg_1(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags |= 0x20
    return packet


def ece_1(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags |= 0x40
    return packet


def cwr_1(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags |= 0x80
    return packet

清除标志位

单个函数清除单个标志位

def fin_0(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags &= ~0x01
    return packet


def syn_0(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags &= ~0x02
    return packet


def rst_0(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags &= ~0x04
    return packet


def psh_0(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags &= ~0x08
    return packet


def ack_0(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags &= ~0x10
    return packet


def urg_0(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags &= ~0x20
    return packet


def ece_0(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags &= ~0x40
    return packet


def cwr_0(packet: packet.Packet) -> packet.Packet:
    packet[TCP].flags &= ~0x80
    return packet

示例

把所有TCP/IP包的URG标志置为1:

image-20240621101258886

  • 26
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forgotten Legend

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值