2
1

More than 3 years have passed since last update.

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

Posted at

目的

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

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1