进击的麦兜兜的博客
(1)
(2)
(3)
在接收方,要验证数据的正确性,按如下步骤:
(1)
(2)
(3)
在一般的协议栈中,这个检验和算法的实现大多为C语言写的,因为C语言不光移植
性好,而且执行效率也高,算法如下:
{
}
00000000
00000000 01001110
10010101 01010110
00000000 00000000
10000000
00100011
11000110 01100000
00001010 01101000 00000100 00011010
00001010 01101000 00000101 11111111
我们是要运行checksum函数,把返回的sum结果填到checksum字段。
基本过程就是,将IP头部(包括可选项)以32位为单位进行进位加法运算,将得到的结果的低16位和高16相加,然后最终结果取反即我们的checksum。
然后接收方可进行校验。
以上参考:
http://hi.baidu.com/zengzhaonong/blog/item/c933102403bc1530c89559fb
下面看看如何在python中实现:
#!usr/bin/python
import readpcapfile
import struct
def IP_headchecksum(IP_head):
packet_data =
readpcapfile.rdpcap('C:\\Python25\\code\\pcap\\PcapReader\\pcap\\test_ether.pcap')
# get the first packet of IP field (20 bytes)
tem = packet_data[0][1][14:34]
result = IP_headchecksum(tem)
print result
结果是-65536,是65535的补码。
其中的IP数据包用到了以前写的读取pcap文件的模块。