BlueZScanner, BlueZSpammer y otros códigos BlueZ

Iniciado por Gospel, 17 Abril 2006, 17:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Gospel

BlueZScanner: Escaner de dispositivos Bluetooth basado en BlueZ



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 instalados.

La página oficial de la herramienta es http://gospel.endorasoft.es/bluetooth/especificacion-bluetooth/bluez/bluezscanner.html

Herramienta: BlueZScanner


CAPTURAS DE BLUEZSCANNER EN ACCIÓN

# ./bluezscanner -h muestra la ayuda:




# ./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:




# ./bluezscanner -c muestra el informe completo de las Service/Device classes para cada dispositivo detectado:




# ./bluezscanner -p muestra los Perfiles Bluetooth disponibles en cada dispositivo detectado:




# ./bluezscanner -cp muestra ambos informes, el de Service/Device classes y el de Perfiles Bluetooth:





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...  :)  )

Gospel

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.




¿Cómo funciona el Marketing de Proximidad?

El Marketing de Proximidad basado en Bluetooth hace uso fundamentalmente del Perfil de Carga de Objetos (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.




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








Gospel

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

Gospel

#3
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);
}

Gospel

#4
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);

}

joseyvicente

Hola, intento compilar el bluezscanner pero simepre me da error
uso wifislax 2.0
gracias

Gospel

¿Qué error? Acuérdate de linkar las librerías de BlueZ con gcc -lbluetooth

joseyvicente

#7
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

Gospel

#8
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

joseyvicente

solo me ocurre cuando lo compilo yo
en el tuyo no pasa!!!