💬
【Python】Scapy で HTTP/2 フレームを解析する
Scapy はインタラクティブなパケット操作ライブラリである。pip では次のコマンドでインストールできる
pip install scapy
REPL を起動させて使ってみる
>>> from scapy.contrib.http2 import H2Frame, H2_CLIENT_CONNECTION_PREFACE
>>> H2Frame
<class 'scapy.contrib.http2.H2Frame'>
>>> H2_CLIENT_CONNECTION_PREFACE
b'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n'
Settings フレームを解析してみよう
>>> pck = b'\x00\x00\x00\x04\x00\x00\x00\x00\x00'
>>> frame = H2Frame(pck)
>>> frame.show()
###[ HTTP/2 Frame ]###
len = 0x0
type = SetFrm
flags = set()
reserved = 0
stream_id = 0
比較のために h2 の receive_data
の結果も書いておく
>>> import h2.connection
>>> import h2.events
>>> data = b'\x00\x00\x00\x04\x00\x00\x00\x00\x00'
>>> c = h2.connection.H2Connection()
>>> events = c.receive_data(data)
>>> [event for event in events]
[<RemoteSettingsChanged changed_settings:{}>]
>>> [isinstance(event, h2.events.RemoteSettingsChanged) for event in events]
[True]
Discussion