elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Comunicaciones
| |-+  Dispositivos Móviles (PDA's, Smartphones, Tablets)
| | |-+  Hacking Mobile
| | | |-+  Sockets Bluetooth
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sockets Bluetooth  (Leído 2,877 veces)
oPen syLar


Desconectado Desconectado

Mensajes: 769


The Best of You..


Ver Perfil WWW
Sockets Bluetooth
« en: 27 Mayo 2012, 04:19 am »

Hace un par de semanas trabajo sobre un pequeño proyecto basado en OpenOBEX..Y bueno me ha recordado viejos tiempos cuando echaba mis primeras lineas con las BlueZ y empezaba a jugar con algunas distro GNU/Linux... Eso ya hace bastante tiempo.. Y ahora los retomo =)

El tema de los Bluetooth es algo poco visto.. Poco se habla.. Es raro.. Muchas implementaciones de sus protocolos se ven muy inestables.. Bueh ya vendrán una que otra tool que nos quite el sueño.. O quien quita.. Actualicen la suite Bludiving para ponernos a jugar un rato.. Que no tiene actividad desde el 2006 =S ...

Aca les traigo un pequeño código de como se manejan los sockets bajo Bluetooth.. Si han manejado sockets en alguna vez de su vida verán que no es nada complejo.. y varían en ciertas lineas y ciertos flags.. Pero del resto es la misma wea..Un socket() por aqui un connect() por alla.. Blablabla..

Necesitaran..


las librerias de desarrollo bluez
(En Debian creo que se llaman bluez-devel) o algo así..

En Arch simplemente se llama bluez


Código:
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>
#include <errno.h>
#include <stdio.h>

int main(int argc, char *argv[])
{

if(argc!=2)
{
printf("\nSolo acepta 1 parametros...\n%s 00:11:22:33:44:55:66\n\n", argv[0]);

return 1213;
}

/*
- Para socket Bluetooth se cambia el tipico AF_INET por
AF_BLUETOOTH (AF_ = Address Family)
 
- SOCK_STREAM = Especificamos que queremos un flujo confiable (estilo TCP)

- SOCK_DGRAM u otro flag no esta permitido en sockets RFCOMM
*/
int sck=socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);

//Podemos establecer sockets a nivel Bluetooth
if(sck!=-1)
{
/*
Seteamos los parametros para la conexion
sockaddr_rc es una variante de sockaddr_in.. Esta variante
esta definida en rfcomm.h
*/
struct sockaddr_rc remote;


bdaddr_t addrs;

/*
str2ba convierte una MAC Address en tipo char a tipo bdaddr
Necesario para pasarselo a connect()
*/
str2ba(argv[1], &addrs);

//Seteamos el Address Family
remote.rc_family = AF_BLUETOOTH;

//seteamos el canal SDP
remote.rc_channel = 1;

//Mac Address en formato bdaddr_t
remote.rc_bdaddr = addrs;

//Conectamos si connect() devuelve 0 entonces la conexion habra fallado

if(connect(sck, (struct sockaddr *)&remote, sizeof(remote))<0)
{
////Sino connect()a pintar una paloma.. =D
printf("[!] connect() FAIL.! [%s]\n", strerror(errno));
}

close(sck);
}

//Sino.. Pintar otra una paloma.. =D
else
puts("[!] Who.? socket() FAIL.. o.0");
}

Complilan con


Código:
gcc `pkg-config --libs --cflags openobex` -g `pkg-config --cflags --libs bluez` main.c

O bien...


Código:
gcc -g -lbluetooth  main.c -o oPen; ./oPen

Claro no piensen que una llamada a send() ya podrán enviar ficheros.. Así sin mas.. El tema de los protocolos Bluetooth es bastante amplio este es un pequeño post de como hacer conexiones simples a través de sockets Si lo que quieren es enviar un fichero por OBEX pues.. Podrán utilizar OpenOBEX que ya esta bastante difundido entre los SO incluyendo MS Windows x) Espero armar otra pequeña entrada para los transportadores sobre OpenOBEX pronto.. Saludos


En línea

Siempre habra 2 verdades, la que quieres creer y la que no aceptaras
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines