ogrepository/bin/sendWakeOnLan.py

114 lines
4.1 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Este script envía un paquete mágico WOL a la dirección MAC especificada como segundo parámetro, a través de la IP de broadcast especificada como primer parámetro.
La IP de broadcast puede corresponder a toda la red ("255.255.255.255"), que es el valor por defecto, o a una subred concreta (por ejemplo, "10.2.7.255").
Parámetros
------------
sys.argv[1] - Dirección IP de broadcast de toda la red o de una subred concreta.
- Ejemplo1: 255.255.255.255
- Ejemplo2: 10.2.7.255
sys.argv[2] - Dirección MAC del equipo que se quiere enceder via WOL.
- Ejemplo: 00:19:99:5c:bb:bb
Sintaxis
----------
./sendWakeOnLan.py broadcast_IP MAC
Ejemplos
---------
./sendWakeOnLan.py 255.255.255.255 00:19:99:5c:bb:bb
./sendWakeOnLan.py 10.2.7.255 00:19:99:5c:bb:bb
"""
# --------------------------------------------------------------------------------------------
# IMPORTS
# --------------------------------------------------------------------------------------------
import os
import sys
import subprocess
# --------------------------------------------------------------------------------------------
# VARIABLES
# --------------------------------------------------------------------------------------------
script_name = os.path.basename(__file__)
# --------------------------------------------------------------------------------------------
# FUNCTIONS
# --------------------------------------------------------------------------------------------
def show_help():
""" Imprime la ayuda, cuando se ejecuta el script con el parámetro "help".
"""
help_text = f"""
Sintaxis: {script_name} broadcast_IP MAC
Ejemplo1: {script_name} 255.255.255.255 00:19:99:5c:bb:bb
Ejemplo2: {script_name} 10.2.7.255 00:19:99:5c:bb:bb
"""
print(help_text)
def check_params():
""" Comprueba que se haya enviado la cantidad correcta de parámetros, y en el formato correcto.
Si no es así, muestra un mensaje de error, y sale del script.
LLama a la función "show_help" cuando se ejecuta el script con el parámetro "help".
"""
# Si se ejecuta el script con el parámetro "help", se muestra la ayuda, y se sale del script:
if len(sys.argv) == 2 and sys.argv[1] == "help":
show_help()
sys.exit(0)
# Si se ejecuta el script con más o menos de 2 parámetros, se muestra un error y la ayuda, y se sale del script:
elif len(sys.argv) != 3:
print(f"{script_name} Error: Formato incorrecto: Se debe especificar 2 parámetros")
show_help()
sys.exit(1)
# --------------------------------------------------------------------------------------------
# MAIN
# --------------------------------------------------------------------------------------------
def main():
"""
"""
# Evaluamos si se ha enviado la cantidad correcta de parámetros, y en el formato correcto:
check_params()
# Almacenamos los parámetros en variables:
broadcast_IP = sys.argv[1]
MAC = sys.argv[2]
# Creamos una lista con el comando a enviar, y lo imprimimos con espacios:
splitted_cmd = f"wakeonlan -i {broadcast_IP} {MAC}".split()
print(f"Sending command: {' '.join(splitted_cmd)}")
# Ejecutamos el comando en el sistema, e imprimimos el resultado:
try:
result = subprocess.run(splitted_cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(f"ReturnCode: {result.returncode}")
except subprocess.CalledProcessError as error:
print(f"ReturnCode: {error.returncode}")
print(f"Error Output: {error.stderr.decode()}")
except Exception as error_description:
print(f"Unexpeted error: {error_description}")
# --------------------------------------------------------------------------------------------
if __name__ == "__main__":
main()
# --------------------------------------------------------------------------------------------