学习dpkt-icmp.py

开始分析icmp.py:
ICMP继承自dpkt.Packet
1、其首部定义如下:
    __hdr__ = (
        ('type', 'B', 8), #ICMP类型:8bit,默认8(请求回显)
        ('code', 'B', 0), #代码:8bit,默认0
        ('sum', 'H', 0) #校验和:16bit,默认0
        )
根据RFC792[Poster11981b]的定义,类型和代码含义如下所示:

常用的有:类型8,类型0,类型5,类型11,类型3
2、ICMP class中定义了针对不同类型的子class,对每种子class,定义了各自的首部__hdr__结构:
    类型0,8 Echo:__hdr__ = (('id', 'H', 0), ('seq', 'H', 0))
    类型3 Unreach:__hdr__ = (('pad', 'H', 0), ('mtu', 'H', 0))
    类型5 Redirect:__hdr__ = (('gw', 'I', 0),)
3、重载了__str__,在其中重新计算了icmp的校验和