[PYTHON] Werfen wir einen Blick auf den Scapy-Code. Überladung spezieller Methoden __div__, __getitem__.

Zweck

Ich habe eine kleine Besorgung, zum Beispiel, wie sieht der Scapy-Code aus? Was ist Scapy? Scapy is a powerful Python-based interactive packet manipulation program and library. (Zitat: https://pypi.org/project/scapy/)

Python-Laie? (Ich bin damit nicht vertraut), aber es war ein ziemlich schwieriger Code für mich.

Erstens ** um die Überladung spezieller Methoden, den Code Ich verstehe ** nicht, deshalb werde ich diesen Artikel notieren.

Was ich fand

Alle Angebotscodes sind https://github.com/secdev/scapy Von.

Überladung von \ _ \ _div \ _ \ _

Wie benutzt man:

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

Aktion: ** Objekte mit "/" anhängen. ** ** **

Es ist mit Code überladen, der so aussieht:

    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)

Überladung von \ _ \ _ getitem \ _ \ _

Wie benutzt man:

        seq = pkt[TCP].seq

Aktion: ** [] um einen Teil herauszunehmen. ** ** **

Es ist mit Code überladen, der so aussieht:

    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

Zusammenfassung

Die obige Überlastung sieht praktisch aus, sodass sie auch in anderen Modulen verwendet werden kann. Informationen, die nützlich sein können, finden Sie unten.

Wenn Sie Kommentare haben, lassen Sie es uns bitte wissen. : Süßigkeiten: Möglicherweise wird diese Art der Verarbeitung auch in anderen Sprachen durchgeführt. .. Ich bin ein wenig verwirrt, wenn die Grundsymbole (Operatoren) für mich überladen sind, der nur über C Bescheid weiß.

Recommended Posts

Werfen wir einen Blick auf den Scapy-Code. Überladung spezieller Methoden __div__, __getitem__.
Werfen wir einen Blick auf den Scapy-Code. Wie bearbeiten Sie die Struktur?
Werfen wir einen Blick auf die Feature-Map von YOLO v3
Schauen wir uns den Waldbrand an der Westküste der USA mit Satellitenbildern an.
Werfen wir einen Blick auf die Infektionstendenz des neuen Coronavirus COVID-19 in jedem Land und den Status der medizinischen Reaktion (zusätzliche Informationen).
Fassen Sie den Titel von Hottentori in Hateb zusammen und schauen Sie sich die Gegenwart des Web an
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Werfen Sie einen Blick auf die Verarbeitung von LightGBM Tuner
Werfen wir einen Blick auf den Scapy-Code. Wie bearbeiten Sie die Struktur?
Sehen Sie sich das Profiling und Dumping mit Dataflow an
Schauen Sie sich das Kaggle / Titanic-Tutorial genauer an
Erhalten Sie den Namen und den Wertpapiercode einer Aktie, die im ersten Abschnitt der Tokioter Börse notiert ist
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 2 heraus ~ Schauen wir uns die Eingabedaten genauer an ~
Sehen Sie sich die in Python integrierte Ausnahmebaumstruktur an
Die Geschichte, ein Tool zu erstellen, das auf Mac und Windows auf der Spieleentwicklungsseite ausgeführt wird
Messen Sie die Testabdeckung von Push-Python-Code auf GitHub.
Sehen Sie sich die in Python 3.8.2 integrierte Ausnahmebaumstruktur an
Schauen Sie sich die Django-Vorlage an.