首先确定搜索关键字:use python to verify TCP Checksum
http://search.aol.com/aol/search?q=use+python+to+verify+TCP+Checksum
查看《TCP/IP详解:卷1》{Page 26}
IP数据报的“首部校验和”字段是根据IP首部计算出的校验和,它不对首部后面的数据进行计算。
ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据的校验和。
为了计算一份数据报的IP校验和,首先把校验和字段置为0。然后,对首部中每个16 bit进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在校验和字段中。
ICMP、IGMP、UDP和TCP都采用相同的校验和算法,尽管TCP和UDP除了本身的首部和数据外,在IP首部中还包含不同的字段。在RFC 1071中有关于如何计算Internet检验和的实现技术;在RFC 1141中有一个很有效的方法。
使用Python实现:
#!/usr/bin/env python # coding=utf-8 import struct data = "45 00 00 47 73 88 40 00 40 06 a2 c4 83 9f 0e 85 83 9f 0e a1" def carry_around_add(a, b): c = a + b return (c & 0xffff) + (c >> 16) def checksum(msg): s = 0 for i in range(0, len(msg), 2): w = ord(msg[i]) + (ord(msg[i+1]) << 8) s = carry_around_add(s, w) return ~s & 0xffff data = data.split() data = map(lambda x: int(x,16), data) data = struct.pack("%dB" % len(data), *data) print ' '.join('%02X' % ord(x) for x in data) print "Checksum: 0x%04x" % checksum(data)
《 “使用Python计算TCP包中的校验和” 》 有 2 条评论
详解TCP/IP重组
https://mp.weixin.qq.com/s/ifZk5Ox9cnixq1ZxgwFBSw
一个多线程工具,用于从网卡/PCAP文件中嗅探TCP流的统计信息和内嵌的HTTP头。携带HTTP信息的每个TCP流都以json格式导出至文本文件(A multi-threading tool to sniff TCP flow statistics and embedded HTTP headers from PCAP file. Each TCP flow carrying HTTP is exported to text file in json format.)
https://github.com/caesar0301/http-sniffer