refs #631 - Add sendWakeOnLan.py

pull/1/head
Gerardo GIl Elizeire 2024-09-04 14:24:24 +02:00
parent 7859bb65fa
commit e4d5d72a9c
2 changed files with 143 additions and 7 deletions

View File

@ -28,12 +28,13 @@ El presente documento detalla los endpoints de la API, con sus respectivos pará
6. [Recuperar una Imagen](#recuperar-una-imagen) - `POST /ogrepository/v1/images/recover-image`
7. [Importar una Imagen](#importar-una-imagen) - `POST /ogrepository/v1/images/import-image`
8. [Crear archivos ".sum", ".full.sum", ".size" y ".torrent"](#crear-archivos-sum-fullsum-size-y-torrent) - `POST /ogrepository/v1/images/create-torrentsum`
9. [Iniciar el Tracker P2P](#iniciar-el-tracker-p2p) - `POST /ogrepository/v1/images/run-tracker`
10. [Iniciar el Seeder P2P](#iniciar-el-seeder-p2p) - `POST /ogrepository/v1/images/run-seeder`
11. [Enviar una Imagen mediante UDPcast](#enviar-una-imagen-mediante-udpcast) - `POST /ogrepository/v1/images/send-udpcast`
12. [Enviar una Imagen mediante UFTP](#enviar-una-imagen-mediante-uftp) - `POST /ogrepository/v1/images/send-uftp`
13. [Ver Estado de Transmisiones Multicast-P2P](#ver-estado-de-transmisiones-multicast-p2p) -
14. [Cancelar Transmisión Multicast-P2P](#cancelar-transmisión-multicast-p2p) -
9. [Enviar paquete Wake On Lan](#enviar-paquete-wake-on-lan) - `POST /ogrepository/v1/images/send-wol`
10. [Iniciar el Tracker P2P](#iniciar-el-tracker-p2p) - `POST /ogrepository/v1/images/run-tracker`
11. [Iniciar el Seeder P2P](#iniciar-el-seeder-p2p) - `POST /ogrepository/v1/images/run-seeder`
12. [Enviar una Imagen mediante UDPcast](#enviar-una-imagen-mediante-udpcast) - `POST /ogrepository/v1/images/send-udpcast`
13. [Enviar una Imagen mediante UFTP](#enviar-una-imagen-mediante-uftp) - `POST /ogrepository/v1/images/send-uftp`
14. [Ver Estado de Transmisiones Multicast-P2P](#ver-estado-de-transmisiones-multicast-p2p) -
15. [Cancelar Transmisión Multicast-P2P](#cancelar-transmisión-multicast-p2p) -
---
### Obtener Información de todas las Imágenes
@ -222,7 +223,7 @@ curl -X PUT -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag
Se comprobará la integridad del fichero de imagen especificado como parámetro.
Se puede hacer con el script "**checkImage.py**", que compara el tamaño actual del archivo con el almacenado en el archivo "**.size**", y el hash MD5 del último MB del archivo con el almacenado en el archivo "**.sum**".
**NOTA**: En lugar del archivo "**.sum**", se ppodría usar el archivo "**.full.sum**" (que contiene el hash MD5 de todo el archivo), pero en ese caso la comprobación tardaría un poco, dependiendo del tamaño de la imagen.
**NOTA**: En lugar del archivo "**.sum**", se podría usar el archivo "**.full.sum**" (que contiene el hash MD5 de todo el archivo), pero en ese caso la comprobación tardaría un poco, dependiendo del tamaño de la imagen.
**URL:** `/ogrepository/v1/images/check-image`
**Método HTTP:** GET
@ -337,6 +338,28 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d
- **Código 400 Bad Request:** No se ha encontrado la imagen especificada.
- **Código 200 OK:** Los archivos se han creado exitosamente.
---
### Enviar paquete Wake On Lan
Se enviará un paquete Wake On Lan a la dirección MAC especificada, a través de la IP de broadcast especificada.
Se puede hacer con el script "**sendWakeOnLan.py**", que hemos programado recientemente.
**URL:** `/ogrepository/v1/images/send-wol`
**Método HTTP:** POST
**Cuerpo de la Solicitud (JSON):**
- **broadcast_ip**: IP de broadcast a la que enviar el paquete (puede ser "255.255.255.255", o la IP de broadcast de una subred).
- **mac**: Dirección MAC del equipo que se desea encender via Wake On Lan.
**Ejemplo de Solicitud:**
```bash
curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"broadcast_ip":"255.255.255.255", "mac":"00:19:99:5c:bb:bb"}' http://example.com/ogrepository/v1/images/send-wol
```
**Respuestas:**
- **Código 500 Internal Server Error:** Ocurrió un error al enviar el paquete Wake On Lan.
- **Código 200 OK:** El paquete Wake On Lan se ha enviado exitosamente.
---
### Iniciar el Tracker P2P

View File

@ -0,0 +1,113 @@
#!/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()
# --------------------------------------------------------------------------------------------