[PYTHON] Jetons un coup d'œil au code Scapy. Surcharge des méthodes spéciales __div__, __getitem__.

Objectif

J'ai une petite course, par exemple, à quoi ressemble le code Scapy? Qu'est-ce que Scapy? Scapy is a powerful Python-based interactive packet manipulation program and library. (Citation: https://pypi.org/project/scapy/)

Profane de Python? (Je ne le connais pas), c'était un code assez difficile pour moi.

Tout d'abord, ** autour de la surcharge des méthodes spéciales, le code Je ne comprends pas **, je vais donc prendre note de cet article.

Ce que j'ai trouvé

Tous les codes de devis sont https://github.com/secdev/scapy De.

Surcharge de \ _ \ _div \ _ \ _

Comment utiliser:

    a = IP(dst=dest) / TCP(flags="S", seq=i, sport=65000, dport=55556)
    b = IP(dst=dest)/ICMP()

Action: ** Attachez des objets avec "/". ** **

Il est surchargé de code qui ressemble à ceci:

    def __div__(self, other):
        if isinstance(other, Packet):
            cloneA = self.copy()
            cloneB = other.copy()
            cloneA.add_payload(cloneB)
            return cloneA
        elif isinstance(other, (bytes, str)):
            return self / conf.raw_layer(load=other)
        else:
            return other.__rdiv__(self)

Surcharge de \ _ \ _ getitem \ _ \ _

Comment utiliser:

        seq = pkt[TCP].seq

Action: ** [] pour retirer une partie. ** **

Il est surchargé de code qui ressemble à ceci:

    def __getitem__(self, cls):
        if isinstance(cls, slice):
            lname = cls.start
            if cls.stop:
                ret = self.getlayer(cls.start, nb=cls.stop, **(cls.step or {}))
            else:
                ret = self.getlayer(cls.start, **(cls.step or {}))
        else:
            lname = cls
            ret = self.getlayer(cls)
        if ret is None:
            if isinstance(lname, Packet_metaclass):
                lname = lname.__name__
            elif not isinstance(lname, bytes):
                lname = repr(lname)
            raise IndexError("Layer [%s] not found" % lname)
        return ret

Résumé

La surcharge ci-dessus semble pratique, elle peut donc également être utilisée dans d'autres modules. Les informations qui peuvent être utiles sont ci-dessous.

Si vous avez des commentaires, veuillez nous le faire savoir. : bonbons: Il peut y avoir beaucoup de ce type de traitement dans d'autres langues également. .. Je suis un peu confus lorsque les symboles de base (opérateurs) sont surchargés pour moi, qui ne connaît que C.

Recommended Posts

Jetons un coup d'œil au code Scapy. Surcharge des méthodes spéciales __div__, __getitem__.
Jetons un coup d'œil au code Scapy. Comment traitez-vous la structure?
Jetons un coup d'œil à la carte des fonctionnalités de YOLO v3
Jetons un coup d'œil à l'incendie de forêt sur la côte ouest des États-Unis avec des images satellites.
Jetons un coup d'œil à la tendance infectieuse du nouveau coronavirus COVID-19 dans chaque pays et à l'état de la réponse médicale (informations supplémentaires).
Résumez le titre de Hottentori dans Hateb et regardez le présent du Web
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
Jetez un œil au traitement de LightGBM Tuner
Jetons un coup d'œil au code Scapy. Comment traitez-vous la structure?
Jetez un œil au profilage et au vidage avec Dataflow
Regardez de plus près le tutoriel Kaggle / Titanic
Obtenez le nom et le code des titres d'une action cotée à la première section de la Bourse de Tokyo
Challenge classification des images par TensorFlow2 + Keras 2 ~ Regardons de plus près les données d'entrée ~
Jetez un œil à l'arborescence des exceptions intégrée à Python
L'histoire de la création d'un outil qui fonctionne sur Mac et Windows sur le site de développement de jeux
Mesurez la couverture de test du code python poussé sur GitHub.
Jetez un œil à l'arborescence des exceptions intégrée dans Python 3.8.2
Jetez un œil au modèle Django.