如何使用Python计算TCP数据包校验和?

时间:2016-06-25 08:47:08

标签: python sockets tcp scapy

我正在使用Scapy(以下代码)捕获网络上的IP / TCP数据包:

sniff(iface='ens33', prn=call_back, filter="ip and dst host 10.0.0.12", store=0)

def call_back(packet):
    ip_packet = packet['IP']
    tcp_packet = ip_packet['TCP']

当我收到'ip_packet'时,我需要将其源地址更改为另一个,并将其发送出去。

如何重新计算IP头和TCP头中的校验和?

1 个答案:

答案 0 :(得分:0)

如果您删除现有值,Scapy会为您执行此操作:

def call_back(packet):
    del packet[IP].chksum, packet[TCP].chksum
    packet[IP].src = "1.2.3.4"
    sendp(packet)

如果packet未包含Ether()图层并直接从IP()图层开始,请将sendp()替换为send()