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`
|
||||
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
|
||||
|
||||
|
|
|
@ -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