BlueZScanner: Escaner de dispositivos Bluetooth basado en BlueZ
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/dispositivos_Bluetooth.jpg)
BlueZScanner es un sencillo escaner de dispositivos Bluetooth basado en BlueZ. Implementa las siguientes funciones:
- Descubrimiento de dispositivos Bluetooth cercanos.
- Resolución del nombre del dispositivo descubierto.
- Fabricante del chip Bluetooth incorporado en el dispositivo.
- Análisis del campo Device Class, que identifica la naturaleza del dispositivo descubierto.
- Análisis de los campos Service Classes, que identifican los servicios ofrecidos por el dispositivo. [Opcional]
- Detección de Perfiles Bluetooth disponibles en el dispositivo. [Opcional]
El código fuente de BlueZScanner se distribuye libremente bajo licencia GNU. Se necesita tener los paquetes BLUEZ (http://www.bluez.org/) instalados.
La página oficial de la herramienta es http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/bluezscanner.html
Herramienta: BlueZScanner (http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Files/BlueZScanner_src.zip)
CAPTURAS DE BLUEZSCANNER EN ACCIÓN
# ./bluezscanner -h muestra la ayuda:
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner_h.jpg) (http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner_h.jpg)
# ./bluezscanner detecta dispositivos Bluetooth cercanos y muestra la dirección MAC, el nombre del dispositivo, el fabricante del chip Bluetooth que incorpora y el tipo de dispositivo del que se trata:
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner.jpg) (http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner.jpg)
# ./bluezscanner -c muestra el informe completo de las Service/Device classes para cada dispositivo detectado:
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner_c.jpg) (http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner_c.jpg)
# ./bluezscanner -p muestra los Perfiles Bluetooth disponibles en cada dispositivo detectado:
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner_p_1.jpg) (http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner_p_1.jpg)
# ./bluezscanner -cp muestra ambos informes, el de Service/Device classes y el de Perfiles Bluetooth:
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner_cp.jpg) (http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezscanner_cp.jpg)
REFERENCIAS
(1) http://www.bluez.org/
(2) http://people.csail.mit.edu/albert/bluez-intro/
(3) https://www.bluetooth.org/foundry/assignnumb/document/baseband
(4) http://www.chaostal.de/cgi-bin/parser.cgi?input=article/bluetooth
Agradecimientos a Sir Graham por la ayuda prestada y el cursillo acelerado de máscaras de bits (Un día de estos lo implemento de una vez... :) )
BlueZSpammer: Marketing de proximidad con un HotSpot Bluetooth casero
La página web oficial de la herramienta es: http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/bluezspammer.html
Video Demo de BlueZScanner: http://youtube.com/watch?v=CVlxplbgxeM
Marketing de Proximidad basado en Bluetooth
Se denomina Marketing de Proximidad basado en Bluetooth al envío de contenidos de información y publicidad a teléfonos móviles Bluetooth como estrategia de promoción por parte de algunas marcas corporativas.
Algunas compañías han desarrollado campañas de publicidad en las calles basadas en el envío masivo de publicidad directa al teléfono móvil a través de Bluetooth. Emplean dispositivos emisores colocados en puntos estratégicos de elevado tránsito de personas capaces de enviar en un rango de 100 metros paquetes de publicidad personalizados que se adecuan al modelo de teléfono móvil que recibe la información.
Muchas instituciones, tales como ayuntamientos, han comprobado el éxito de este tipo de estrategias y han instalado sistemas de envío de información en puntos de interés general, como zonas turísticas, aeropuertos e intercambiadores de transporte público, edificios históricos y museos.
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/marketing.jpg)
¿Cómo funciona el Marketing de Proximidad?
El Marketing de Proximidad basado en Bluetooth hace uso fundamentalmente del Perfil de Carga de Objetos (http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/perfiles-bluetooth/index.html#PCO) (OBEX Object Push) disponible en la mayoría de teléfonos móviles y smart phones. Por lo general, el acceso a este Perfil requiere autorizaciónpero no autenticación. Esto significa que no es necesario que los dispositivos se encuentren emparejados, simplemente basta que el usuario del dispositivo destino autorice el envío de archivos del dispositivo origen.
El funcionamiento de un HotSpot Bluetooth capaz de enviar spam es bastante sencillo. Su tarea es descubrir otros dispositivos Bluetooth activos en su radio de cobertura y proceder al envío de objetos de información con conexiones a través del Perfil de Carga de Objetos (OBEX Object Push).
Los objetos de información enviados por el HotSpot Bluetooth pueden ser de diversa naturaleza y adaptables en función del modelo de teléfono móvil que vaya a recibir el archivo. Así, el objeto a enviar puede tratarse de un archivo de texto, una imagen, un archivo de audio, un video o incluso un paquete instalable con contenidos de publicidad, como un tema para el interfaz o un salvapantallas. El nivel de sofisticación del HotSpot para personalizar contenidos al teléfono móvil destino dependerá de su capacidad para identificar el modelo de dispositivo y conocer los tipos de archivos soportados por su sistema operativo.
BlueZSpammer, el HotSpot Bluetooth basado en BlueZ
BlueZSpammer es un sencillo HotSpot capaz de enviar archivos a teléfonos móviles y smart phones Bluetooth con soporte para el Perfil de Carga de Objetos (OBEX Object Push). Utiliza la pila de protocolos BlueZ para Linux y está desarrollado en lenguaje C.
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezspammer.jpg)
Requisitos para funcionar:
- PC + módulo Bluetooth
- Linux
- BlueZ
- OpenObex
Implementa las siguientes funciones:
- Detección de dispositivos Bluetooth cercanos.
- Filtro de teléfonos móviles y smart phones.
- Modo Demo, solo descubre dispositivos susceptibles de recibir spam.
- Filtro de códigos MAC de fabricantes de chips Bluetooth, para enfocar el público de dispositivos destino. (Opcional)
- Envío de archivos a través del Perfil de Carga de Objetos (OBEX Object Push) con ayuda de ObexPush.
El código fuente de BlueZSpammer se distribuye libremente bajo licencia GNU.
Se necesita tener instalados los paquetes de librerías bluez-libs-devel, openobex y openobex-apps (dependientes de cada distribución Linux).
BlueZSpammer es una herramienta desarrollada con fines científicos y educacionales. No debe ser utilizada como herramienta de spam en lugares públicos con fines comerciales o de fastidio para otras personas.
El autor no tiene ninguna responsabilidad sobre el uso que pueda darse a esta herramienta.
Herramienta: BlueZSpammer (http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Files/BlueZSpammer_src.zip)
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezspammer_h.jpg)
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezspammer_d.jpg)
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezspammer_f_o.jpg)
(http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/Temp/bluezspammer_enviado.jpg)
Taller orientado al desarrollo de programas relacionados con la Seguridad en Bluetooth en Linux.
Se necesita tener instalados los siguientes paquetes Bluez (a ser posible, las últimas versiones):
- bluez-utils
- bluez-libs
- bluez-libs-devel
Programa 1 - Resolver el nombre de un dispostivo Bluetooth a partir de su dirección MAC.
#include <stdio.h>
#include <stdlib.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
int main (int argc, char **argv)
{
bdaddr_t bdaddr; //Estructura bdaddr_t para almacenar la direccion MAC
char MAC_dev[20]; //Direccion MAC del dispositivo
char nombre_dev[248]; //Nombre del dispositivo
int id_dev; //Identificador del adaptador Bluetooth local
int socket; //Socket HCI
if(argc < 2)
{
printf("Sintaxis: %s <direccion MAC>\n",argv[0]);
exit(1);
}
printf("+ BlueResolver por Gospel [elblogdegospel.blogspot.com]\n\n");
strncpy(MAC_dev,argv[1],20);
printf("Detectando nombre del dispositivo <%s>...\n",MAC_dev);
//Convertimos la dirección MAC al formato de estructura bdaddr_t
baswap(&bdaddr, strtoba(MAC_dev));
//Obtenemos el identificador del adaptador local Bluetooth
id_dev = hci_get_route(&bdaddr);
if (id_dev < 0)
{
printf("[!] Error. Dispositivo Bluetooth local no disponible.\n");
exit(1);
}
//Abrimos un socket local HCI
socket = hci_open_dev(id_dev);
if (socket < 0)
{
printf("[!] Error. Fallo al intentar abrir socket HCI.\n");
exit(1);
}
//Obtenemos el nombre de la dirección MAC remota
int timeout = 10000;
if (hci_read_remote_name(socket,&bdaddr,sizeof(nombre_dev), nombre_dev, timeout) == 0)
{
printf("Dispositivo encontrado:\n\tMAC: %s\n\tNombre: %s\n",MAC_dev,nombre_dev);
}
else
{
printf("[!] Error. No se ha podido resolver el nombre del dispositivo.\n");
printf("Dispositivo encontrado:\n\tMAC: %s\n\tNombre: [Desconocido]\n",MAC_dev);
}
close(socket);
return(0);
}
Programa 2 - Escanear y detectar dispositivos Bluetooth cercanos
#include <stdio.h>
#include <stdlib.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
int main ()
{
inquiry_info *ii = NULL; //Almacena la lista de dispositivos detectados durante el inquiry
int max_rsp, num_rsp; //Numero de respuestas/dispositivos detectados
int dev_id; //Identificador del adaptador Bluetooth local
int socket; //Socket HCI;
int len, i;
char MAC_dev[20]; //Direccion MAC del dispositivo detectado
char nombre_dev[248]; //Nombre del dispositivo detectado
printf("+ BlueScanner por Gospel [elblogdegospel.blogspot.com]\n");
printf("+ src: people.csail.mit.edu/albert/bluez-intro/c401.html\n\n");
//Obtenemos el identificador del adaptador local Bluetooth
dev_id = hci_get_route(NULL);
if (dev_id < 0)
{
printf("[!] Error. Dispositivo Bluetooth local no disponible.\n");
exit(1);
}
//Abrimos un socket local HCI
socket = hci_open_dev(dev_id);
if (socket < 0)
{
printf("[!] Error. Fallo al intentar abrir socket HCI.\n");
exit(1);
}
//Inicializamos algunas variables
len = 8; //El tiempo de inquiry por dispositivo es de 1.28x8=10.24 secs/dispositivo
max_rsp = 255; //Se pueden detectar a lo sumo 255 dispositivos
//Creamos la lista de dispositivos detectados con hci_inquiry
ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
printf("Detectando dispositivos...\n\n");
//hci_inquiry lleva a cabo un descubrimiento de dispositivos Bluetooth y devuelve una lista de
//dispositivos detectados en inquiry_info ii para ser almacenados.
//La bandera IREQ_CACHE_FLUSH permite que la caché sea limpiada antes de buscar nuevos dispositivos.
//En otro caso, podrian aparecer dispositivos anteriormente detectados pero ahora fuera de rango.
num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, IREQ_CACHE_FLUSH);
if(num_rsp < 0)
printf("[!] Error. Fallo al intentar hci_inquiry.\n");
//Para cada una de las respuestas obtenidas durante el inquiry obtenemos el nombre del dispositivo
for(i=0;i<num_rsp;i++)
{
ba2str(&(ii+i)->bdaddr, MAC_dev);
memset(nombre_dev, 0, sizeof(nombre_dev));
if(hci_read_remote_name(socket, &(ii+i)->bdaddr, sizeof(nombre_dev), nombre_dev, 0) < 0)
strcpy(nombre_dev, "[Desconocido]");
printf("Dispositivo (%d) encontrado:\n\tMAC: %s\n\tNombre: %s\n\n", i+1, MAC_dev, nombre_dev);
}
free(ii);
close(socket);
return(0);
}
Hola, intento compilar el bluezscanner pero simepre me da error
uso wifislax 2.0
gracias
¿Qué error? Acuérdate de linkar las librerías de BlueZ con gcc -lbluetooth
hola, lo acabo de probar y funciona!
pero me da un error de segmentacion
lo compilo asi: gcc -lbluetooth bluezscanner.c -o mi_bluezscanner
lo que quiero es un lazo continuo de scaneo evitando las cabeceras de presentacion y los errores de inquiry que me llenan la pantalla
actualmente hago un loop en script
funcion_lazo(){
sleep .1s
hciconfig hci0 up
bluezscanner -cp
hciconfig hci0 down
sleep .1s
funcion_lazo
}
y de este modo eviro los errores antes mencionados, pero seria mejor dicha opcion en el programa, por eso quero compilarlo
saludos
Hola
Mira a ver si en este hilo encuentras la solución al error de segmentación. Es un fallo conocido.
http://bluehack.endorasoft.es/foros/viewtopic.php?t=342&start=0&postdays=0&postorder=asc
Saludos
solo me ocurre cuando lo compilo yo
en el tuyo no pasa!!!
Tú usas Fedora como yo? Pues entonces!
Gente que ha intentado compilar BlueZScanner en Debian me ha reportado problemas, por eso te lo digo que puede ser tu caso. Échale un ojo a ese hilo...
uso wifislax 2.0 y cambiando lo indicado por ti funcionaba pero dejo de hacerlo..."misterios"
una ultima cuestion, en tu codigo haces esto:
num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, IREQ_CACHE_FLUSH);
if(num_rsp < 0)
printf("[!] Error. Fallo al intentar hci_inquiry.\n");
for(i=0;i<num_rsp;i++)
{ ...
por lo poco que se de C cuando se de el caso num_rsp<0 va a pasar por el for, ¿esto no es causa de error?
(faltaria un else)
gracias
una preguntilla
el BlueZSpammer ace todo de manera automatica? digo solo lo activo o no se k xD y empieza a detectar y mandar la info?
esk me interesa para usarlo para propaganda en una universidad..
envia el fichero que le indicas de forma automatica como dices
lo unico malo es si la gente camina rapido, entonces puedes quedarte sin alcance que es lo que me pasa a mi
Cita de: Gospel en 25 Agosto 2007, 03:30 AM
Tú usas Fedora como yo? Pues entonces!
Gente que ha intentado compilar BlueZScanner en Debian me ha reportado problemas, por eso te lo digo que puede ser tu caso. Échale un ojo a ese hilo...
Gospel a mi ha dado varios errores yo trabajo con debian bueno voy a revisar el link.
no hay una forma de que lo subas copilado a alguna web para luego nosotros bajarlo .
gracias
gospel he estoy tratando de copilarlo y me da bastante errores si me podrias ayudar te lo agradezco emorme mente
Bboyhacks:/bin/Bluezscanner# gcc -lbluetooth -o bluezcanner bluezscanner.c
bluezscanner.c:38:33: error: bluetooth/bluetooth.h: No existe el fichero o el directorio
bluezscanner.c:39:27: error: bluetooth/hci.h: No existe el fichero o el directorio
bluezscanner.c:40:31: error: bluetooth/hci_lib.h: No existe el fichero o el directorio
bluezscanner.c:41:27: error: bluetooth/sdp.h: No existe el fichero o el directorio
bluezscanner.c:42:31: error: bluetooth/sdp_lib.h: No existe el fichero o el directorio
bluezscanner.c: En la función 'main':
bluezscanner.c:66: error: 'inquiry_info' no se declaró aquí (primer uso en esta función)
bluezscanner.c:66: error: (Cada identificador no declarado solamente se reporta una vez
bluezscanner.c:66: error: ara cada funcion en la que aparece.)
bluezscanner.c:66: error: 'ii' no se declaró aquí (primer uso en esta función)
bluezscanner.c:78: error: 'uint8_t' no se declaró aquí (primer uso en esta función)
bluezscanner.c:78: error: expected ';' before 'hexclass'
bluezscanner.c:125: error: expected expression before ')' token
bluezscanner.c:133: error: 'IREQ_CACHE_FLUSH' no se declaró aquí (primer uso en esta función)
bluezscanner.c:154: error: 'hexclass' no se declaró aquí (primer uso en esta función)
bluezscanner.c: En la función 'getFabricante':
bluezscanner.c:192: error: 'ListaFabricantes' no se declaró aquí (primer uso en esta función)
bluezscanner.c: En la función 'getServicios':
bluezscanner.c:207: error: 'bdaddr_t' no se declaró aquí (primer uso en esta función)
bluezscanner.c:207: error: expected ';' before 'bdaddr'
bluezscanner.c:208: error: 'sdp_list_t' no se declaró aquí (primer uso en esta función)
bluezscanner.c:208: error: 'attrid' no se declaró aquí (primer uso en esta función)
bluezscanner.c:208: error: 'search' no se declaró aquí (primer uso en esta función)
bluezscanner.c:208: error: 'seq' no se declaró aquí (primer uso en esta función)
bluezscanner.c:209: error: 'uint32_t' no se declaró aquí (primer uso en esta función)
bluezscanner.c:209: error: expected ';' before 'range'
bluezscanner.c:210: error: 'sdp_session_t' no se declaró aquí (primer uso en esta función)
bluezscanner.c:210: error: 'sess' no se declaró aquí (primer uso en esta función)
bluezscanner.c:211: error: no se conoce el tamaño de almacenamiento de 'di'
bluezscanner.c:212: error: 'uuid_t' no se declaró aquí (primer uso en esta función)
bluezscanner.c:212: error: expected ';' before 'root_uuid'
bluezscanner.c:220: error: 'bdaddr' no se declaró aquí (primer uso en esta función)
bluezscanner.c:222: error: 'SDP_RETRY_IF_BUSY' no se declaró aquí (primer uso en esta función)
bluezscanner.c:233: error: 'root_uuid' no se declaró aquí (primer uso en esta función)
bluezscanner.c:233: error: 'PUBLIC_BROWSE_GROUP' no se declaró aquí (primer uso en esta función)
bluezscanner.c:234: error: 'range' no se declaró aquí (primer uso en esta función)
bluezscanner.c:237: error: 'SDP_ATTR_REQ_RANGE' no se declaró aquí (primer uso en esta función)
bluezscanner.c:250: error: 'sdp_record_t' no se declaró aquí (primer uso en esta función)
bluezscanner.c:250: error: 'rec' no se declaró aquí (primer uso en esta función)
bluezscanner.c:250: error: expected expression before ')' token
bluezscanner.c:254: error: 'sdp_data_t' no se declaró aquí (primer uso en esta función)
bluezscanner.c:254: error: 'd' no se declaró aquí (primer uso en esta función)
bluezscanner.c:254: error: 'SDP_ATTR_SVCNAME_PRIMARY' no se declaró aquí (primer uso en esta función)
bluezscanner.c:263: aviso: la dirección de 'access', siempre se evaluará como 'true'
bluezscanner.c:265: error: 'RFCOMM_UUID' no se declaró aquí (primer uso en esta función)
Hola
Tio, ahí mismo te dice el error
bluezscanner.c:38:33: error: bluetooth/bluetooth.h: No existe el fichero o el directorio
bluezscanner.c:39:27: error: bluetooth/hci.h: No existe el fichero o el directorio
bluezscanner.c:40:31: error: bluetooth/hci_lib.h: No existe el fichero o el directorio
bluezscanner.c:41:27: error: bluetooth/sdp.h: No existe el fichero o el directorio
bluezscanner.c:42:31: error: bluetooth/sdp_lib.h: No existe el fichero o el directorio....
Saludos!
Hola,
tengo una pregunta utilizando BlueZSpammer.
Como se ve en el codigo:
Enviando objeto...
Suppressing FBS.
Browsing 00:18:0F:19:09:BD ...
Connecting...failed: connect
Still trying to connect
Connecting...failed: connect
Still trying to connect
Connecting...failed: connect
Still trying to connect
parece que reintenta la conexión 3 veces y sino continua con el siguiente.
Me gustaría saber si se puede poner que solo lo intente 1 vez.
lo habéis intentado alguno??
Gracias anticipadas.
Hola queria saber si el problema de 2segmentation fault " debian y ubunto se soluciono, ya que el link que amablemtne provee gospel sobre este problema no funciona.
saludos
gracias
Hola gente! He encontrado una posible solucion al fallo de segmentación en Debian de bluezscanner esta en este enlace
http://www.manelperez.es/SI/bluezscanner.html (http://www.manelperez.es/SI/bluezscanner.html)