使用Scapy划分SCTP块

时间:2018-01-22 08:51:03

标签: python scapy

我正在尝试使用Scapy来划分SCTP数据包,但我只能将数据包分成不同的层。 如何将SCTP划分为不同的块? 例如,在Scapy中使用show(),我知道SCTP中有2个块,但我不知道如何获得这两个块。 two chunks in SCTP packet

有没有办法在同一层中划分块?或者我可以将show()中的信息存储到数组中吗? 感谢^^

SCTP packet structure

1 个答案:

答案 0 :(得分:1)

您应该能够以遍历图层的方式遍历块。

使用如下方法:

def expand(pkt):                                                                
    payload = []                                                                
    for p in pkt.payload:                                                       
        payload+=expand(p)                                                      
    return [pkt.name, payload]    

print(expand(pkt))                                                      
print(pkt.payload.payload.payload.name)    

我知道,对于SCTP包:

['Ethernet', ['IP', ['SCTP', ['SCTPChunkSACK', []]]]]
SCTPChunkSACK

修改 内容:

>>> print(pkt[SCTP][1])                                                     

b'\x03\x00\x00\x10\x7f\x8cD\x18\x00\x01\xa0\x00\x00\x00\x00\x00'

>>> print(pkt[SCTP][1].show())   

###[ SCTPChunkSACK ]###
  type      = sack
  flags     = 0x0
  len       = 16
  cumul_tsn_ack= 0x7f8c4418
  a_rwnd    = 106496
  n_gap_ack = 0
  n_dup_tsn = 0
  gap_ack_list= []
  dup_tsn_list= []

所以你已经在pkt [SCTP] [1:]处拥有你的(嵌套)块列表。