jump to navigation

Control de presencia por Bluetooth 11 febrero, 2009

Posted by ubanov in Informática-Linux, seguridad.
Tags: , , ,
trackback

El otro día se me ocurrió una idea sencillita: dado que todos llevamos últimamente un teléfono móvil encima, se podía usar este dispositivo para controlar cuando estamos en un determinado lugar. La forma de saber si estamos o no sería utilizando bluetooth.

Para probar si este sistema funcionaba he hecho una “prueba de concepto”, es decir he hecho un pequeño programa para autocontrolarme y saber cuando llego a casa y cuando me voy.

En este post explico la teoría, el pequeño programa en C que he desarrollado para probarlo y mis conclusiones.

La idea es instalar en una máquina Linux (en mi caso lo he probado en una debian sobre un linksys NSLU2 y sobre una ubuntu 8.10 que tengo en casa siempre encendida) un paquete de software que nos permita visualizar qué teléfonos están cerca. Evidéntemente la máquina elegida tiene que tener un dispositivo Bluetooth (ya sea integrado, o un dongle).

En las máquinas que quiero controlar cuando está una personas instalado el paquete bluez. Este paquete incluye una utilidad (hcitool) que nos permite hacer varias operaciones con el bluetooth. En concreto el programa que yo he hecho lo que hace es ejecutar “hcitool scan”, de forma que se vean los teléfonos VISIBLES por Bluetooth en el radio de acción. Este comando lo ejecuto una vez por minuto.

La salida de este programa da algo como lo siguiente:

$ hcitool scan
Scanning …
00:1E:3B:81:01:9D       N73-arantxa
00:1C:CC:A7:8F:AB       IvanBlackBerry8310
00:1E:3B:39:18:07       Nokia 3109c
00:17:E8:86:C4:CC       Ivan-diamond

En el caso anterior se ven 4 ordenadores (3 “míos” y otro cercano).

El programa que tengo para saber cuando estoy en casa es el siguiente:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>

char *GetTime(void)
{
struct tm *tmpunt;
time_t timeval;
static char hora[32];

time(&timeval);
tmpunt=localtime(&timeval);
sprintf(hora,”%2i:%02i”,tmpunt->tm_hour,tmpunt->tm_min);
return(hora);
}

char *GetDate(void)
{
struct tm *tmpunt;
time_t timeval;
static char hora[32];

//  if(Setdate[0])        /* si setdate esta establecido utilizar esa fecha */
//    return(Setdate);
time(&timeval);
tmpunt=localtime(&timeval);
sprintf(hora,”%2i/%02i/%04i”,tmpunt->tm_mday,tmpunt->tm_mon+1,
tmpunt->tm_year+1900);
return(hora);
}

/*
$ hcitool scan
Scanning …
00:1E:3B:81:01:9D       N73-arantxa
00:1C:CC:A7:8F:AB       IvanBlackBerry8310
00:1E:3B:39:18:07       Nokia 3109c
00:17:E8:86:C4:CC       Ivan-diamond
*/
int TestCercaniaBT(char *namesearch)
{
FILE *fich;
int found=0;
char buffer[1024];
char mac[256],name[1024];

sprintf(buffer,”%s scan 2>&1″,”/usr/bin/hcitool”);
if((fich=popen(buffer,”r”))==NULL)
return -1;
buffer[0]=0;
fgets(buffer,sizeof(buffer),fich);
while(!feof(fich)) {
name[0]=0;
sscanf(buffer,”%s %s”,mac,name);
if(strcmp(name,namesearch)==0)
found=1;
buffer[0]=0;
fgets(buffer,sizeof(buffer),fich);
}
pclose(fich);
return found;
}

int TestCercania(char *name,FILE *fichsal)
{
int last,a,veces=0;

if(fichsal==NULL)
fichsal=stdout;
last=TestCercaniaBT(name);
if(last<0)
return last;
while(1) {
sleep(60);
a=TestCercaniaBT(name);
if(a!=last) {
veces++;
if(veces>=2) {
fprintf(fichsal,”%s %s %s %s\n”,GetDate(),GetTime(),name,
(a==1)?”near”:”out”);
last=a;
veces=0;
}
} else
veces=0;
}
return 0;
}

int main(void)
{
return TestCercania(“Ivan-diamond”,NULL);
}

Al ejecutar este programa lo que hace es sacarnos un log (por la salida estandar) de cuando está el teléfono cerca y encendido y cuando no. A veces pasaba que en una de las pruebas, aunque el teléfono estaba cerca, no aparecía en la lista de disponibles. Por evitar que de un “falso positivo”, utilizo la variable veces para comprobar que el estado haya cambiado un par de veces, antes de variar el estado. Esto tiene el pequeño efecto secundario que retrasa la hora en el log (cada cambio va siempre con 2 minutos de retraso desde que lo vemos). Como era una prueba de concepto no voy a cambiar el programa más.

El log que te deja este simple programa es del estilo:

10/02/2009 20:48 Ivan-diamond near
11/02/2009  0:07 Ivan-diamond out
11/02/2009  7:42 Ivan-diamond near
11/02/2009  8:26 Ivan-diamond out

Es fácil analizar lo que ha pasado, ayer llegué a casa a las 20:48 (posiblemente a las 20:46), apagué el teléfono a las 12 y poco y luego el despertado ha sonado a las 7:40 y ha hecho que se encienda el movil (utilizo el móvil como despertador). Después me he largado a currar sobre las 8:26… vaya control que puedo tener sobre mi mismo… o sobre otra persona…

No he probado si al estar cerca de un dispositivo que te busca cada minuto puede afectar a lo duración de las pilas del móvil, quizás algún día lo pruebe y actualice el post.

Lo que si queda muy claro es que el llevar el teléfono visible por Bluetooth supone un pequeño problema de seguridad, alguien podría controlarte cuando vas a determinados sitios. Haciendo esto en una tienda por ejemplo se podrían tener estadísticas sobre determinadas personas que entren más de una vez a la tienda, el vecino podría controlar a qué horas llegamos a casa, con un poco de imaginación seguro que se pueden idear nuevas “utilidades”…

Mi conclusión de todo esto es que creo que es muy importante quitar el que te puedan detectar por BT… pero es mi opinión, cada uno que saque sus conclusiones😀

Comentarios»

1. Javier Gonzalez Ibarra - 17 abril, 2009

Justamente estoy buscando algo asi para implementarlo en un sistema en la escuela, quiero hacer un programa donde inicies sesion en tu computadora y registres tu telefono (por bluetooth), entonces cada que te vas el sistema detectaria eso y te pondria automaticamente en una base de datos el estado “no disponible”, y cuando regresas en “disponible”. Al tener esa informacion en una base de datos, la podrias consultar por una web. Esto serviria por ejemplo en la escuela saber si un profesor se encuentra en su cubiculo o no, en lugar de perder el tiempo llendo a ver.

2. ubanov - 24 abril, 2009

pues ahí tienes la base… el resto te toca a ti…. lo malo será el tener que poner un equipo en cada sala….. ya nos contarás cómo te queda….


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: