refs #631 - Add sendWakeOnLan.py
parent
7859bb65fa
commit
e4d5d72a9c
37
README.md
37
README.md
|
@ -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`
|
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`
|
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`
|
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`
|
9. [Enviar paquete Wake On Lan](#enviar-paquete-wake-on-lan) - `POST /ogrepository/v1/images/send-wol`
|
||||||
10. [Iniciar el Seeder P2P](#iniciar-el-seeder-p2p) - `POST /ogrepository/v1/images/run-seeder`
|
10. [Iniciar el Tracker P2P](#iniciar-el-tracker-p2p) - `POST /ogrepository/v1/images/run-tracker`
|
||||||
11. [Enviar una Imagen mediante UDPcast](#enviar-una-imagen-mediante-udpcast) - `POST /ogrepository/v1/images/send-udpcast`
|
11. [Iniciar el Seeder P2P](#iniciar-el-seeder-p2p) - `POST /ogrepository/v1/images/run-seeder`
|
||||||
12. [Enviar una Imagen mediante UFTP](#enviar-una-imagen-mediante-uftp) - `POST /ogrepository/v1/images/send-uftp`
|
12. [Enviar una Imagen mediante UDPcast](#enviar-una-imagen-mediante-udpcast) - `POST /ogrepository/v1/images/send-udpcast`
|
||||||
13. [Ver Estado de Transmisiones Multicast-P2P](#ver-estado-de-transmisiones-multicast-p2p) -
|
13. [Enviar una Imagen mediante UFTP](#enviar-una-imagen-mediante-uftp) - `POST /ogrepository/v1/images/send-uftp`
|
||||||
14. [Cancelar Transmisión Multicast-P2P](#cancelar-transmisión-multicast-p2p) -
|
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
|
### 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 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**".
|
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`
|
**URL:** `/ogrepository/v1/images/check-image`
|
||||||
**Método HTTP:** GET
|
**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 400 Bad Request:** No se ha encontrado la imagen especificada.
|
||||||
- **Código 200 OK:** Los archivos se han creado exitosamente.
|
- **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
|
### Iniciar el Tracker P2P
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------------------------------
|
Loading…
Reference in New Issue