💬

【Python】Scapy で HTTP/2 フレームを解析する

2024/07/12に公開

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