domingo, 1 de abril de 2018

Módulos de sistema en Python - OS

Python nos tiene en su librería estándar algunos módulos de sistema de lo cuales podemos destacar tres: os, sys y subprocess.

Estos módulos nos permiten acceder a funcionalidades para conocer el entorno en el que nos encontramos, manejar los directorios, información sobre el interprete, ordenes del sistemas operativo. Para el día de hoy hare unos ejemplos sobre el modulo OS.

Módulo OS

El módulo os nos permite acceder a funcionalidades dependientes del Sistema Operativo. Sobre todo, aquellas que nos refieren información sobre el entorno del mismo y nos permiten manipular la estructura de directorios.

Archivos y directorios

En este modulo tenemos funcionalidades para manejar archivos y obtener información sobre ello, aqui un ejemplo que contiene algunas funciones principales (para mas información pueden ver la documentación aqui).

Pueden ver el código completo en github, hice un ejemplo en el cual el programa realiza lo siguiente:


  1. Obtengo el directorio actual.
  2. Luego creo un nuevo directorio con permisos solo de lectura y escritura.
  3. El programa intenta cambiar al nuevo directorio creado.
  4. Por ultimo como no puede cambiar su ubicación, le da al directorio creado los permisos de ejecución para de nuevo intentar cambiar con éxito al nuevo directorio.

Veamos:





cambiar_ubicacion(path_rel): cambia al directorio pasado como parametro, utiliza las siguientes funciones.

  •  os.access(path, permisos) : nos permite saber si un archivo o directorio tiene el permiso indicado. El primer parámetro es la ubicación del directorio o archivo, el segundo parámetro pueden ser las siguientes variables:

    - os.F_OK (devuelve True si existe)
    - os.R_OK (devuelve True si tiene permiso de lectura)
    - os.W_OK (devuelve True si tiene permiso de escritura)
    - os.X_OK (devuelve True si tiene permiso de ejecución)
  • os.chdir(path): nos permite cambiar al directorio que se le pasa como parámetro, retorna error en caso que no exista o no se puede cambiar a dicho directorio.
mostrar_permisos(path_rel): evalúa los diferentes permisos mencionados anteriormente.

Ademas se utilizan otras funciones como:

os.getcwd(): retorna el directorio actual.

os.path.abspath(path): retorna la ruta absoluta de la ubicación indicada como parámetro. Si le pasas un ".", indica que es el directorio actual.

os.mkdir(path,permisos): crea un directorio en la ruta indicada como primer parámetro, esta ruta puede ser relativa o absoluta, es decir, puede indicar la ruta desde la raíz o desde la ubicación actual. Los permisos se indican de forma octal (0600 indica permisos de lectura y escritura para el usuario actual).

os.chmod(path, permisos): modifica los permisos del archivo o directorio indicado en el primer parámetro, los permisos se pueden indicar con el modulo stat, el parametro S_IXUSR indica permisos de ejecución para el usuario actual, para mas información pueden ver aqui.

Variables de entorno

El módulo os también nos provee de un diccionario con las variables de entorno relativas al sistema. Se trata del diccionario environ:

import os

for variable, valor in os.environ.iteritems():

    print "%s: %s" % (variable, valor)

Path

El módulo os también nos provee del submódulo path (os.path) el cual nos permite acceder a ciertas funcionalidades relacionadas con los nombres de las rutas de archivos y directorios.

Entre las que mas destacan las podemos ver en esta imagen:


Para mas información pueden ver la propia documentación de Python en este enlace. Luego haré un ejemplo de los otros 2 módulos SYS y SUBPROCESS.

Enlaces:


domingo, 11 de febrero de 2018

Archivos Batch - Como extraer todos los perfiles y claves Wifi almacenadas

Los archivos Batch son archivos de procesamiento por lotes, en Windows tienen la extensión .bat y dentro del archivo contiene un conjunto de instrucciones, cualquiera comando que nosotros ejecutamos en consola puede ser utilizado en un archivo Batch ( tener en cuenta que hago referencia a los comandos de MS-DOS ). El uso de archivos batch tiene sus limitaciones a diferencia de Bash en Linux que tiene un uso aun mas robusto, en todo caso Windows a mejorado con Powershell, pero ese es otro tema.

Para el ejemplo del día de hoy, he generado una "herramienta" por decirlo, que realizara algunas funcionalidades como ejemplo en este caso como primer ejemplo será "Extraer perfiles con sus claves almacenados en nuestro adaptador de red" y como segundo caso será "Crear una red hospedada".

Si desean información o aprender sobre archivos Batch pueden encontrar guías y manuales al respecto en este enlace, en la sección Batch-Bash.

Cree un repositorio en GitHub para subir los archivos, pueden verlo aqui.

Creando un menú de opciones:

Lo primero que hice fue en crear un menú de opciones para cuestiones de orden y pues darle una apariencia a las herramientas que se utilizan actualmente.  Para realizarla solo es necesario saber algo de lógica de programación y algunos comandos como:

- title : cambia el titulo del programa
- echo : imprimir en pantalla
- rem : añadir un comentario
- if : condicional, se le puede añadir else
- pause : detiene el programa hasta una pulsación de tecla, luego continua su ejecución
- goto : salta hacia un bloque de instrucciones donde se inicializó (ejm: goto menu)
- exit : finaliza el archivo de procesamiento por lotes
- call : inicia un programa o comando y espera a que finalize para continuar con su ejecución
- start : inicia un programa o comando y continua su ejecución
- set : define una variable y su valor o se le puede asignar un valor ingresado por el usuario con /p





Para realizar el nombre tengo un programa realizado en C que me genera un AsciiArt ( texto a AsciiArt) que en algún momento lo subiré.

Bueno esta parte del programa lo que hace es obtener la variable de entrada que es la opción que seleccionas y rederigir a un bloque de instrucciones donde llamará al archivo que utilizaremos para realizar dicha opción seleccionada.


Iniciar Red Hospedada:

Cuando nosotros queremos iniciar otra red wifi, podemos utilizar una red hospeda, incluso podemos compartir nuestro internet a travez de ella, para mas detalles y de como funciona pueden ver este enlace. Lo que hice fue pasar los comandos que generalmente se ejecutan para iniciar la red hospedada a un archivo Batch: 

@echo off
title OldToolKit - Iniciar Red Hospedada
echo ----------------------------------------
set /p ssid=nombre de la red:
set /p clave=clave:
netsh wlan set hostednetwork mode=allow ssid=%ssid% key=%clave% keyUsage=persistent
echo Actualizando nuevos datos
netsh wlan start hostednetwork

Lo que hace estas instrucciones, es pedir como entrada un nombre para nuestra red Wifi y el segundo parámetro la clave de nuestra red wifi (recuerda que tiene que ser 8 caracteres o mas). Luego lo que hace es actualizar los datos de la red hospedada e inicializarla, para realizar estas instrucciones es necesario tener privilegios de administrador.

Extraer perfiles y claves :

La segunda funcionalidad que tendrá nuestra herramienta es para poder extraer todos los perfiles de red inalambrica a las que nos hemos conectado, con privilegios de administrador podemos extraer las claves, en caso de no tener privilegios de administrador, las claves se mostrara su respectiva codificación. Veamos:

echo Creando Directorio
if not exist \PROFILES-RED mkdir PROFILES-RED
cd PROFILES-RED
echo exportando...
netsh wlan export profile key=clear

En esta parte de instrucciones utilizamos if not exist (ejecuta la instrucción si no existe el archivo indicado) luego solo nos desplazamos a la carpeta creada y allí importaremos los perfiles de red que obtengamos, el parámetro key=clear es para indicar que nos muestre la clave del perfil de red.

Y bueno eso sería todo por hoy, en otra publicación veremos algunas funcionalidades que también sean algo mas elaboradas y complejas, esta de mas decir que el tema de los archivos batch es algo ya antiguo y que antes eran utilizados hasta para realizar pequeñas bromas y virus, que en ese entonces eran los inicios, pues ahora ya existe otras formas de elaborarlas y con algun lenguaje de programación, pero siempre es bueno saber algunas de las cosas que eran antes, saludos y Happy Hack. 


Enlaces:

https://github.com/phaoliop/OldToolKit