Fuego a slowmotion Nikon J1

Share Button

Aprovechando la hoguera de Sant Joan, una grabación hipnótica del fuego con la opción de alta velocidad de la Nikon J1.

EncFS como encriptar/desencriptar información en linux

Share Button

Desde la reciente desaparición de Truecrypt (de dudosas y extrañas formas), los que utilizamos métodos de encriptación de datos sensibles, nos hemos visto en la necesidad de buscar una salida alternativa. Particularmente he implementado EncFS (FUSE-based cryptographic filesystem http://en.wikipedia.org/wiki/EncFS), básicamente por estas razones:

  1. Compatible con varias plataformas: Linux, Windows (mediante encfs4win y Android (con al app Encdroid) (básicamente lo que necesito).
  2. Fácilmente implementable y usable.
  3. Encriptación a nivel de fichero individual, lo que permite sincronizar repositorio encriptado con BitTorrentSync de forma mas óptima entre diferentes dispositivos (mi server Linux y mi smartphone).

Al lío, lo primero es conocer que EncFS utiliza por un lado un repositorio (directorio) encriptado y otro donde temporalmente desencriptar aparecen los ficheros desencriptados.

Instalación en Linux (en mi caso Ubuntu):

akirasan@ubuntu:~$ sudo apt-get install encfs

Creamos un directorio donde encriptaremos la información y otro donde quedará visible (lo creo dentro de mi home de usuario, por ejemplo):

akirasan@ubuntu:~$ mkdir /home/akirasan/Encriptado
akirasan@ubuntu:~$ mkdir /home/akirasan/Desencriptado

Con el siguiente comando lo que hacemos es crear y definir el directorio como encriptado por EncFS:

akirasan@ubuntu:~$ encfs /home/akirasan/Encriptado /home/akirasan/Desencriptado

La primera vez que ejecutemos este comando nos solicitará el modo, para simplificar utilizamos el modo p – paranoid, que nos preguntará el password que le queremos asignar a la encriptación de los datos:

Creando nuevo volumen cifrado.
Por favor, elige una de las siguientes opciones:
pulsa "x" para modo experto de configuracion,
pulsa "p" para modo paranoia pre-configurado,
cualquier otra, o una linea vacia elegira el modo estandar.
?> p

Seleccionada configuración Paranoica.

Configuración finalizada. El sistema de ficheros a ser creado tiene
las siguientes propiedades:
Cifrado del sistema de ficheros: "ssl/aes", versión 3:0:2
Codificacion del nombre de fichero: "nameio/block", versión 3:0:1
Tamaño de la llave: 256 bytes
Tamaño de Bloque: 1024 bytes, incluyendo 8 bytes de la cabecera MAC
Cada fichero contiene una cabecera de 8 bytes con datos IV únicos.
Nombres de fichero encodeados usando el modo IV de encadenamiento.
El IV de los datos del archivo está encadenado al IV del nombre del archivo.
Agujeros en archivos pasados a través del ciphertext.

----------------------- ADVERTENCIA --------------------------
Se ha habilitado la opción de encadenamiento de vectores externos de inicialización.
Esta opción impide el uso de enlaces duros en el sistema de archivos. Sin enlaces duros, algunos programas pueden fall
Para más información, por favor revise la lista de correo de encfs.
Si desea elegir otra configuración, por favor pulse CTRL-C para abortar la ejecución y comience de nuevo.

Ahora tendrás que introducir una contraseña para tu sistema de ficheros.
Necesitaras recordar esta contraseña, dado que no hay absolutamente
ningún mecanismo de recuperación. Sin embargo, la contraseña puede ser cambiada
más tarde usando encfsctl.

Nueva contraseña Encfs:
Verifique la contraseña Encfs:

Una vez tenemos esto, quedará montada la unidad en formato encfs la carpeta desencriptada. Es ahí donde operaremos con normalidad.

akirasan@ubuntu:~$ df
S.ficheros 1K-blocks Usados Disponibles Uso% Montado en
/dev/sdc1  56547644 10293440 43358640 20% /
none              4 0 4 0% /sys/fs/cgroup
udev         494744 12 494732 1% /dev
tmpfs        100900 1084 99816 2% /run
none           5120 4 5116 1% /run/lock
none         504480 168 504312 1% /run/shm
none         102400 40 102360 1% /run/user
encfs      56547644 10293440 43358640 20% /home/akirasan/Desencriptado

Carpeta desencriptada con un fichero de prueba test_encriptado.txt

akirasan@ubuntu:~/Desencriptado$ ll
total 12
drwxrwxr-x 2 akirasan akirasan 4096 jun 3 11:58 ./
drwxr-xr-x 30 akirasan akirasan 4096 jun 3 11:55 ../
-rw-rw-r-- 1 akirasan akirasan 6 jun 3 11:58 test_encriptado.txt

Carpeta encriptada con el fichero de prueba test_encriptado.txt –>
vwqtmiP3LTr,J,4GBDr4I1JH7jwrf6ua2UFZvSeX6C55o0

akirasan@ubuntu:~/Encriptado$ ll
total 16
drwxrwxr-x 2 akirasan akirasan 4096 jun 3 11:58 ./
drwxr-xr-x 30 akirasan akirasan 4096 jun 3 11:55 ../
-rw-rw-r-- 1 akirasan akirasan 1091 jun 3 11:55 .encfs6.xml
-rw-rw-r-- 1 akirasan akirasan 22 jun 3 11:58 vwqtmiP3LTr,J,4GBDr4I1JH7jwrf6ua2UFZvSeX6C55o0

Una vez queramos cerrar la carpeta desencriptada hay que desmontarla con el siguiente comando:

akirasan@ubuntu:~$ fusermount -u /home/akirasan/Desencriptado

Y para montar nuevamente el mismo comando que antes cuando creamos inicialmente el directorio encriptado, el cual nos pedirá el password:

akirasan@ubuntu:~$ encfs /home/akirasan/Encriptado /home/akirasan/Desencriptado

A tener en cuenta dos cosillas de la carpeta encriptada:

  • No copiar directamente ningún fichero sobre es carpeta, porque quedará destrotegido de la encriptación. Yo es la que sincronizo con BitTorrentSync y los ficheros de sincronización son visibles, sin problema.
  • No borrar el fichero de control .encfs.xml

 

El blog ya está de vuelta!!!

Share Button

Después de casi dos meses sin hosting, ya vuelve a estar operativo el blog. Nuevo hosting y nuevo look&feel

Monitoriza tu velocidad de conexión

Share Button

Después de llevar varios días monitorizando mi conexión de internet mediante mi script, y realizando variaciones y comprobaciones, he llegado a la conclusión que la mejor forma de utilizar el speedtest-cli es fijando siempre la prueba contra unos servidores. De esta forma no dejamos que speedtest-cli determine el servidor contra el cual hacer la prueba de velocidad y que puede desvirtualizar el resultado real del estado de la conexión.

Para ello creo que lo mejor es utilizar dos o tres servidores y hacer la prueba siempre sobre estos. Así que he modificado el script para que permita configurar una lista de servidores. Para conocer la lista de servidores (el número unívoco que utilizar speedtest-cli), es tan sencillo como llamar al script de speedtest-cli.py con el parámetro –list. Aparecerán los servidores que por ubicación son preferentes para hacer la prueba de conexión. Selecciona un par y configura el script a tu gusto.

También he modificado la forma de invocar a speedtest_cli.py, para poder pasarle parámetros. Ahora hay que indicar la ruta absoluta de donde está el script.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# by Akirasan Febrero 2014

import plotly
import speedtest_cli
import string
import subprocess
from datetime import datetime

dia = datetime.today()
py = plotly.plotly(username_or_email="<USUARIO>", key="<KEY>")
layout = {'title': 'Velocidad Fibra'}

#Lista de servidores contra los que realizar test
#list_servidores = ['3747','4374','3466','1695','3171']
list_servidores = ['1695','2052']

for server in list_servidores:
  reportStr = subprocess.check_output(["python", "<PATH_ABSOLUTO>/speedtest_cli.py","--server",server])

  #Buscamos posición de la información
  dl_pos = string.find(reportStr, 'Download:')
  ul_pos = string.find(reportStr, 'Upload:')
  srv_pos1 = string.find(reportStr,'Hosted by')
  srv_pos2 = string.find(reportStr,'[')
  offset = srv_pos2 - srv_pos1
  servidor = reportStr[srv_pos1+10:srv_pos1+offset]

  data = [{'x': dia,
           'y': reportStr[dl_pos+9:dl_pos+9+6],
           'name':servidor+'_DL'
           },
          {'x': dia,
           'y': reportStr[ul_pos+7:ul_pos+7+6],
           'name':servidor+'_UL'
           }
          ]

  try:
     py.plot(data, filename='Monitorizacion Fibra Optica', fileopt='extend')
  except:
     print "ERROR envio datos a Monitorizacion"

El resultado son gráficas en las que se puede ver, que cuando el test de velocidad para un servidor da unos ratios muy malos, para otro se sigue manteniendo estable:

Os dejo un ejemplo en tiempo real https://plot.ly/~akirasan/4

Monitoriza tu velocidad de conexión con Python + Plot.ly

Share Button

En un tweet the Linuxparty leo una forma de comprobar la velocidad de la conexión de internet desde la línea de comandos en Linux utilizando Python:


Partiendo de esta base y viendo la posibilidad de probar la API de Plot.ly (servicio para crear gráficas) para Python, me he creado un pequeño script que ejecuto cada 5 minutos (por ahora, seguramente lo deje en una ejecución cada hora), que verifica la velocidad de la conexión y alimenta una gráfica en Plot.ly.

Evidentemente lo primero es crear una cuenta en Plot.ly para poder tener de un usuario y una key para utilizar con la API (en el código de mi script está puesto como <USUARIO> y <KEY>

Después en nuestro sistema tenemos que instalar la librería Python para instalar la API de Plot.ly:

$# sudo apt-get install python-pip
$# sudo pip install plotly

Ahora nos bajamos el script para verificar la velocidad de conexión que sale en el artículo de Linuxparty:

wget https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py

Con esto ya tendremos todos los elementos.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# by Akirasan Febrero 2014

import plotly
import datetime
import speedtest_cli
import sys
import StringIO
import string

from datetime import datetime

py = plotly.plotly(username_or_email='<USUARIO>', key='<KEY>')

#guardamos y redireccionamos el sys.stdout
stdout = sys.stdout
sys.stdout = reportSIO = StringIO.StringIO()

#Llamamos a la utilidad speedtest_cli
speedtest_cli.speedtest()

#Recuperamos lo escrito en nuestro IO
reportStr = reportSIO.getvalue()
#recuperar sys.stdout
sys.stdout = stdout

#Buscamos posición de la información
dl_pos = string.find(reportStr, 'Download:')
ul_pos = string.find(reportStr, 'Upload:')

dia = datetime.today()

layout = {'title': 'Velocidad conexion internet'}
data = [{'x': dia,
         'y': reportStr[dl_pos+9:dl_pos+9+6],
         'name':'Download'
         },
        {'x': dia,
         'y': reportStr[ul_pos+7:ul_pos+7+6],
         'name':'Upload'
         }
        ]

py.plot(data, filename='Velocidad_Internet', fileopt='extend', world_readable=False, layout=layout)

Luego ya solo falta o ejecutarlo como un script poniendo los permisos de ejecución y programarlo con el cron o similar.

Una vez hemos alimentado la información en Plot.ly podemos ir a consultar y ver el resultado de la gráfica. Algo como esto:

qtrnas-52f38b804c065