#目的
少し用事があり、例えば、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言語等に構造体がどう扱われているかという意味では、かためる以外の部分は、普通にクラスのメンバーになっているという言い方が正しいと思う。
コメントなどあれば、お願いします。