【问题标题】:scapy "Ether()" does not have "chksum" argumentscapy "Ether()" 没有 "chksum" 参数
【发布时间】:2019-04-29 23:15:43
【问题描述】:

“帧校验序列”是整个以太网帧的 32 位 CRC“校验和”,从 DMAC 开始,涵盖 SMAC、类型和有效负载。它作为以太网帧的最后四个字节传输,就在数据包间间隙之前。

我希望 Scapy 的 Ether() 方法具有该字段的数据包属性的参数。它没有。

请注意,IP() 和 TCP()/UDP() 等 Scapy 方法包含一个校验和参数(“chksum”),用于为这些协议定义的附加校验和。

例如...

> IP( raw(UDP(chksum=0) / IP(version=4, chksum(0)) )
<IP  version=0 ihl=0 tos=0x35 len=53 id=28 flags= frag=0 ttl=69 proto=hopopt chksum=0x14 src=0.1.0.0 dst=64.0.0.0 |<Raw load='\x7f\x00\x00\x01\x7f\x00\x00\x01' |>>
> ls(Ether)
dst    : DestMACfield    = (None)
src    : SourceMACfield  = (None)
type   : XShortEnumField = (36864)
> Ether( raw(Ether()) )
<Ether dst=ff:ff:ff:ff:ff:ff src=12:34:56:78:9a:bc type=LOOP |>
> Ether.chksum()
AttributeError: chksum

【问题讨论】:

    标签: scapy ethernet


    【解决方案1】:

    FCS 没有在 Scapy 中的以太网帧上实现,原因有两个。

    • 首先,从历史上看,如果 FCS 在数据包的末尾,Scapy 很难获得 FCS(但现在已经不是这种情况了,因为 FCSField 现在是一个东西)。
    • 其次,大多数操作系统默认不提供它,当它们提供时,除了假设数据包末尾的填充是 FCS 之外,没有办法知道实际上存在 FCS。如果您觉得应该添加它,您可能应该在他们的跟踪器上打开一个问题。

    原答案:

    Scapy 会在您构建数据包时自动构建 chksum 参数。构建数据包意味着将其转换为字节:使用bytes(pkt)raw(pkt)(或pkt.build()

    例如,show2() 显示数据包在构建时的样子:

    >>> pkt = IP()/UDP()/ICMP()
    >>> pkt.show2()
     ###[ IP ]### 
      version= 4
      ihl= 5
      tos= 0x0
      len= 36
      id= 1
      flags= 
      frag= 0
      ttl= 64
      proto= udp
      chksum= 0x7cc6   <-------
      src= 127.0.0.1
      dst= 127.0.0.1
    [...]
    

    校验和仅在None 时计算,因此它允许您在需要时设置自定义(不正确)校验和。如果你想检查它包含的内容,你可以手动构建数据包:

    >>> pkt = IP(raw(pkt))
    >>> pkt[IP].chksum
    31942
    

    【讨论】:

    • 网络中有多个校验和在起作用。 IPv4 数据包在字节 10 和 11 中有一个标头校验和。这就是您显示的那个。 TCP(字节 16 和 17)和 UDP(字节 6 和 7)标头也有校验和。如果我在以太网中有基于 IPv4 的 TCP,我将有三个校验和。我想要以太网帧的“帧检查序列”:en.wikipedia.org/wiki/Frame_check_sequence 这是为 Scapy 中的“Ether()”定义的 NOT。为什么?
    • FCS 没有在 Scapy 中的以太网帧上实现,原因有两个。首先,从历史上看,如果 FCS 在数据包的末尾,Scapy 很难获得 FCS(但现在已经不是这种情况了,因为 FCSField 现在是一个东西)。其次,大多数操作系统默认不提供它,当它们提供时,除了假设数据包末尾的填充是 FCS 之外,没有办法知道实际上存在 FCS。如果您觉得应该添加它,您可能应该在他们的跟踪器上打开一个问题
    • 这就是答案。如果你单独发布它并删除这个,我会给你一个检查或向上箭头,或者其他什么! :-) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多