Hace tiempo DeathMaster me comentó un problema para ejecutar BlueZScanner en Debian. Había que cambiar la definición de la variable mac_code.
Hola Alberto.
He bajado y compilado tu programa bluezscanner desde tu blog, y tengo
problemas en su ejecución. Concretamente, una violación de segmento tras
obtener el primer resultado de la búsqueda.
En este caso, por ejemplo, hay tres dispositivos bluetooth que deberían
detectarse -y que con hcitool se detectan-, pero bluezscanner encuentra
sólo uno e imprime el error:
master@blingdenstone:~/bluezscanner$ ./bluezscanner
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 00:60:57:xx:xx:xx Nombre: ...2
Violación de segmento
master@blingdenstone:~/bluezscanner$ hcitool scan
Scanning ...
00:13:E0:xx:xx:xx ...1
00:60:57:xx:xx:xx ...2
00:02:EE:xx:xx:xx ...3
master@blingdenstone:~/bluezscanner$
Utilizo un sistema Debian SID GNU/Linux con los siguientes paquetes y
versiones relacionados con bluetooth instalados:
master@blingdenstone:~/bluezscanner$ dpkg -l | grep bluez
ii bluez-hcidump 1.32-1
Analyses Bluetooth HCI packets
ii bluez-passkey-gnome 0.5-2
Bluetooth passkey (PIN) agent for GNOME
ii bluez-utils 3.7-1
Bluetooth tools and daemons
master@blingdenstone:~/bluezscanner$ dpkg -l | grep bluetooth
ii bluetooth 3.7-1
Bluetooth stack utilities
ii kdebluetooth 0.99+1.0beta1-13 KDE
Bluetooth Framework
ii libbluetooth2 3.7-1
Library to use the BlueZ Linux Bluetooth sta
ii libbluetooth2-dev 3.7-1
Development files for using the BlueZ Linux
master@blingdenstone:~/bluezscanner$
¿Tienes alguna idea de cuál puede ser el problema?
Muchas gracias por todo de antemano, y un saludo.
Hola de nuevo, Alberto.
Antes de nada, muchísimas gracias por contestarme, y por hacerlo tan rápido.
En cuanto a la librería, en Debian cambiaron el nombre de bluez-devel a
libbluetooth-dev (ahora libbluetooth2-dev por la versión), pero se trata
de la misma librería.
El fichero oui.h está en el directorio que contiene las fuentes de tu
programa y el ejecutable compilado, y parece estar completo:
master@blingdenstone:~/bluezscanner$ ll
total 680
- -rwxr-xr-x 1 master master 313220 2006-10-21 20:22 bluezscanner
- -rw-r--r-- 1 master master 20918 2006-04-17 00:40 bluezscanner.c
- -rw-r--r-- 1 master master 340272 2006-04-17 00:40 oui.h
- -rw-r--r-- 1 master master 1670 2006-04-17 00:41 parser.c
master@blingdenstone:~/bluezscanner$ tail -15 oui.h
{"08BBCC", "AK-NORD EDV VERTRIEBSGES. mbH"},
{"100000", "PRIVATE"},
{"10005A", "IBM CORPORATION"},
{"1000E8", "NATIONAL SEMICONDUCTOR"},
{"1100AA", "PRIVATE"},
{"800010", "ATT BELL LABORATORIES"},
{"A06A00", "Verilink Corporation"},
{"AA0000", "DIGITAL EQUIPMENT CORPORATION"},
{"AA0001", "DIGITAL EQUIPMENT CORPORATION"},
{"AA0002", "DIGITAL EQUIPMENT CORPORATION"},
{"AA0003", "DIGITAL EQUIPMENT CORPORATION"},
{"AA0004", "DIGITAL EQUIPMENT CORPORATION"},
{"ACDE48", "PRIVATE"},
{"EOF", "Desconocido"}
};
master@blingdenstone:~/bluezscanner$
He comprobado así mismo que mi dispositivo bluetooth USB esté en dicha
lista de fabricantes:
master@blingdenstone:~/bluezscanner$ hcitool dev
Devices:
hci0 00:09:DD:xx:xx:xx
master@blingdenstone:~/bluezscanner$ cat oui.h | grep 0009DD
{"0009DD", "Mavin Technology Inc."},
master@blingdenstone:~/bluezscanner$
He probado, así mismo, con otros dispositivos bluetooth para realizar el
escaneo, y en todos obtengo la citada violación de segmento, por lo que
descarto el problema de fabricante (de hecho, son teléfonos móviles de
fabricantes como Nokia, Sharp o Sony/Ericcson, por lo que sería raro):
master@blingdenstone:~/bluezscanner$ hcitool scan
Scanning ...
08:00:1F:xx:xx:xx DM
master@blingdenstone:~/bluezscanner$ ./bluezscanner
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Violación de segmento
master@blingdenstone:~/bluezscanner$
Respecto al código... tienes toda la razón, pero me temo que mis
conocimientos de C no sean tan buenos como los tuyos, en otros lenguajes
me defiendo mejor.
Aún así, he estado haciendo pruebas con lo que me has comentado y he
logrado acotar el error que produce la violación de segmento a la línea
149, es decir ésta:
sprintf(mac_code, "%c%c%c%c%c%c",
MAC_dev[0],MAC_dev[1],MAC_dev[3],MAC_dev[4],MAC_dev[6],MAC_dev[7]);
Comentando dicha línea, la salida del escaneo es:
master@blingdenstone:~/bluezscanner$ ./blues
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Fabricante del Chip Bluetooth:
· Desconocido
Tipo de dispositivo:
· Phone > Cellular
master@blingdenstone:~/bluezscanner$
Al menos finaliza, pero me llama la atención que me diga que el
fabricante es desconocido, cuando es un Sharp GX15 y los tres primeros
bytes se encuentran efectivamente en la lista de oui.h:
master@blingdenstone:~/bluezscanner$ cat oui.h | grep 08001F
{"08001F", "SHARP CORPORATION"},
master@blingdenstone:~/bluezscanner$
Sí ha mejorado en el sentido en que ahora no rompe la ejecución y
encuentra todos los dispositivos que hay:
master@blingdenstone:~/bluezscanner$ hcitool scan
Scanning ...
08:00:1F:xx:xx:xx 1
08:00:1F:xx:xx:xx 2
master@blingdenstone:~/bluezscanner$ ./blues
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 2
Fabricante del Chip Bluetooth:
· Desconocido
Tipo de dispositivo:
· Phone > Cellular
Dispositivo (2) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Fabricante del Chip Bluetooth:
· Desconocido
Tipo de dispositivo:
· Phone > Cellular
master@blingdenstone:~/bluezscanner$
En este caso se trata del mismo Sharp GX15 y un Sharp GX17 (ayer en las
pruebas, trabajé con estos dos más un Nokia 7650, un Nokia nGage, y un
Nokia nGage QD... todos fabricantes en la lista).
He realizado una prueba, consistente en modificar la línea 150 para, en
lugar de llamar a la función getFabricante, que imprima directamente el
contenido de mac_code, que según tus comentarios está declarado para
contener los tres primeros bytes de la MAC.
La salida es la siguiente:
master@blingdenstone:~/bluezscanner$ ./blues
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Fabricante del Chip Bluetooth:
· H
Tipo de dispositivo:
· Phone > Cellular
master@blingdenstone:~/bluezscanner$
Por tanto, mac_code contiene la cadena H, y por eso no encuentra el
dispositivo en la lista mediante la función getFabricante. Debería
contener, creo, 08001F, y no sé de dónde sale la H.
*(Por si no se ha notado, estoy redactando esto sobre la marcha,
mientras realizo pruebas, así que si hay incongruencias con lo de más
atrás no es que esté loco)*
Vale, ya lo pillo

La línea que eliminé es la que extrae mac_code y por eso da el fallo.
Falta saber porqué sprintf da violación de segmento... he estado mirando
documentación sobre dicha función, y en teoría está todo correcto...
Mi C no da para mucho... ¿conoces alguna forma _distinta_ de realizar lo
mismo pero sin utilizar la función sprintf()?
- -- Un ratito después... --
Vale, parece que después de todo, mi C sí que da para más de lo que yo
creía...
En la línea 73, he cambiado donde pone:
char *mac_code;
Por esto otro:
char mac_code[6];
Con lo cual, el programa parece funcionar, por fin, correctamente (he
añadido el 7650 a la fiesta):
master@blingdenstone:~/bluezscanner$ ./blues
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 00:02:EE:xx:xx:xx Nombre: 3
Fabricante del Chip Bluetooth:
· Nokia Danmark A/S
Tipo de dispositivo:
· Phone > Cellular
Dispositivo (2) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 2
Fabricante del Chip Bluetooth:
· SHARP CORPORATION
Tipo de dispositivo:
· Phone > Cellular
Dispositivo (3) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Fabricante del Chip Bluetooth:
· SHARP CORPORATION
Tipo de dispositivo:
· Phone > Cellular
master@blingdenstone:~/bluezscanner$
También con opciones:
master@blingdenstone:~/bluezscanner$ ./blues -c
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 2
Fabricante del Chip Bluetooth:
· SHARP CORPORATION
Class: 0x500204 [010100000000001000000100]
- Servicios soportados (Service Classes):
· Telephony (Cordless telephony, Modem, Headset
service, ...)
· Object Transfer (v-Inbox, v-Folder, ...)
- Tipo de dispositivo (Device Class):
· Phone > Cellular
Dispositivo (2) encontrado:
MAC: 00:02:EE:xx:xx:xx Nombre: 3
Fabricante del Chip Bluetooth:
· Nokia Danmark A/S
Class: 0x502204 [010100000010001000000100]
- Servicios soportados (Service Classes):
· Telephony (Cordless telephony, Modem, Headset
service, ...)
· Object Transfer (v-Inbox, v-Folder, ...)
- Tipo de dispositivo (Device Class):
· Phone > Cellular
Dispositivo (3) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 3
Fabricante del Chip Bluetooth:
· SHARP CORPORATION
Class: 0x500204 [010100000000001000000100]
- Servicios soportados (Service Classes):
· Telephony (Cordless telephony, Modem, Headset
service, ...)
· Object Transfer (v-Inbox, v-Folder, ...)
- Tipo de dispositivo (Device Class):
· Phone > Cellular
master@blingdenstone:~/bluezscanner$
Bueno, pues creo que eso soluciona el problema por fin

Aún así, no voy a borrar el correo ya que está escrito, porque puede
haber algo que te interese.
Muchas gracias por la ayuda, por tu tiempo y por tu programa.
Un saludo.