Problème WOL avec Scapy de Python3 (type de contrôle LAN)

Je souhaite émettre un WOL en spécifiant directement le contrôleur

Les spécifications de WOL sont les suivantes (WireShark Wiki).

https://wiki.wireshark.org/WakeOnLAN

Bref, dans le paquet

Cela arrive généralement. Peu importe le port, il est bon de le voir en faisant correspondre le modèle, donc je pense qu'il est possible de le détecter avec du matériel et d'émettre une interruption.

Donc, si vous voulez envoyer ceci, je pense qu'il est facile de créer un paquet UDP. Il semble y avoir un tel outil, mais pour autant que j'ai fait une recherche rapide, il y en avait beaucoup qui me permettaient de spécifier par adresse IP. Si tel est le cas, il sera difficile de délivrer l'adresse IP de manière appropriée. J'ai donc essayé d'implémenter une méthode pour spécifier directement le contrôleur et l'envoyer.

Scapy

Utilisez Scapy pour générer et envoyer des paquets WOL. Scapy elle-même a déjà été écrite brièvement. Moins que

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

environnement

J'utilise également Scapy. Je pense que cela fonctionnera probablement aussi sous Linux.

Le site que j'ai utilisé comme référence

C'est comme faire référence au code ci-dessous ou le couper et le coller en fonction de ceux-ci. Merci beaucoup!

code

Il est plus rapide de regarder le code pour voir comment c'est fait, ci-dessous.


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

# ---->Veuillez définir ici de manière appropriée.

#Cible de contrôle. Veuillez spécifier la chose réelle pour cela.
TARGET_MAC_ADDRESS = "11:22:33:44:55:66"

#Adresse IP à mettre sur le paquet. Cela peut être n'importe quoi.
IP_ADDRESS = "66.77.88.99"

#Un contrôleur qui crée des paquets. Veuillez également spécifier la chose réelle.
PCAP_ifname = "en0"

# <-----Jusque là

def issue_WOL():

    '''
Tout d'abord, créez la charge utile. Comme vous pouvez le voir dans le code,
Mot de passe ci-dessous(optional)Je fais juste quelque chose qui omet.

    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

    '''
Générez un paquet WOL qui envoie la charge utile ci-dessus en tant qu'UDP.
    '''
    ether_layer = Ether(dst=TARGET_MAC_ADDRESS)
    ip_layer = IP(dst=IP_ADDRESS)
    udp_layer = UDP(sport=44444,dport=33333) #adapté
    raw_layer = Raw(load=payload) #La charge utile peut être spécifiée en octets.
    wol_packet = ether_layer / ip_layer / udp_layer / raw_layer

    '''
Vous pouvez utiliser Layer2 car vous n'avez qu'à envoyer le package brut.
Si vous spécifiez le contrôleur à ce moment, il devrait sortir de là ...
    '''
    sendp(wol_packet, iface=PCAP_ifname)
    
    print ("sent WOL ", TARGET_MAC_ADDRESS, IP_ADDRESS)


if __name__ == "__main__":
    issue_WOL()


Pour l'utiliser, réécrivez TARGET_MAC_ADDRESS, IP_ADDRESS, PCAP_ifname en fonction de votre environnement et de votre cible, et exécutez ce code, vous devriez obtenir un paquet WOL (sudo est requis).

IP_ADDRESS n'a pas à penser à l'adresse cible actuelle. En fait, même si vous spécifiez une adresse en désordre, vous recevrez ce qui suit (vérifiez avec le WireShark opposé). En effet, vous pouvez passer directement de la couche 2 au contrôleur.

wol.PNG

c'est tout. Eh bien, avec scapy ce n'était pas trop difficile (Pendant l'écriture, Raw (même si j'étais assez accro au modèle de données spécifié par load = ...)

Recommended Posts

Problème WOL avec Scapy de Python3 (type de contrôle LAN)
[Python] Déterminez le type d'iris avec SVM
Programmation réseau avec Python Scapy
Astuces: [Python] Calculez la valeur moyenne de la zone spécifiée avec bedgraph
Exclure les cas spécifiés avec Python unittest
Premiers pas avec Python Bases de Python
Type spécifié en python. Lancer des exceptions
Jeu de vie avec Python! (Le jeu de la vie de Conway)
10 fonctions du "langage avec batterie" python
Maîtriser le type avec Python [compatible Python 3.9]
Implémentation de la méthode Dyxtra par python
Coexistence de Python2 et 3 avec CircleCI (1.0)
Etude de base d'OpenCV avec Python
[Exemple d'amélioration de Python] Apprentissage de Python avec Codecademy
[Python] Vérification simple du type d'argument avec la classe de données
Exécuter le script Python avec TS-220 cron
Vérifier l'existence du fichier avec python
Obstrué par la mise à jour Python de la console GCP ①
Introduction facile de la reconnaissance vocale avec Python
Recevoir le type de date (datetime) avec ArgumentParser [python]
[python] [meta] Le type de python est-il un type?
UnicodeEncodeError lutte avec la sortie standard de python3
1. Statistiques apprises avec Python 1-3. Calcul de diverses statistiques (statistiques)
Dessin avec Matrix-Reinventor of Python Image Processing-
Recommandation d'Altair! Visualisation des données avec Python
Comparaison de la vitesse de transposition de la matrice par Python
Comparez la somme de chaque élément dans deux listes avec la valeur spécifiée en Python