Scapyのコードを少しみてみる。構造体をどう処理しているか。


目的

少し用事があり、例えば、Scapyのコードはどんな感じが見てみた。
Scapyとは、
Scapy is a powerful Python-based interactive packet manipulation program and library.
(引用:https://pypi.org/project/scapy/)

Pythonには構造体がないので、
パケットなどの構造体的なデータをどう処理しているかを確認した。

対象コードは、
https://github.com/secdev/scapy

引用コードもすべて上記。

わかったこと

概要

コード上、以下の2つの構造体関連の処理があった

  • structモジュール
  • Structureクラス

基本、前者が使われている。

structモジュール

↓以下のような感じで、packしていた。

    psdhdr = struct.pack("!4s4sHH",
                         inet_pton(socket.AF_INET, u.src),
                         inet_pton(socket.AF_INET, u.dst),
                         proto,
                         ln)

Structureクラス

↓以下のようなコードがあるが、Windowsのpcap対応用??
使われ方がよくわからなかった。

class sockaddr_in(Structure):
    _fields_ = [("sin_family", SHORT),
                ("sin_port", USHORT),
                ("sin_addr", in_addr),
                ("sin_zero", 8 * CHAR)]   

まとめ

有名なScapyで、パケットの構造体的なデータがどう処理されているかを確認した。
structモジュールが使われていた。
(上記、少し、語弊があります。データをかためる部分で、structモジュールが使われていたという言い方が適当かも。)
c言語等に構造体がどう扱われているかという意味では、かためる以外の部分は、普通にクラスのメンバーになっているという言い方が正しいと思う。

コメントなどあれば、お願いします。