scapy.contrib.http2

http2模块实现对HTTP / 2帧和HPack编码的标头进行编码/解码所需的数据包和字段

class scapy.contrib.http2.AbstractUVarIntField(name, default, size)

Bases: scapy.fields.Field

AbstractUVarIntField表示RFC7541中定义的整数

addfield(pkt, s, val)

AbstractUVarIntField前缀始终会消耗BitField的其余位;如果当前没有使用BitField(条目中没有元组),则前缀长度为8位,整个字节将被消耗

Parameters
  • pktpacket.Packet | None )–包含此字段的数据包. 可能未使用.

  • int long sstr | str )–将该字段附加到的字符串.元组表示某些位已经由另一个与位字段兼容的字段生成.如果" size"不是8,则必须是这种情况. int是在str的第一个字节中已经生成的位数,long是由先前的位域兼容字段生成的值.

  • valint )–要添加的正或空值.

Returns

str:与该字段的机器表示串联.

Raises

AssertionError

any2i(pkt, x)

作为字符串的" x"值被解析为UVarInt的二进制编码. 一个int被认为是一个内部值. #noqa:E501不返回任何内容.

Parameters
  • pktpacket.Packet | None )–包含此字段的数据包; 可能未使用. #noqa:E501

  • xstr | int | None )–要转换的值.

Returns

int | None:转换后的值.

Raises

AssertionError

getfield(pkt, s)
Parameters
  • pktpacket.Packet | None )–包含此字段的数据包实例; 可能未使用.

  • int sstr | str )–从中获取该字段值的输入值.如果size为8,则s为字符串,否则为包含值的元组和一个int,指示已在其中消耗的位数str的第一个字节,第一个字节要消耗的剩余位数必须等于" size".

Returns

(str,int):s的剩余字节和已解析的值.

Raises

AssertionError

h2i(pkt, x)
Parameters
  • pktpacket.Packet | None )–未使用.

  • xint | None )–要转换的值.

Returns

int | None:转换后的值.

Raises

AssertionError

i2h(pkt, x)
Parameters
  • pktpacket.Packet | None )–未使用.

  • xint | None )–要转换的值.

Return:

int | None:转换后的值.

i2len(pkt, x)
Parameters
  • pktpacket.Packet | None )–未使用.

  • xint )–正或null值,如果需要,其二进制大小. #noqa:E501

Raises

AssertionError

i2m(pkt, x)
Parameters
  • pktpacket.Packet | None )–未使用.

  • xint )–要转换的值.

Returns

str:转换后的值.

Raises

AssertionError

i2repr(pkt, x)
Parameters
  • pktpacket.Packet | None )–可能未使用.

  • x – int | None:要转换的正,空或无值.

Returns

str:值的表示形式.

m2i(pkt, x)

仅当"大小"不同于8时,才对" x"参数使用元组.如果接收到元组,则某些字段#noqa:E501被另一个字段占用. 该字段消耗了剩余的位,因此元组的int必须#noqa:E501等于" size".

Parameters
  • pktpacket.Packet | None )–未使用.

  • int xstr | str )–要转换的字符串.如果位被先前的位域兼容字段占用,则#noqa:E501

Raises

AssertionError

randval()
Returns

volatile.VolatileValue:此字段与" long"兼容的内部值的易失性值. #noqa:E501

rev
size
class scapy.contrib.http2.EOS

Bases: object

简单的"标记",用于在霍夫曼表中指定"字符串结尾"符号

class scapy.contrib.http2.FieldUVarLenField(name, default, size, length_of, adjust=<function FieldUVarLenField.<lambda>>)

Bases: scapy.contrib.http2.AbstractUVarIntField

addfield(pkt, s, val)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例. 此参数不能为#noqa:E501如果val参数为None.

  • int long sstr | str )–将该字段附加到的字符串.元组表示某些位已经是#noqa:E501由另一个与位域兼容的字段生成的.如果" size"是这种情况不是8.int是#noqa:E501在str的第一个字节中已经生成的位数.long是#noqa:E501以前的位域兼容字段生成的值.

  • valint | None )–要添加的正或空值. 如果为None,则根据pkt计算值. #noqa:E501

Returns

str:与该字段的机器表示串联. #noqa:E501

Raises

AssertionError

i2m(pkt, x)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例. 此参数不能为#noqa:E501如果x参数为None.

  • xint | None )–要添加的正或空值. 如果为None,则根据pkt计算值. #noqa:E501

Returns

str

Raises

AssertionError

class scapy.contrib.http2.H2AbstractHeadersFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

HTTP / 2标头帧数据包的所有变体的超类. 可用于类型检查.

aliastypes
class scapy.contrib.http2.H2ContinuationFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2ContinuationFrame实现RFC 7540 par6.10

END_HEADERS_FLAG = 2
aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              HDRS             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Fig. H2ContinuationFrame                     
H2ContinuationFrame字段

hdrs

PacketListField

[]

flags = {2: MultiFlagEntry(short='EH', long='End Headers')}
type_id = 9
class scapy.contrib.http2.H2DataFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2DataFrame实现RFC7540 par6.1.此数据包是没有填充时要使用的数据帧.

END_STREAM_FLAG = 0
PADDED_FLAG = 3
aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              DATA             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Fig. H2DataFrame                         
H2DataFrame字段

data

StrField

b''

flags = {0: MultiFlagEntry(short='ES', long='End Stream'), 3: MultiFlagEntry(short='P', long='Padded')}
type_id = 0
class scapy.contrib.http2.H2ErrorCodes

Bases: object

H2ErrorCodes是RFC7540 par7中定义的错误代码的枚举. 该枚举不是任何帧的一部分,因为错误代码与H2ResetFrame和H2GoAwayFrame相同.

CANCEL = 8
COMPRESSION_ERROR = 9
CONNECT_ERROR = 10
ENHANCE_YOUR_CALM = 11
FLOW_CONTROL_ERROR = 3
FRAME_SIZE_ERROR = 6
HTTP_1_1_REQUIRED = 13
INADEQUATE_SECURITY = 12
INTERNAL_ERROR = 2
NO_ERROR = 0
PROTOCOL_ERROR = 1
REFUSED_STREAM = 7
SETTINGS_TIMEOUT = 4
STREAM_CLOSED = 5
literal = {0: 'No error', 1: 'Protocol error', 2: 'Internal error', 3: 'Flow control error', 4: 'Settings timeout', 5: 'Stream closed', 6: 'Frame size error', 7: 'Refused stream', 8: 'Cancel', 9: 'Compression error', 10: 'Control error', 11: 'Enhance your calm', 12: 'Inadequate security', 13: 'HTTP/1.1 required'}
class scapy.contrib.http2.H2Frame(*args, **kargs)

Bases: scapy.packet.Packet

H2Frame实现RFC 7540 par4.1中定义的帧结构

This packet may have a payload (one of the H2FramePayload) or none, in some rare cases such as settings acknowledgement)

aliastypes
extract_padding(s)
Parameters

sstr )–用来区分填充和有效载荷数据的字符串#noqa:E501

Returns

(str,str):填充和有效载荷数据字符串

Raises

AssertionError

fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              LEN                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      TYPE     |     FLAGS     |R|          STREAM ID          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                           Fig. H2Frame                           
H2Frame字段

len

X3BytesField

None

type

EnumField

None

flags

MultiFlagsField (8位)

set()

reserved

BitField (1位)

0

stream_id

BitField (31位)

0

guess_payload_class(payload)

guess_payload_class返回用于解析有效负载的Class对象.此函数使用H2Frame.type字段值确定要解析的有效负载. 该工具不能使用简单的bind_layers帮助器执行#noqa:E501,因为有时选择返回哪个Class对象##noqa:E501也取决于H2Frame.flags值.

Parameters

payload

Return:

payload_guess

可能的子层: H2ContinuationFrameH2DataFrameH2GoAwayFrameH2HeadersFrameH2PaddedDataFrameH2PaddedHeadersFrameH2PaddedPriorityHeadersFrameH2PaddedPushPromiseFrameH2PingFrameH2PriorityFrameH2PriorityHeadersFrameH2PushPromiseFrameH2ResetFrameH2SettingsFrameH2WindowUpdateFrame

post_build(p, pay)
Parameters
  • pstr )–字符串化的数据包

  • paystr )–字符串化的有效载荷

Returns

str:字符串化的数据包和有效负载,数据包长度字段为"已修补"#noqa:E501

Raises

AssertionError

class scapy.contrib.http2.H2FramePayload(*args, **kargs)

Bases: scapy.packet.Packet

H2FramePayload是一个空类,它是所有Scapy HTTP / 2帧数据包的超类

aliastypes
class scapy.contrib.http2.H2GoAwayFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2GoAwayFrame实现RFC 7540 par6.8

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|                        LAST STREAM ID                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             ERROR                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        ADDITIONAL DATA        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Fig. H2GoAwayFrame                        
H2GoAwayFrame字段

reserved

BitField (1位)

0

last_stream_id

BitField (31位)

0

error

EnumField

0

additional_data

StrField

b''

type_id = 7
class scapy.contrib.http2.H2HeadersFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2AbstractHeadersFrame

H2HeadersFrame在没有填充且没有优先级信息的情况下实现RFC 7540 par6.2 Headers Frame

分解成四类的选择可能比#noqa更合适:E501基于底层的众多条件字段:/

END_HEADERS_FLAG = 2
END_STREAM_FLAG = 0
PADDED_FLAG = 3
PRIORITY_FLAG = 5
aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              HDRS             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Fig. H2HeadersFrame                        
H2HeadersFrame字段

hdrs

PacketListField

[]

flags = {0: MultiFlagEntry(short='ES', long='End Stream'), 2: MultiFlagEntry(short='EH', long='End Headers'), 3: MultiFlagEntry(short='P', long='Padded'), 5: MultiFlagEntry(short='+', long='Priority')}
type_id = 1
class scapy.contrib.http2.H2PaddedDataFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2DataFrame

H2DataFrame实现RFC7540 par6.1.此数据包是存在填充时要使用的数据帧.

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     PADLEN    |              DATA             |    PADDING    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+

                      Fig. H2PaddedDataFrame                      
H2PaddedDataFrame字段

padlen

FieldLenField

None

data

StrLenField

b''

padding

StrLenField

b''

get_data_len()

get_data_len计算数据字段的长度

要执行此计算,请将padlen字段的长度和实际填充值减去提供给pre_dissect的字符串.nokta:E501有趣的是pkt参数:return:int; 作为参数#noqa提供的HTTP / 2帧数据包的数据部分的数据长度:E501:raises:AssertionError

pre_dissect(s)

pre_dissect正在填充此实例的s_len属性. #noqa:E501尝试评估StrLenField的长度时,稍后在"数据"字段的getfield调用期间使用此属性! 该"技巧"之所以有效,是因为假定底层数据包(H2Frame)会覆盖" extract_padding"方法,并且仅向此数据包提供此数据包所需的数据. 整,、整trick,大概会休息一天! #noqa:E501

s_len
class scapy.contrib.http2.H2PaddedHeadersFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2AbstractHeadersFrame

H2PaddedHeadersFrame是H2HeadersFrame的变体,其中设置了填充标志并且清除了优先级标志

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     PADLEN    |              HDRS             |    PADDING    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+

                    Fig. H2PaddedHeadersFrame                     
H2PaddedHeadersFrame字段

padlen

FieldLenField

None

hdrs

PacketListField

[]

padding

StrLenField

b''

get_hdrs_len()

get_hdrs_len computes the length of the hdrs field

要执行此计算,请向pkt参数的pre_dissect#noqa:E501提供的字符串中减去padlen字段的长度和实际填充. :return:int; 作为参数#noqa提供的HTTP / 2帧数据包的数据部分的数据长度:E501:raises:AssertionError

pre_dissect(s)

pre_dissect正在填充此实例的s_len属性. 稍后,在尝试评估PacketListField的长度时,在解析hdrs PacketListField时将使用此属性! 该"技巧"之所以有效,是因为假定底层数据包(H2Frame)覆盖#noqa:E501" extract_padding"方法,并且仅向此数据包提供此数据包所需的数据. 整,、整trick,大概会休息一天! #noqa:E501

s_len
class scapy.contrib.http2.H2PaddedPriorityHeadersFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2AbstractHeadersFrame

H2PaddedPriorityHeadersFrame是H2HeadersFrame的变体,其中设置了优先级和填充标志

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     PADLEN    |E|              STREAM DEPENDENCY              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |     WEIGHT    |              HDRS             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                Fig. H2PaddedPriorityHeadersFrame                 
H2PaddedPriorityHeadersFrame字段

padlen

FieldLenField

None

exclusive

BitField (1位)

0

stream_dependency

BitField (31位)

0

weight

ByteField

0

hdrs

PacketListField

[]

padding

StrLenField

b''

get_hdrs_len()

get_hdrs_len计算hdrs字段的长度

为了执行此计算,将padlen字段的长度,优先级信息字段和实际填充值减去到提供给pkt参数的pre_dissect fun的字符串中. :return:int:hdrs字段的长度:raise:AssertionError

pre_dissect(s)

pre_dissect正在填充此实例的s_len属性. 稍后,在尝试评估PacketListField的长度时,在解析hdrs PacketListField时将使用此属性! 该"技巧"之所以有效,是因为假定底层数据包(H2Frame)覆盖#noqa:E501" extract_padding"方法,并且仅向此数据包提供此数据包所需的数据. 整,、整trick,大概会休息一天! #noqa:E501

s_len
class scapy.contrib.http2.H2PaddedPushPromiseFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2PushPromiseFrame

H2PaddedPushPromiseFrame实现RFC7540 par6.6. 此数据包是设置底层填充标志时使用的变体

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     PADLEN    |R|                  STREAM ID                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |              HDRS             |    PADDING    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+

                  Fig. H2PaddedPushPromiseFrame                   
H2PaddedPushPromiseFrame字段

padlen

FieldLenField

None

reserved

BitField (1位)

0

stream_id

BitField (31位)

0

hdrs

PacketListField

[]

padding

StrLenField

b''

get_hdrs_len()

get_hdrs_len计算hdrs字段的长度

为了执行此计算,将padlen字段的长度,保留字段,stream_id和实际填充字段减去为pkt参数的pre_dissect函数提供的字符串. :return:int:hdrs字段的长度:raise:AssertionError

pre_dissect(s)

pre_dissect正在填充此实例的s_len属性. 稍后,在尝试评估PacketListField的长度时,在解析hdrs PacketListField时将使用此属性! 该"技巧"之所以有效,是因为假定底层数据包(H2Frame)覆盖#noqa:E501" extract_padding"方法,并且仅向此数据包提供此数据包所需的数据. 整,、整trick,大概会休息一天! #noqa:E501

s_len
class scapy.contrib.http2.H2PingFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2PingFrame实现RFC 7540 par6.7

ACK_FLAG = 0
aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             OPAQUE                            |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Fig. H2PingFrame                         
H2PingFrame字段

opaque

LongField

0

flags = {0: MultiFlagEntry(short='A', long='ACK')}
type_id = 6
class scapy.contrib.http2.H2PriorityFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2PriorityFrame implements RFC 7540 par6.3

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|E|                      STREAM DEPENDENCY                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     WEIGHT    |
+-+-+-+-+-+-+-+-+

                       Fig. H2PriorityFrame                       
H2PriorityFrame字段

exclusive

BitField (1位)

0

stream_dependency

BitField (31位)

0

weight

ByteField

0

type_id = 2
class scapy.contrib.http2.H2PriorityHeadersFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2AbstractHeadersFrame

H2PriorityHeadersFrame是H2HeadersFrame的变体,其中设置了优先级标志并且清除了填充标志

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|E|                      STREAM DEPENDENCY                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     WEIGHT    |              HDRS             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Fig. H2PriorityHeadersFrame                    
H2PriorityHeadersFrame fields

exclusive

BitField (1位)

0

stream_dependency

BitField (31位)

0

weight

ByteField

0

hdrs

PacketListField

[]

s_len
class scapy.contrib.http2.H2PushPromiseFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2PushPromiseFrame实现RFC7540 par6.6. 此数据包是清除底层填充标志时使用的变体

END_HEADERS_FLAG = 2
PADDED_FLAG = 3
aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|                          STREAM ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              HDRS             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Fig. H2PushPromiseFrame                      
H2PushPromiseFrame字段

reserved

BitField (1位)

0

stream_id

BitField (31位)

0

hdrs

PacketListField

[]

flags = {2: MultiFlagEntry(short='EH', long='End Headers'), 3: MultiFlagEntry(short='P', long='Padded')}
type_id = 5
class scapy.contrib.http2.H2ResetFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2ResetFrame实现RFC 7540 par6.4

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             ERROR                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Fig. H2ResetFrame                         
H2ResetFrame字段

error

EnumField

0

type_id = 3
class scapy.contrib.http2.H2Seq(*args, **kargs)

Bases: scapy.packet.Packet

H2Seq是一个帮助程序包,其中包含多个H2Frame及其有效负载. 例如,当从TCP套接字手动读取时,可以使用此数据包.

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             FRAMES            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                            Fig. H2Seq                            
H2Seq字段

frames

PacketListField

[]

guess_payload_class(payload)
class scapy.contrib.http2.H2Setting(*args, **kargs)

Bases: scapy.packet.Packet

H2Setting实现一个设置,如RFC7540 par6.5.1中所定义

SETTINGS_ENABLE_PUSH = 2
SETTINGS_HEADER_TABLE_SIZE = 1
SETTINGS_INITIAL_WINDOW_SIZE = 4
SETTINGS_MAX_CONCURRENT_STREAMS = 3
SETTINGS_MAX_FRAME_SIZE = 5
SETTINGS_MAX_HEADER_LIST_SIZE = 6
aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               ID              |             VALUE             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                          Fig. H2Setting                          
H2设定栏位

id

EnumField

0

value

IntField

0

guess_payload_class(payload)
class scapy.contrib.http2.H2SettingsFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2SettingsFrame实现RFC7540 par6.5

ACK_FLAG = 0
aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            SETTINGS           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Fig. H2SettingsFrame                       
H2SettingsFrame字段

settings

PacketListField

[]

flags = {0: MultiFlagEntry(short='A', long='ACK')}
type_id = 4
class scapy.contrib.http2.H2WindowUpdateFrame(*args, **kargs)

Bases: scapy.contrib.http2.H2FramePayload

H2WindowUpdateFrame实现RFC 7540 par6.9

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|                        WIN SIZE INCR                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Fig. H2WindowUpdateFrame                     
H2WindowUpdateFrame fields

reserved

BitField (1位)

0

win_size_incr

BitField (31位)

0

type_id = 8
class scapy.contrib.http2.HPackDynamicSizeUpdate(*args, **kargs)

Bases: scapy.contrib.http2.HPackHeaders

HPackDynamicSizeUpdate实现RFC 7541 par6.3

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|MAGIC|            MAX SIZE           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Fig. HPackDynamicSizeUpdate                    
HPackDynamicSizeUpdate字段

magic

HPackMagicBitField (3位)

1

max_size

UVarIntField

0

class scapy.contrib.http2.HPackHdrEntry(*args, **kwds)

Bases: collections.abc.Sized, typing.Generic

HPackHdrEntry是HPackHdrTable帮助器的条目

每个HPackHdrEntry实例都是一个标题行(名称和值). 根据RFC 7540 par8.1.2对名称进行标准化(小写)

name()
size()

size返回标头条目的"长度",如RFC 7541 par4.1中所定义.

value()
class scapy.contrib.http2.HPackHdrString(*args, **kargs)

Bases: scapy.packet.Packet

HPackHdrString是一个数据包,已序列化为RFC7541 par5.2字符串文字表示形式.

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T|              LEN              |             DATA            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+-+

                       Fig. HPackHdrString                        
HPackHdrString字段

type

BitEnumField (1位)

None

len

FieldUVarLenField

None

data

HPackStrLenField

<scapy.contrib.http2.HPackLiteralString object at 0x7f43be5ab908>

guess_payload_class(payload)
self_build(field_pos_list=None)

self_build被覆盖,因为类型和len是在构建时根据"数据"字段内部类型确定的

class scapy.contrib.http2.HPackHdrTable(*args, **kwds)

Bases: collections.abc.Sized, typing.Generic

HPackHdrTable是一个帮助程序类,它实现与标头索引相关的某些逻辑(此"注册表"中的读取和写入操作.)HPackHdrTable还实现了一些便捷功能,以方便#noqa:E501可以在文本表示形式和二进制表示形式之间进行转换. HTTP / 2请求

gen_txt_repr(hdrs, register=True)

gen_txt_repr返回提供的标题的"文本"表示. 该函数的输出与parse_txt_hdrs的输入兼容.

Parameters
  • HPackHeaders hdrsH2Frame | list )的列表–转换为文本表示形式的标题列表.

  • bool-在生成文本表示形式时是否应将增量标题添加到动态表中

Returns

str:提供的标题的文本表示形式

Raises

AssertionError

get_idx_by_name(name)

get_idx_by_name返回匹配的已注册标头的索引

此实现将更愿意在可能的情况下返回静态条目索引. 如果在静态表中找到多个匹配的标头名称,则可以保证将返回第一个条目(最低的索引号). 如果找不到匹配的标头,则此方法返回None.

get_idx_by_name_and_value(name, value)

get_idx_by_name_and_value返回匹配的已注册标头的索引

此实现将更愿意在可能的情况下返回静态条目索引. 如果在动态表中找到多个匹配的标头,则返回最低索引.如果找不到匹配的标头,则此方法返回None.

classmethod init_static_table()
parse_txt_hdrs(s, stream_id=1, body=None, max_frm_sz=4096, max_hdr_lst_sz=0, is_sensitive=<function HPackHdrTable.<lambda>>, should_index=<function HPackHdrTable.<lambda>>, register=True)

parse_txt_hdrs解析以文本表示的标头,并将其转换为带有"正确"标志的一系列H2Frame. 在这种情况下,可以提供一个正文,添加带有结束流标志的数据帧,而不是H2HeadersFrame / H2ContinuationFrame. 如果提供的话,生成的帧可以遵循max_frm_sz(SETTINGS_MAX_FRAME_SIZE)和max_hdr_lst_sz(SETTINGS_MAX_HEADER_LIST_SIZE). 标头分为多个标头片段(和H2Frames)以遵守这些限制. 同样,可以提供一个回调函数来告诉头文件是否永不被索引(敏感的头文件,例如cookie),另一个回调函数说明是否应将头文件完全注册到索引表中. 对于要注册的标头,is_sensitive回调必须返回False,should_index回调应该返回True. 这是默认行为.

Parameters
  • sstr )–标题解析的字符串

  • stream_idint )–在生成的H2Frames中使用的流ID

  • 正文str / None )–请求的最终正文,添加到生成的帧中

  • max_frm_szint )–最大帧大小. 这用于根据为此连接协商的最大帧大小来拆分头和数据帧.

  • max_hdr_lst_szint )– RFC7540中定义的"标头片段"的最大大小

  • is_sensitivecallable )–如果提供的标头是明智的,并且必须存储在标头数据包中,请请求此标头不被索引,则返回True的回调

  • should_indexcallable )–如果提供的标头应存储在请求动态标头表中索引的标头包中,则返回True的回调.

  • registerbool )–在解析新标头时是否使用增量索引注册新标头

Raises

Exception

recap(nc)

recap更改动态表的最大大小限制. 如果新的尺寸小于前一个尺寸,则它还会进入resize(). :param int nc:动态表的新上限(即最大-最大大小)#noqa:E501:raises:AssertionError

register(hdrs)

寄存器将作为参数提供的HPackLitHdrFldWithIncrIndexing实例添加到此表中.

可以提供具有H2HeadersFrame有效负载的H2Frame,以及HPackHeaders的python列表或单个HPackLitHdrFldWithIncrIndexing实例. :HPackHeaders hdrs的参数:HPackLitHdrFldWithIncrIndexing | H2Frame |列表:要注册的标头#noqa:E501:raises:AssertionError

resize(ns)

调整动态表的大小. 如果新大小(ns)必须介于0和上限之间. 如果新大小小于动态表的当前大小,则逐出条目. :param int ns:动态表的新大小:raises:AssertionError

class scapy.contrib.http2.HPackHeaders(*args, **kargs)

Bases: scapy.packet.Packet

HPackHeaders使用Packet_metaclass的" dispatch_hook"技巧来选择正确的HPack标头数据包类型. 为此,侦听要分析的字符串#noqa:E501的第一个字节.

aliastypes
classmethod dispatch_hook(s=None, *_args, **_kwds)

dispatch_hook返回必须用于剖析字符串的HPackHeaders的子类.

guess_payload_class(payload)
class scapy.contrib.http2.HPackIndexedHdr(*args, **kargs)

Bases: scapy.contrib.http2.HPackHeaders

HPackIndexedHdr实现RFC 7541 par6.1

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|             INDEX             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Fig. HPackIndexedHdr                       
HPackIndexedHdr字段

magic

HPackMagicBitField (1位)

1

index

UVarIntField

2

class scapy.contrib.http2.HPackLitHdrFldWithIncrIndexing(*args, **kargs)

Bases: scapy.contrib.http2.HPackHeaders

HPackLitHdrFldWithIncrIndexing实现RFC 7541 par6.2.1

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|MAG|             INDEX             |          HDR NAME         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   |           HDR VALUE           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

               Fig. HPackLitHdrFldWithIncrIndexing                
HPackLitHdrFldWithIncrIndexing字段

magic

HPackMagicBitField (2位)

1

index

UVarIntField

0

hdr_name

PacketField (Cond)

None

hdr_value

PacketField

None

class scapy.contrib.http2.HPackLitHdrFldWithoutIndexing(*args, **kargs)

Bases: scapy.contrib.http2.HPackHeaders

HPackLitHdrFldWithIncrIndexing实现RFC 7541 par6.2.2和par6.2.3

aliastypes
fields_desc
显示类似RFC的架构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|MAGIC|N|             INDEX             |        HDR NAME       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       |           HDR VALUE           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                Fig. HPackLitHdrFldWithoutIndexing                
HPackLitHdrFldWithoutIndexing字段

magic

HPackMagicBitField (3位)

0

never_index

BitEnumField (1位)

0

index

UVarIntField

0

hdr_name

PacketField (Cond)

None

hdr_value

PacketField

None

class scapy.contrib.http2.HPackLiteralString(*args, **kwds)

Bases: scapy.contrib.http2.HPackStringsInterface

HPackLiteralString是一个字符串. 此类用作标记,并实现与HPackZString相同的接口

origin()
class scapy.contrib.http2.HPackMagicBitField(name, default, size)

Bases: scapy.fields.BitField

HPackMagicBitField是一个BitField变体,不能为其分配默认值以外的其他值. 在可能引起模糊的地方,请勿使用此字段. OTOH,此字段有意义(例如,如果调度程序使用了魔术位来选择有效负载类)

addfield(pkt, s, val)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用. #noqa:E501

  • int long sstr | str )–一个str(如果0 == size%8,则为一个元组,该字符串带有要将此字段添加到的字符串)#noqa:E501已生成的位数,以及生成的值远.

  • valint )–未使用; 必须等于默认值

Returns

str |(str,int,long):使用此字段机器表示形式扩展的s字符串#noqa:E501

Raises

AssertionError

any2i(pkt, x)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用的#noqa:E501

  • xint )–未使用; 必须等于默认值

Returns

int; 默认值

Raises

AssertionError

getfield(pkt, s)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用. #noqa:E501

  • int sstr | str )–如果为size%8 == 0则为str或具有要从中解析的字符串以及#noqa:E501位的数量的元组:先前的位域兼容字段已经使用过.

Returns

(str |(str,int),int):返回剩余的字符串和已解析的值. 如果#noqa:E501在第一个字节中有剩余要解析的位,则可能返回一个元组. 返回值等于默认值#noqa:E501

Raises

AssertionError

h2i(pkt, x)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用的#noqa:E501

  • xint )–未使用; 必须等于默认值

Returns

int; 默认值

Raises

AssertionError

i2h(pkt, x)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用的#noqa:E501

  • xint )–未使用; 必须等于默认值

Returns

int; 默认值

Raises

AssertionError

i2m(pkt, x)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用的#noqa:E501

  • xint )–未使用; 必须等于默认值

Returns

int; 默认值

Raises

AssertionError

m2i(pkt, x)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用的#noqa:E501

  • xint )–必须是默认值的机器表示

Returns

int; 默认值

Raises

AssertionError

class scapy.contrib.http2.HPackStrLenField(name, default, length_from, type_from)

Bases: scapy.fields.Field

HPackStrLenField是专门用于HTTP / 2 HPack的StrLenField变体

此变体使用实现HPackStringsInterface的内部表示形式. #noqa:E501

addfield(pkt, s, val)
any2i(pkt, x)
Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例. #noqa:E501

  • xstr | HPackStringsInterface )–要转换的值

Returns

HPackStringsInterface:此字段的Scapy内部值

Raises

AssertionError,InvalidEncodingException

getfield(pkt, s)
Parameters
  • pktpacket.Packet )–包含此字段实例的数据包实例. #noqa:E501

  • sstr )–解析该字段的字符串.

Returns

(str,HPackStringsInterface):此字段后的剩余字符串和提取的#noqa:E501值.

Raises

如果" type_from"不是pkt或其有效载荷的字段,则发生KeyError.

Raises

InvalidEncodingException

h2i(pkt, x)
i2h(pkt, x)
i2len(pkt, x)
i2m(pkt, x)
i2repr(pkt, x)
m2i(pkt, x)
Parameters
  • pktpacket.Packet )–包含此字段实例的数据包实例. #noqa:E501

  • xstr )–要分析的字符串.

Returns

HPackStringsInterface:从x解析的值的内部类型. #noqa:E501

Raises

AssertionError

Raises

InvalidEncodingException

Raises

如果_type_from不是pkt字段之一,则发生KeyError.

class scapy.contrib.http2.HPackStringsInterface(*args, **kwds)

Bases: abc.ABC, collections.abc.Sized, typing.Generic

abstract origin()
class scapy.contrib.http2.HPackZString(*args, **kwds)

Bases: scapy.contrib.http2.HPackStringsInterface

classmethod huffman_compute_decode_tree()

huffman_compute_decode_tree初始化/构建static_huffman_tree

Returns

None

Raises

InvalidEncodingException如果存在编码问题

classmethod huffman_conv2bitstring(s)

huffman_conv2bitstring将字符串转换为其位字符串表示形式. 它返回一个元组:位串及其位长. 此函数不压缩/解压缩字符串!

Parameters

sstr )–要转换的字节串.

Returns

(int,int):s的位串及其位长.

Raises

AssertionError

classmethod huffman_conv2str(bit_str, bit_len)

huffman_conv2str将bit_len位长的位串转换为二进制字符串. 它不压缩/解压缩位串!

Parameters
  • bit_strint )–要转换的位串.

  • bit_lenint )– bit_str的位长.

Returns

str: the converted bitstring as a bytestring.

Raises

AssertionError

classmethod huffman_decode(i, ibl)

huffman_decode解码作为参数提供的位串.

Parameters
  • iint )–要解码的位串

  • iblint )– i的位长

Returns

str:从位串解码的字符串

Raises

AssertionError,InvalidEncodingException

classmethod huffman_encode(s)

huffman_encode返回表示作为参数提供的字符串的位串和位串的位长

Parameters

sstr )–要编码的字符串

Returns

(int,int):s的位串及其位长

Raises

AssertionError

origin()
static_huffman_code = [(8184, 13), (8388568, 23), (268435426, 28), (268435427, 28), (268435428, 28), (268435429, 28), (268435430, 28), (268435431, 28), (268435432, 28), (16777194, 24), (1073741820, 30), (268435433, 28), (268435434, 28), (1073741821, 30), (268435435, 28), (268435436, 28), (268435437, 28), (268435438, 28), (268435439, 28), (268435440, 28), (268435441, 28), (268435442, 28), (1073741822, 30), (268435443, 28), (268435444, 28), (268435445, 28), (268435446, 28), (268435447, 28), (268435448, 28), (268435449, 28), (268435450, 28), (268435451, 28), (20, 6), (1016, 10), (1017, 10), (4090, 12), (8185, 13), (21, 6), (248, 8), (2042, 11), (1018, 10), (1019, 10), (249, 8), (2043, 11), (250, 8), (22, 6), (23, 6), (24, 6), (0, 5), (1, 5), (2, 5), (25, 6), (26, 6), (27, 6), (28, 6), (29, 6), (30, 6), (31, 6), (92, 7), (251, 8), (32764, 15), (32, 6), (4091, 12), (1020, 10), (8186, 13), (33, 6), (93, 7), (94, 7), (95, 7), (96, 7), (97, 7), (98, 7), (99, 7), (100, 7), (101, 7), (102, 7), (103, 7), (104, 7), (105, 7), (106, 7), (107, 7), (108, 7), (109, 7), (110, 7), (111, 7), (112, 7), (113, 7), (114, 7), (252, 8), (115, 7), (253, 8), (8187, 13), (524272, 19), (8188, 13), (16380, 14), (34, 6), (32765, 15), (3, 5), (35, 6), (4, 5), (36, 6), (5, 5), (37, 6), (38, 6), (39, 6), (6, 5), (116, 7), (117, 7), (40, 6), (41, 6), (42, 6), (7, 5), (43, 6), (118, 7), (44, 6), (8, 5), (9, 5), (45, 6), (119, 7), (120, 7), (121, 7), (122, 7), (123, 7), (32766, 15), (2044, 11), (16381, 14), (8189, 13), (268435452, 28), (1048550, 20), (4194258, 22), (1048551, 20), (1048552, 20), (4194259, 22), (4194260, 22), (4194261, 22), (8388569, 23), (4194262, 22), (8388570, 23), (8388571, 23), (8388572, 23), (8388573, 23), (8388574, 23), (16777195, 24), (8388575, 23), (16777196, 24), (16777197, 24), (4194263, 22), (8388576, 23), (16777198, 24), (8388577, 23), (8388578, 23), (8388579, 23), (8388580, 23), (2097116, 21), (4194264, 22), (8388581, 23), (4194265, 22), (8388582, 23), (8388583, 23), (16777199, 24), (4194266, 22), (2097117, 21), (1048553, 20), (4194267, 22), (4194268, 22), (8388584, 23), (8388585, 23), (2097118, 21), (8388586, 23), (4194269, 22), (4194270, 22), (16777200, 24), (2097119, 21), (4194271, 22), (8388587, 23), (8388588, 23), (2097120, 21), (2097121, 21), (4194272, 22), (2097122, 21), (8388589, 23), (4194273, 22), (8388590, 23), (8388591, 23), (1048554, 20), (4194274, 22), (4194275, 22), (4194276, 22), (8388592, 23), (4194277, 22), (4194278, 22), (8388593, 23), (67108832, 26), (67108833, 26), (1048555, 20), (524273, 19), (4194279, 22), (8388594, 23), (4194280, 22), (33554412, 25), (67108834, 26), (67108835, 26), (67108836, 26), (134217694, 27), (134217695, 27), (67108837, 26), (16777201, 24), (33554413, 25), (524274, 19), (2097123, 21), (67108838, 26), (134217696, 27), (134217697, 27), (67108839, 26), (134217698, 27), (16777202, 24), (2097124, 21), (2097125, 21), (67108840, 26), (67108841, 26), (268435453, 28), (134217699, 27), (134217700, 27), (134217701, 27), (1048556, 20), (16777203, 24), (1048557, 20), (2097126, 21), (4194281, 22), (2097127, 21), (2097128, 21), (8388595, 23), (4194282, 22), (4194283, 22), (33554414, 25), (33554415, 25), (16777204, 24), (16777205, 24), (67108842, 26), (8388596, 23), (67108843, 26), (134217702, 27), (67108844, 26), (67108845, 26), (134217703, 27), (134217704, 27), (134217705, 27), (134217706, 27), (134217707, 27), (268435454, 28), (134217708, 27), (134217709, 27), (134217710, 27), (134217711, 27), (134217712, 27), (67108846, 26), (1073741823, 30)]
static_huffman_tree = None
class scapy.contrib.http2.HuffmanNode(left, right)

Bases: object

HuffmanNode是用于对HPack压缩HTTP / 2标头进行编码/解码的二进制树的条目

left
right
exception scapy.contrib.http2.InvalidEncodingException

Bases: Exception

当假设的霍夫曼编码的字符串被解码并且出现解码错误时,引发InvalidEncodingException

class scapy.contrib.http2.UVarIntField(name, default, size)

Bases: scapy.contrib.http2.AbstractUVarIntField

any2i(pkt, x)

any2i重载以限制可接受的x值(不是None)

Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用. #noqa:E501

  • xstr | int )–要转换的值.

Returns

int:转换后的值.

Raises

AssertionError

h2i(pkt, x)

h2i重载以限制可接受的x值(不是None)

Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用. #noqa:E501

  • xint )–要转换的值.

Returns

int:转换后的值.

Raises

AssertionError

i2h(pkt, x)

i2h重载以限制可接受的x值(不是None)

Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用. #noqa:E501

  • xint )–要转换的值.

Returns

int:转换后的值.

Raises

AssertionError

i2repr(pkt, x)

i2repr重载以限制可接受的x值(不是None)

Parameters
  • pktpacket.Packet | None )–包含此字段实例的数据包实例; 可能未使用. #noqa:E501

  • xint )–要转换的值.

Returns

str:转换后的值.