Problem WOL mit Scapy of Python3 (LAN-Steuerungstyp)

Ich möchte eine WOL ausstellen, indem ich den Controller direkt spezifiziere

Die Spezifikationen von WOL lauten wie folgt (WireShark Wiki).

https://wiki.wireshark.org/WakeOnLAN

Kurz gesagt, im Paket

Es passiert normalerweise. Es spielt keine Rolle, um welchen Port es sich handelt. Sie können ihn durch Abgleichen des Musters erkennen. Ich denke, es ist möglich, ihn mit Hardware zu erkennen und einen Interrupt auszulösen.

Wenn Sie dies senden möchten, ist es meiner Meinung nach einfach, ein UDP-Paket zu erstellen. Es scheint ein solches Tool zu geben, aber soweit ich eine schnelle Suche durchgeführt habe, gab es viele, mit denen ich die IP-Adresse angeben konnte. In diesem Fall ist es schwierig, die IP-Adresse entsprechend zu vergeben. Also habe ich versucht, eine Methode zu implementieren, um den Controller direkt anzugeben und zu senden.

Scapy

Verwenden Sie Scapy, um WOL-Pakete zu generieren und zu senden. Scapy selbst wurde kurz zuvor geschrieben. Weniger als

https://qiita.com/ken_hamada/items/736e1c22f6c40702d1a7

Umgebung

Ich benutze auch Scapy. Ich denke, es wird wahrscheinlich auch unter Linux funktionieren.

Die Seite, die ich als Referenz verwendet habe

Es ist so, als würde man auf den folgenden Code verweisen oder ihn basierend auf diesen ausschneiden und einfügen. Vielen Dank!

Code

Es ist schneller, sich den Code unten anzusehen, um zu sehen, wie er tatsächlich ausgeführt wird.


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from scapy.all import *
import binascii

# ---->Bitte hier entsprechend einstellen.

#Kontrollziel. Bitte geben Sie hierfür die Realität an.
TARGET_MAC_ADDRESS = "11:22:33:44:55:66"

#IP-Adresse, die auf das Paket gesetzt werden soll. Das kann alles sein.
IP_ADDRESS = "66.77.88.99"

#Ein Controller, der Pakete erstellt. Bitte geben Sie auch die Realität an.
PCAP_ifname = "en0"

# <-----Bisher

def issue_WOL():

    '''
Erstellen Sie zunächst die Nutzlast. Wie Sie dem Code entnehmen können,
Passwort unten(optional)Ich mache nur etwas, das weggelassen wird.

    https://wiki.wireshark.org/WakeOnLAN
    
    '''
    synchronization_stream = b"\xff" * 16
    mac_bin = binascii.unhexlify("".join(TARGET_MAC_ADDRESS.split(":")))
    payload = synchronization_stream + mac_bin * 16

    '''
Generieren Sie ein WOL-Paket, das die oben genannten Nutzdaten als UDP sendet.
    '''
    ether_layer = Ether(dst=TARGET_MAC_ADDRESS)
    ip_layer = IP(dst=IP_ADDRESS)
    udp_layer = UDP(sport=44444,dport=33333) #geeignet
    raw_layer = Raw(load=payload) #Die Nutzdaten können in Bytes angegeben werden.
    wol_packet = ether_layer / ip_layer / udp_layer / raw_layer

    '''
Sie können Layer2 verwenden, da Sie nur das Rohpaket senden müssen.
Wenn Sie den Controller zu diesem Zeitpunkt angeben, sollte er von dort herauskommen ...
    '''
    sendp(wol_packet, iface=PCAP_ifname)
    
    print ("sent WOL ", TARGET_MAC_ADDRESS, IP_ADDRESS)


if __name__ == "__main__":
    issue_WOL()


Um es zu verwenden, schreiben Sie TARGET_MAC_ADDRESS, IP_ADDRESS und PCAP_ifname entsprechend Ihrer Umgebung und Ihrem Ziel neu und führen Sie diesen Code aus. Es sollte ein WOL-Paket ausgegeben werden (sudo ist erforderlich).

IP_ADDRESS muss nicht an die aktuelle Zieladresse denken. Selbst wenn Sie eine unordentliche Adresse angeben, erhalten Sie Folgendes (wenden Sie sich an den gegenüberliegenden WireShark). Dies liegt daran, dass Sie von Schicht 2 direkt zum Controller wechseln können.

wol.PNG

das ist alles. Nun, mit Scapy war es nicht allzu schwierig (Während des Schreibens Raw (obwohl ich ziemlich süchtig nach dem durch load = ... angegebenen Datenmodell war)

Recommended Posts

Problem WOL mit Scapy of Python3 (LAN-Steuerungstyp)
[Python] Bestimmen Sie den Typ der Iris mit SVM
Netzwerkprogrammierung mit Python Scapy
Tipps: [Python] Berechnen Sie den Durchschnittswert des angegebenen Bereichs mit Bedgraph
Schließen Sie bestimmte Fälle mit Python unittest aus
Erste Schritte mit Python Grundlagen von Python
Typ in Python angegeben. Ausnahmen auslösen
Lebensspiel mit Python! (Conways Spiel des Lebens)
10 Funktionen von "Sprache mit Batterie" Python
Beherrsche den Typ mit Python [Python 3.9 kompatibel]
Implementierung der Dyxtra-Methode durch Python
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Grundlegendes Studium von OpenCV mit Python
[Beispiel für eine Python-Verbesserung] Python mit Codecademy lernen
[Python] Einfache Überprüfung des Argumenttyps mit Datenklasse
Führen Sie das Python-Skript mit TS-220 cron aus
Überprüfen Sie die Existenz der Datei mit Python
Verstopft mit Python-Update der GCP-Konsole ①
Einfache Einführung der Spracherkennung mit Python
Empfangen Sie den Datumstyp (Datum / Uhrzeit) mit ArgumentParser [Python]
[Python] [Meta] Ist der Python-Typ ein Typ?
UnicodeEncodeError hat Probleme mit der Standardausgabe von Python3
1. Mit Python 1-3 gelernte Statistiken. Berechnung verschiedener Statistiken (Statistiken)
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Empfehlung von Altair! Datenvisualisierung mit Python
Vergleich der Matrixtranspositionsgeschwindigkeit durch Python
Vergleichen Sie die Summe jedes Elements in zwei Listen mit dem in Python angegebenen Wert