Mostrar los tags: if

Mostrando del 1 al 10 de 104 coincidencias
<<>>
Se ha buscado por el tag: if
Imágen de perfil
Actualizado

Generador de gifs a partir de video (nueva version)


Python

estrellaestrellaestrellaestrellaestrella(1)
Actualizado el 12 de Abril del 2025 por Antonio (77 códigos) (Publicado el 29 de Enero del 2024)
11.131 visualizaciones desde el 29 de Enero del 2024
Programa para generar gifs animados a partir de vídeos, que se ejecuta en la línea de comandos.
ARGUMENTOS:
-src/--source: Nombre del vídeo original (obligatorio).
-dest/--destination: Nombre del archivo a generar (opcional).
-sz/--size: Tamaño en porcentaje del gif respecto al vídeo original (opcional).
-shw/--show: Muestra resultado en ventana emergente al finalizar el proceso de generado (opcional).
-st/--start: Segundo inicial para gif (opcional).
-e/--end: Segundo final (opcional).
-spd/--speed: Velocidad relativa de la animación (opcional)

PARA CUALQUIER DUDA U OBSERVACIÓN, USEN LA SECCIÓN DE COMENTARIOS.

imagge
Imágen de perfil

Canales wifi.


Python

Publicado el 3 de Octubre del 2024 por Hilario (144 códigos)
441 visualizaciones desde el 3 de Octubre del 2024
EJEMPLOS DE SALIDAS POR CONSOLA LINUX.
******************************************************************************
Captura-de-pantalla-de-2024-10-02-23-09-32
Captura-de-pantalla-de-2024-10-02-23-09-47
Captura-de-pantalla-de-2024-10-02-23-13-32

*********************************************************************************
********************************************************************************


Ejercicio.
<<<<<<<<<
Aula_28_canales_wifi.py
*****+++++++++++++++++++++++*****



Proponemos hoy como trabajo de recuperación para el aula 28, un ejercicio en phython, que realiza la identificacion del número de los canales de cada usuario -SSID-, así como la frecuencia de emisión de cada uno.

Este ejercicio fue realizado bajo plataforma linux, en concreto con Ubuntu 20.04.6 LTS, y ejecutado bajo consola

Antes de pasar a la prática vamos a describir que son los canales de emisión de una wifi.
Para entendernos, los canales de emisión de una red WiFi son como, digamos, "caminos" por donde viajan las señales inalámbricas entre el router y los dispositivos conectados. El espectro de frecuencia del WiFi (como las bandas de 2.4 GHz y 5 GHz) se divide en varios canales, y cada uno es un rango específico de frecuencias.

En la banda de 2.4 GHz, hay 14 canales (aunque no todos se usan en todos los países), y estos canales se superponen entre sí, lo que puede causar interferencias si muchas redes están en canales cercanos.
En la banda de 5 GHz, hay más canales y están mejor separados, lo que reduce las interferencias.
El router elige un canal para transmitir, y algunos dispositivos pueden cambiar automáticamente al canal menos congestionado.

Por lo tanto, los canales de emisión de una WiFi son divisiones dentro de las bandas de frecuencia que usan los dispositivos para transmitir datos de forma inalámbrica. Las bandas más comunes, como digimos anteriormente, son 2.4 GHz y 5 GHz, cada una dividida en varios canales de ancho de banda específico.


Banda de 2.4 GHz:
*****************

Está subdividida en 14 canales de 20 MHz de ancho, aunque no todos se usan en todos los países.
Los canales se solapan, excepto los canales 1, 6 y 11 (en la mayoría de los países), que son no superpuestos, lo que significa que no interfieren entre sí.
Interferencia: Debido a la superposición de canales, el uso de canales adyacentes puede causar interferencias, reduciendo la calidad de la conexión y la velocidad.

Banda de 5 GHz:
**************

Tiene más canales y están separados en intervalos de 20 MHz (36, 40, 44, 48, etc.), lo que reduce la interferencia entre ellos.
Algunos routers permiten el uso de canales de ancho de banda más amplio (40 MHz, 80 MHz e incluso 160 MHz), lo que mejora la velocidad al aumentar la cantidad de datos que pueden transmitirse en menos tiempo, aunque también aumenta el riesgo de interferencia si hay muchas redes cercanas.
Selección de canales:
En redes congestionadas, es ideal elegir canales no superpuestos o menos ocupados.
Muchos routers tienen la capacidad de seleccionar automáticamente el mejor canal, basándose en la congestión del espectro.
Además, el estándar WiFi moderno (802.11ac y 802.11ax) optimiza el uso del espectro y la selección de canales para mejorar el rendimiento y la eficiencia de la red.

-----------------------------------------------------------------------------------------
En el ejercicio propuesto, importamos el módulo import pywifi. Que deberemos tener instalado en nuestra plataforma linux con este comando:

python3 -m pip install pywifi


Bien, ahora explicaremos poco esto, pywifi es un módulo de Python que permite interactuar con adaptadores de red WiFi en sistemas operativos compatibles, como Linux y Windows. Con pywifi, puedes gestionar conexiones inalámbricas, escanear redes WiFi cercanas y conectarte o desconectarte de redes de manera programática.

Funcionalidades principales de pywifi:
*************************************

Escaneo de redes: Puedes utilizar pywifi para escanear las redes WiFi disponibles en el área, obteniendo detalles como el nombre de la red (SSID), la calidad de la señal y el tipo de cifrado.

Conexión a redes WiFi:
*********************

Permite conectarse a una red WiFi específica proporcionando los detalles correctos como SSID y contraseña.

Desconexión:
***********

Puedes desconectarte de cualquier red WiFi conectada actualmente usando el módulo.

Control de interfaces:
**********************

El módulo permite gestionar las interfaces de red WiFi disponibles, seleccionando la que desees usar si tienes varias interfaces WiFi en tu dispositivo.

Estados de conexión:
*******************

pywifi ofrece la capacidad de consultar el estado actual de la conexión WiFi, ya sea si estás conectado, desconectado o en proceso de conexión.

Tipos de autenticación y cifrado: Soporta la autenticación con diferentes protocolos como WPA, WPA2 y los tipos de cifrado como TKIP y AES.

Clases y métodos clave:
**********************

PyWiFi(): Es la clase principal que crea una instancia de controlador WiFi.
WiFiScan(): Permite realizar escaneos para descubrir redes WiFi cercanas.
WiFiProfile(): Esta clase se usa para definir los parámetros necesarios para conectarse a una red, como SSID, modo de autenticación y la clave de cifrado.
connect() y disconnect(): Métodos para iniciar o finalizar una conexión WiFi.
*****************************************************************************************
Pasamos ahora a describir el programa:
*************************************
////////////////////////////////////
1. Importaciones:
----------------

import pywifi
import time
pywifi: Módulo que proporciona funciones para interactuar con interfaces WiFi.
time: Módulo de Python que se usa aquí para hacer pausas y permitir que el escaneo de redes se complete.

2. Función scan_wifi():
----------------------
def scan_wifi():
wifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0] # Obtiene la primera interfaz WiFi
iface.scan() # Inicia el escaneo
time.sleep(2) # Espera un momento para que el escaneo se complete
scan_results = iface.scan_results() # Obtiene los resultados del escaneo
return scan_results
wifi = pywifi.PyWiFi(): Crea una instancia del controlador de WiFi.
iface = wifi.interfaces()[0]: Obtiene la primera interfaz WiFi disponible en el dispositivo (por ejemplo, la tarjeta de red WiFi).
iface.scan(): Inicia un escaneo para buscar redes WiFi cercanas.
time.sleep(2): Pausa la ejecución durante 2 segundos, lo cual es necesario para dar tiempo a que el escaneo se complete.
scan_results = iface.scan_results(): Recupera los resultados del escaneo, que incluye detalles de las redes cercanas (SSID, frecuencia, etc.).
return scan_results: Devuelve la lista de redes WiFi detectadas.

3. Función main():
-----------------
def main():
networks = scan_wifi()
print(f"Se encontraron {len(networks)} redes WiFi.")
networks = scan_wifi(): Llama a la función scan_wifi() para obtener la lista de redes WiFi disponibles.
print(f"Se encontraron {len(networks)} redes WiFi."): Imprime la cantidad de redes WiFi detectadas.

4. Inicialización de contadores para 2.4 GHz y 5 GHz:
----------------------------------------------------
count_24ghz = 0
count_5ghz = 0
Se crean dos contadores (count_24ghz y count_5ghz) para llevar la cuenta de cuántas redes operan en la banda de 2.4 GHz y cuántas en la de 5 GHz.

5. Bucle para recorrer las redes detectadas:
------------------------------------------

for network in networks:
print(f"SSID: {network.ssid}, Frecuencia: {network.freq} MHz")
for network in networks: Itera a través de cada red detectada en el escaneo.
print(f"SSID: {network.ssid}, Frecuencia: {network.freq} MHz"): Imprime el nombre de la red (SSID) y la frecuencia de operación (en MHz) de cada red.

6. Determinación de la banda y cálculo del canal:
-----------------------------------------------
if network.freq < 2500:
channel = (network.freq - 2400) // 5 + 1 # Calcular el canal para 2.4 GHz
count_24ghz += 1
else:
channel = (network.freq - 5000) // 20 + 36 # Calcular el canal para 5 GHz
count_5ghz += 1
if network.freq < 2500: Si la frecuencia es menor a 2500 MHz, se asume que la red opera en la banda de 2.4 GHz.

channel = (network.freq - 2400) // 5 + 1: Se calcula el canal correspondiente restando 2400 MHz a la frecuencia y dividiendo por 5. Este cálculo es una aproximación para determinar el canal en la banda de 2.4 GHz.
count_24ghz += 1: Se incrementa el contador de redes de 2.4 GHz.
else: Si la frecuencia es mayor o igual a 2500 MHz, se asume que la red opera en la banda de 5 GHz.

channel = (network.freq - 5000) // 20 + 36: Se calcula el canal restando 5000 MHz a la frecuencia y dividiendo por 20, ya que los canales en 5 GHz están más espaciados. El valor 36 se suma porque es el primer canal en la banda de 5 GHz.
count_5ghz += 1: Se incrementa el contador de redes de 5 GHz.
print(f"Canal: {channel}"): Imprime el canal calculado para la red actual.

7. Impresión del resumen de redes por banda:
------------------------------------------
print(f"Redes en 2.4 GHz: {count_24ghz}")
print(f"Redes en 5 GHz: {count_5ghz}")
Después de iterar sobre todas las redes, se imprime el número de redes detectadas en las bandas de 2.4 GHz y 5 GHz.

8. Ejecución del programa:
--------------------------
if __name__ == "__main__":
main()
Esta línea se asegura de que la función main() se ejecute cuando el script es ejecutado directamente (no cuando se importa como un módulo).
Resumen:
Este programa escanea las redes WiFi disponibles y muestra la cantidad de redes encontradas. Luego, para cada red, muestra su SSID (nombre), la frecuencia de operación (en MHz) y el canal correspondiente. Finalmente, cuenta y muestra cuántas redes operan en las bandas de 2.4 GHz y 5 GHz.
***********************************************************************************************

Ejecución.
*********
Para su ejecución utilizaremos este comando bajo la consola de linux. Debereis de tener en cuanta la ruta que utiliceis al directorio donde hagais vuestro programa.
Tener en cuenta que debereis ejecutarlo bajo root, utilizando sudo.
Este es el comando:

sudo -E python3 /home/margarito/python/Aula_28_canales_wifi.py

Como veis en este comando, utilizamos la opción -E, el comando lleva la orden python3, la ruta, y el nombre que le deis al programa.
Imágen de perfil

Quién está en nuestra WIFI


Python

estrellaestrellaestrellaestrellaestrella(1)
Publicado el 29 de Septiembre del 2024 por Hilario (144 códigos)
404 visualizaciones desde el 29 de Septiembre del 2024
Captura-de-pantalla-de-2024-09-29-11-50-29

----------------------------------------------------------------------------------------------------------
En este ejemplo, vamos a realizar una propuesta de estudio para el Aula 18, sobre desarrollo de programación, para crear un programa en Python que determine, qué usuarios o dispositivos están conectados a tu red Wi-Fi, en un sistema operativo Linux (como Ubuntu), podemos usar una combinación de herramientas de red disponibles en Linux, como arp-scan o nmap.

Aquí te dejo un ejemplo básico que utiliza arp-scan, una herramienta que escanea la red en busca de dispositivos conectados.
********************************************************************
En este ejemplo iremos describiendo paso a paso, el proceso de creación de
nuestro programa.
-------------------------------------------------------------------------
Pasos para instalar y usar el script:
Instalar arp-scan: Primero, debes instalar la herramienta arp-scan si no la tienes en tu sistema. Abre una terminal y ejecuta:

sudo apt-get install arp-scan
Crear el programa en Python:

Crea un archivo Python con el siguiente código, por ejemplo, llámalo Ejercicio_Aula_Sep_29.py:


Nota:
Necesitas tener privilegios de root para usar arp-scan, de ahí que el script deba ejecutarse con sudo.
Este es un método sencillo para obtener información de los dispositivos conectados a la misma red Wi-Fi.

Para incluir el nombre de la interfaz de red del terminal (como wlan0, eth0, etc.), podemos hacer que el programa detecte automáticamente la interfaz de red que está en uso para conectarse a la red Wi-Fi. Esto es necesario ya que arp-scan puede requerir que especifiques la interfaz de red correcta en lugar de asumirlo por defecto.

También podemos usar el comando ip link para listar las interfaces de red y determinar cuál está activa.

Otra cosa que podemos hacer es modificar el programa para que, cuando sea necesario ejecutar sudo, no tengas que invocar el script desde la línea de comandos con sudo. En su lugar, el propio programa pedirá la contraseña de superusuario automáticamente si no se está ejecutando con privilegios de administrador.

Python tiene una librería llamada os que permite verificar si el programa se está ejecutando como root. Si no es así, podemos utilizar sudo para ejecutar el propio script.


Verifica si el script está siendo ejecutado con permisos de superusuario usando os.geteuid().
Si no se está ejecutando con permisos de root (es decir, si el identificador de usuario efectivo no es 0), el programa se reiniciará automáticamente con sudo.
Usa subprocess.run(['sudo', 'python3'] + sys.argv) para reejecutar el script actual con sudo. Esto mantiene cualquier argumento que hayas pasado al script.
Lógica del programa:

El script primero comprueba si tiene privilegios de superusuario usando check_sudo().
Si no es así, se reinicia automáticamente con sudo para obtener los permisos necesarios y ejecutar el comando arp-scan correctamente.
Después de obtener los permisos adecuados, continúa con el flujo normal: obtener la interfaz de red y ejecutar el escaneo de dispositivos.
Ejecución del script:
Ahora puedes ejecutar el script sin tener que usar sudo manualmente:


Este enfoque es útil cuando quieres asegurarte de que el script siempre tenga privilegios adecuados para ejecutar comandos que requieren permisos elevados, como arp-scan.


Se utiliza getpass.getpass() para solicitar la contraseña de sudo al usuario de forma segura (sin que la contraseña se muestre en la pantalla).
Opción -S de sudo:

Se ha añadido la opción -S al comando sudo en subprocess.run(). Esto permite que sudo acepte la contraseña desde la entrada estándar (stdin) en lugar de solicitarla directamente a través de la terminal.
Enviar la contraseña a stdin:

La contraseña introducida por el usuario se pasa a través del parámetro input de subprocess.run(), que envía la contraseña directamente al comando sudo.

Flujo del programa:

Si el script detecta que no tiene permisos de superusuario, solicitará la contraseña y reejecutará el script automáticamente con sudo, utilizando la contraseña ingresada por el usuario.
Ejecución del script:
Puedes ejecutar el script sin sudo como antes, y se pedirá la contraseña si es necesario:


Cuando se soliciten permisos de superusuario, el script pedirá la contraseña en la terminal. Si la contraseña es correcta, se volverá a ejecutar el script con los permisos adecuados.

Nota:
Este enfoque es útil para evitar tener que ejecutar el script directamente con sudo, y también para mejorar la seguridad al no dejar la contraseña visible.


Una solución simple es asegurarse de que el script se está ejecutando directamente desde una terminal interactiva real. Pero si deseas que la entrada de la contraseña funcione correctamente en cualquier contexto, puedes usar una combinación de herramientas para evitar este error. Una opción es hacer que el propio comando sudo solicite la contraseña en lugar de gestionarla mediante getpass.


Ya no solicitamos manualmente la contraseña usando getpass. En lugar de eso, simplemente dejamos que sudo maneje la solicitud de la contraseña en la terminal.
Ejecutar con sudo:

Si el script no se está ejecutando como superusuario, se reiniciará automáticamente con sudo (sudo python3 script.py), y sudo pedirá la contraseña al usuario de manera normal. Esto evita problemas relacionados con la entrada de contraseña a través de getpass en ciertos entornos.

Flujo del programa:

El script verifica si tiene permisos de superusuario y, si no es así, se reinicia con sudo, permitiendo que sudo maneje la interacción con el usuario para la contraseña.
Ejecución del script:
Puedes ejecutar el script como de costumbre, sin sudo, y el programa pedirá la contraseña automáticamente cuando sea necesario:

Puesdes poner en el bash de tu consola
Copiar código
python3 Ejercicio_Aula_Sep_29.py
Si no tienes permisos de superusuario, sudo te pedirá la contraseña de forma normal, como lo haría en cualquier comando de terminal.


Nota:
Este enfoque garantiza que la entrada de la contraseña sea gestionada directamente por sudo, lo que evitará problemas con el manejo de la contraseña en diferentes entornos.


Cuando ejecutas el comando con sudo, el sistema te pedirá la contraseña de superusuario antes de ejecutar el script. Dado que ya estás ejecutando el script con permisos elevados, no necesitarás incluir la lógica para reiniciar el script con sudo dentro del código.

Simplificación del código si usas sudo directamente
Si prefieres siempre ejecutar el script directamente con sudo, puedes simplificar el código y eliminar la verificación de superusuario. Aquí te dejo una versión simplificada del programa, ya que no necesitas verificar si el script tiene permisos de root (esto será garantizado por el uso de sudo en la terminal):



bash
Copiar código
sudo python3 Ejercicio_Aula_Sep_29.py
Este enfoque es más sencillo si ya estás acostumbrado a ejecutar comandos que requieren permisos de superusuario.

Nota:
Importante comprobar otra vez: Asegúrate de que tienes instalada la herramienta arp-scan en tu sistema, ya que es esencial para este programa. Puedes instalarla ejecutando:


bash
Copiar código
sudo apt-get install arp-scan
Ahora que ejecutas el script con sudo desde el principio, no tendrás problemas relacionados con permisos.

En caso de problemas.
Es extraño que al ejecutar el script con sudo no obtengas ningún resultado, ya que el uso de sudo debería garantizar que arp-scan tenga los permisos necesarios para funcionar correctamente. Sin embargo, podrían estar ocurriendo algunos problemas que podemos revisar:

Posibles causas:
arp-scan no está instalado: Asegúrate de que la herramienta arp-scan está instalada. Si no lo está, puedes instalarla con:

bash
Copiar código
sudo apt-get install arp-scan
Interfaz de red incorrecta: Puede que la interfaz que el script detecta no sea la correcta (por ejemplo, si estás conectado a través de Wi-Fi pero detecta una interfaz Ethernet). Verifica que la interfaz detectada sea la que está en uso.

Para confirmar qué interfaz de red estás usando, también puedes ejecutar manualmente:

bash
Copiar código
ip link
Asegúrate de que la interfaz que está en "estado UP" (activa) es la que quieres escanear. Si no es la correcta, podemos modificar el código para especificar manualmente la interfaz.


bash
Copiar código
sudo arp-scan -I INTERFAZ -l
Reemplaza INTERFAZ por el nombre de tu interfaz de red activa (por ejemplo, wlp3s0 si es Wi-Fi).

Permisos de sudo en el script: A veces, sudo puede no pasar bien la contraseña o no funcionar adecuadamente dentro de un script. Si este es el caso, prueba ejecutando todo manualmente para asegurarte de que el problema no esté en la interacción con sudo.

Ajustes al script:
Vamos a ajustar el script para que imprima más información de depuración, lo que nos ayudará a identificar el problema exacto.


Ejecuta este código modificado para que imprima más detalles de depuración, como la salida del comando ip link. Esto nos permitirá verificar qué interfaz está detectando.

Si el script detecta la interfaz incorrecta o ninguna interfaz, revisa el comando ip link para asegurarte de que tienes la interfaz correcta en estado "UP".

Prueba arp-scan manualmente en la terminal con la interfaz correcta:

bash
Copiar código
sudo arp-scan -I INTERFAZ -l
Si arp-scan manualmente funciona bien, pero el script no, entonces es posible que haya un problema en cómo el script maneja los comandos.

Análisis adicional, con estas preguntas puedes solucionar los errores, haceroslas en el Aula, siempre se aprende:
¿El script detecta correctamente tu interfaz de red?
¿La salida de arp-scan manual te muestra resultados?
Estos pasos nos ayudarán a depurar el problema.onales.

A continuacion os pongo una salida típica del comando hecha en la consola de mi portatil, hacerlo en el Aula:
sudo arp-scan -I wlo1 -l
Interface: wlo1, type: EN10MB, MAC: 1c:4d:70:0e:0e:fc, IPv4: 192.168.0.18
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.0.1 3c:98:72:2e:4f:f2 Sercomm Corporation.
192.168.0.19 64:66:24:aa:34:b6 Sagemcom Broadband SAS
192.168.0.13 7e:cb:c5:38:37:f0 (Unknown: locally administered)


Dado que el comando arp-scan funciona perfectamente cuando lo ejecutas manualmente en la terminal pero no dentro del programa Python, es probable que el problema esté relacionado con cómo el script maneja la salida de arp-scan. Puede haber varios factores que están afectando la forma en que el programa ejecuta arp-scan o captura su salida.


Al eliminar la captura de salida para que puedas ver directamente los resultados en la terminal en lugar de capturarlos en el script.
Usa subprocess.Popen en lugar de subprocess.run para tener un control más fino sobre cómo se maneja la salida.

Cambios realizados:
subprocess.Popen:
Usamos subprocess.Popen en lugar de subprocess.run para ejecutar arp-scan y leer la salida en tiempo real. Esto nos da más control sobre cómo se captura y procesa la salida.
Impresión en tiempo real:
Ahora el programa imprime la salida directamente en la terminal mientras se ejecuta arp-scan, tal como sucede cuando ejecutas el comando manualmente. Esto debería darte los mismos resultados que ves cuando lo ejecutas en la terminal.

Ejecución:
Guarda este nuevo código en tu archivo Ejercicio_Aula_Sep_29.py

Ejecuta el programa con sudo:

bash
Copiar código
sudo python3 Ejercicio_Aula_Sep_29.py
Qué esperar:
Ahora, deberías ver la salida de arp-scan directamente en la terminal, tal como sucede cuando lo ejecutas manualmente. Esto debería ayudarte a identificar si hay algún problema con la captura de la salida o la ejecución dentro del programa Python.



También podemos modificar el código para que sudo lea la contraseña desde la entrada estándar (-S), lo que permitirá que el programa te pida la contraseña y la pase correctamente a sudo.


Opción sudo -S:
Ahora el comando sudo usa la opción -S, que permite que la contraseña sea leída desde la entrada estándar (stdin).
Manejo de la contraseña:
Utilizamos la función getpass.getpass() para solicitar la contraseña del usuario de forma segura sin que se muestre en pantalla.
La contraseña se pasa al proceso sudo a través de process.communicate().
Pasos para ejecutar:
Guarda el script Ejercicio_Aula_Sep_29.py


Ejecuta el script sin sudo porque el propio script manejará la contraseña:

bash
Copiar código
python3 Ejercicio_Aula_Sep_29.py

¿Qué esperar?
El programa te pedirá que ingreses tu contraseña de sudo.
Una vez ingresada la contraseña, el comando arp-scan debería ejecutarse correctamente y mostrar los dispositivos conectados a la red.
Ahora podemos probar estos, queridos alunmnos para mirar si funcionan las modificaciones.
----------------------------------------------------------------------
----------------------------------------------------------------------
VAMOS A COLOCAR AQUI EL CODIGO FINAL, DESPUES DE TODAS LAS MODIFICACIONES REALIZADAS-
******************************************************************
import subprocess
import re
import getpass

def get_network_interface():
try:
# Ejecutar 'ip link' para obtener las interfaces de red
print("Ejecutando 'ip link' para obtener la interfaz de red...")
result = subprocess.run(['ip', 'link'], capture_output=True, text=True)

if result.returncode != 0:
print("Error al ejecutar ip link:", result.stderr)
return None

# Imprimir la salida completa para depuración
print("Salida completa de 'ip link':")
print(result.stdout)

# Usar una expresión regular para encontrar interfaces que estén activas (estado UP)
interfaces = re.findall(r'\d+: (\w+):.*state UP', result.stdout)

if interfaces:
# Retornar la primera interfaz que esté en estado UP
return interfaces[0]
else:
print("No se encontraron interfaces de red activas.")
return None

except Exception as e:
print(f"Error al obtener la interfaz de red: {e}")
return None

def scan_network(interface):
try:
# Pedir la contraseña del superusuario
password = getpass.getpass("Introduce la contraseña de sudo: ")

# Ejecutar el comando 'arp-scan' especificando la interfaz con sudo -S
print(f"Ejecutando 'arp-scan' en la interfaz {interface}...")

# Usar subprocess.Popen para pasar la contraseña al comando sudo
process = subprocess.Popen(['sudo', '-S', 'arp-scan', '-I', interface, '-l'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True)

# Pasar la contraseña al proceso
stdout, stderr = process.communicate(input=password + '\n')

# Imprimir la salida del escaneo
if process.returncode == 0:
print("Dispositivos conectados a la red:")
print(stdout)
else:
print(f"Error al ejecutar arp-scan: {stderr}")

except Exception as e:
print(f"Hubo un error al escanear la red: {e}")

if __name__ == "__main__":
print("Obteniendo la interfaz de red activa...")
interface = get_network_interface()

if interface:
print(f"Interfaz de red activa: {interface}")
print("Escaneando dispositivos conectados a la red Wi-Fi...")
scan_network(interface)
else:
print("No se encontró ninguna interfaz de red activa. Verifica tu conexión.")


********************************************************************
GRACIAS, NOS VEREMOS EN EL AULA.
Imágen de perfil

Generador de gifs a partir de video, en línea de comandos.


Python

estrellaestrellaestrellaestrellaestrella(6)
Actualizado el 26 de Agosto del 2024 por Antonio (77 códigos) (Publicado el 9 de Diciembre del 2022)
11.207 visualizaciones desde el 9 de Diciembre del 2022
Programa para generar gifs animados a partir de vídeos, que se ejecuta en la línea de comandos.
ARGUMENTOS:
-src/--source: Nombre del vídeo original (obligatorio).
-dest/--destination: Nombre del archivo a generar (opcional).
-sz/--size: Tamaño en porcentaje del gif respecto al vídeo original (opcional).
-shw/--show: Muestra resultado en ventana emergente al finalizar el proceso de generado (opcional).
-st/--start: Segundo inicial para gif (opcional).
-e/--end: Segundo final (opcional).
-spd/--speed: Velocidad relativa de la animación (opcional)

PARA CUALQUIER DUDA U OBSERVACIÓN, USEN LA SECCIÓN DE COMENTARIOS.

mk
Imágen de perfil

Suavizado de imagen en archivos de vídeo por 'Filtrado bilateral', (aplicación en línea de comandos)


Python

estrellaestrellaestrellaestrellaestrella(2)
Actualizado el 23 de Mayo del 2024 por Antonio (77 códigos) (Publicado el 20 de Marzo del 2023)
7.669 visualizaciones desde el 20 de Marzo del 2023
Programa para realizar filtrado de imagen en archivos de vídeo (preferiblemente de corta duración) utilizando el algoritmo de 'filtrado bilateral' pudiendo especificar los valores sigma de espacio y color y el diámetro del vecindario para cada pixel. Los vídeos filtrados se generan, por defecto, conservando su sonido, aunque se pueden generar sin este introduciendo el argumento '-ae'/'--exclude_audio'.

ARGUMENTOS:
-src/--source: Nombre del vídeo original (OBLIGATORIO)
-dest/--destination: Nombre del video a generar ('NewFilteredVid.mp4' por defecto)
-sgc/--sigma_color: Valor sigma para espacio de color (75 por defecto)
-sgs/--sigma_space: Valor sigma espacial (75 por defecto)
-pd/--pixel_diameter: Diámetro de la vecindad de píxeles (9 por defecto)
-ae/--exclude_audio: Excluir audio y generar video sin sonido (OPCIONAL)

PARA CUALQUIER DUDA U OBSERVACIÓN UTILIZEN LA SECCIÓN DE COMENTARIOS
bvf
bvf2
bvf3
bvf4
Imágen de perfil

Crear modelo con datos CIFAR 10.


Python

Publicado el 20 de Enero del 2024 por Hilario (144 códigos)
449 visualizaciones desde el 20 de Enero del 2024
gato
Figure_1

PREGUNTA DEL EJERCICIO.
------------------------------------------
Considerando que tengo que entrenar mi modelo con datos Cifar 10, Guardandolo en esta ruta:'/home/margarito/python/Mi_Modulo_Hilario.h5'.

Necesito crear un test python -basandonos en el modelo:/Mi_Modulo_Hilario.h5, para determinar la clase de esta imagen que esta en esta ruta:/home/margarito/python/gato.jpg.
Para el ejercicio debes de considerar que el archivo de datos Cifar 10, abarca las siguientes clases:


clase 0: airplane
clase 1: automobile
clase 2: bird
clase 3: cat
clase 4: deer
clase 5: dog
clase 6: frog
clase 7: horse
clase 8: ship
clase 9: truck

En el ejercicio se deberá decir de que clase es la imagen del test.
También se deberá de visualizar la imagen_array), en que te basas para hacer dicha predicción.
***************************************************************************************************************
Bien, podríamos plantear una estructura básica del proyecto como sigue:

Como podría ser una estructura del Proyecto:

Proyecto_Mi_CNN/

├── cifar-10/
│ ├── data_batch_2
│ └── ...

├── src/
│ ├── __init__.py
│ ├── train_model.py
│ └── test_model.py

└── Mi_Modulo_Hilario.h5

--------------------------------------------------------------------------

Para descargar los datos de imagenes Cifar 10, podeis utilizar este enlace:
https://www.cs.toronto.edu/~kriz/cifar.html

Se abrirá un pequeño manual explicativo, y desde el mismo se verán todas las opciones de descarga,
así como el tipo de datos para generar modelos que abarca Cifar 10.
*******************************************************************************************************************
Este ejercicio ha sido realizado bajo platadorma Linux.
Ubuntu 20.04.6 LTS.
Editado con sublime Text.
-------------------------------------------------------------------------------------------------------------
Para la ejecución correcta del programa en Python debereis tener cargadas para importar,
estas librerías:

import tensorflow as tf
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import load_model
import numpy as np
import matplotlib.pyplot as plt
Imágen de perfil

ESNIFFER.


C/Visual C

Publicado el 21 de Junio del 2023 por Hilario (144 códigos)
5.574 visualizaciones desde el 21 de Junio del 2023
Amare et sapere vix deo conceditur.
**********************************************************
Hilario Iglesias Martínez.
*********************************************************

Este programa realizado en lenguaje ANSI C, bajo consola en plataforma LINUX Ubuntu 20.04.6 LTS.
******************************************************************************************
Realiza el esnifado de paquetes de la red wifi, detectando previamente el dispositivo de red
y los datos básicos del paquete.

-También puedes saber tus dispositivos de red utilizando el comando bajo consola ifconfig-.

Detecta las características básicas del paquete, y reproduce por consola, la disposición
en exadecimal y en código ASCII.

----------------------------------------------------------------------------------------------------------------------------

Este programa utiliza la biblioteca libpcap para capturar paquetes de red en tiempo real.
Por lo tanto deberás tenerla instalada en el sistema.

Instala libpcap ejecutando el siguiente comando:
sudo apt install libpcap-dev
Una vez que la instalación se haya completado, puedes verificar que libpcap esté instalado correctamente ejecutando el siguiente comando:
pcap-config --version

--------------------------------------------------------
Conpilar el programa con este comando.
gcc -Werror programa.c -o programa -lpcap

Ejecutar el programa con este comando.
sudo ./programa

Como se ve hay que utilizar sudo para su ejecución
ya que es necesario tener privilegios de root
**********************************************
Imágen de perfil

WIFI


C/Visual C

Actualizado el 17 de Junio del 2023 por Hilario (144 códigos) (Publicado el 15 de Junio del 2023)
520 visualizaciones desde el 15 de Junio del 2023
Códico que analiza entorno wifi, de interfaces de red encontradas, llamando a
la estructura struct ifconf.

Compilación bajo consola Linux.
gcc -Werror wifi.c -o wifi

Ejecución bajo consola linux.
./wifi

Ejemplo de salida tras la ejecución.
Interfaces de red encontradas: 3
Interfaz 1: wlp1s0
Dirección IP: 127.0.0.1
Interfaz 2: wlp1s0
Dirección IP: 192.168.0.29
Interfaz 3: wlp1s0
Dirección IP: 192.168.0.26
sin imagen de perfil

Inicio Sesion Robusto Implementando doble factor


PHP

Publicado el 29 de Diciembre del 2022 por Jefferson (11 códigos)
3.112 visualizaciones desde el 29 de Diciembre del 2022

Implementa un sistema mas robusto para el inicio de sesión



in


1) Registro de usuario verificando el email. Encriptando la url de tal forma que sea ilegible por algún pirata.

2) Al registrase le enviaremos al correo la imagen QR para que pueda ser escaneada por su smartphone / teléfono inteligente y agregar a la app de AUTENTIFICACION DOBLE FACTOR que el usuario escoja de la tienda STORE.

3) Libertad para que el usuario cree su propia pregunta de seguridad y la respuesta. Solo el usuario podrá formular su pregunta secreta escudriñando en sus recuerdos y que solo él sepa la respuesta.

4) Recuperación del password por olvido en el mismo sistema, dado que al escribir el email le devolvemos la pregunta de seguridad.

5) Recuperación por si acaso cambia su smartphone / teléfono inteligente y pierde la app móvil de AUTENTIFICACIÓN DOBLE FACTOR, enviándole a su correo la nueva imagen QR para el nuevo registro.

6) El usuario admin cuya password es admin, tendrá libertad de permitir o rechazar al usuario recién registrado.

7) El sistema funciona con cualquier app de AUTENTIFICACIÓN DOBLE FACTOR disponibles en la STORE. (No lo probé con Iphone).


allsmall