Autor
|
Tema: .: TALLER DE PROGRAMACIÓN en BLUEZ :. (Leído 8,314 veces)
|
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
|
|
« Última modificación: 25 Julio 2007, 14:35 pm por Gospel »
|
En línea
|
|
|
|
Gospel
|
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); }
|
|
« Última modificación: 8 Diciembre 2005, 20:33 pm por Gospel »
|
En línea
|
|
|
|
Gospel
|
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); }
|
|
« Última modificación: 8 Diciembre 2005, 20:57 pm por Gospel »
|
En línea
|
|
|
|
|
|