Хакерский синезуб User anonymous Хакер, номер #094, стр. 094-130-2 GUID serviceClassId; ULONG port; } SOCKADDR_BTH, *PSOCKADDR_BTH; Самое главное в этом коде то, что BTH_ADDR - структура, которая определяет имя Bluetooth-устройства и возвращает его в SOCKADDR_BTH. Для получения более подробного теоретического материала смотри документацию Socket Windows в платформе SDK, а также не забудь про Bluetooth API. Ну-с, приступим! Кое-что важное мы уже знаем, поэтому действовать будем по утвержденному плану. А именно: 1. Обнаружение устройств; 2. Выбор устройства; 3. Установление соединения с выбранным устройством; 4. Авторизация на выбранном устройстве; 5. Передача сообщения; 6. Дисконнект. Для начала сделаем каркас нашего приложения, а потом будем модернизировать его по своему вкусу. Любая, даже самая вшивая сетевая программа не обойдется без подобной инициализации: // Инициализация WinSock WSADATA wsd; //Код откомментировать надо WORD wVersionRequested; wVersionRequested= MAKEWORD(2,2); if (WSAStartup(Version,&wsd)!=0) { printf("WSAStartup error\n"); return 1; }; Этот код должен знать любой программист. Вышеописанные строки определяют структуру WSADATA и версию, через которую мы будем прогонять все данные. Теперь вставим несколько функций, уже относящихся к самому Bluetooth-программированию. Если ты хочешь передать какую-либо информацию, необходимо, чтобы компьютер опознал передатчик и устройство, с которым требуется соединиться. Уж как хочешь, а без Bluetooth-устройства, установленного на компьютере, программа работать не будет! Код до безобразия простой: инициализируем стандартные функции по нахождению устройства, и если таковое найдено, то используем функцию BLUETOOTH_RADIO_INFO для того, чтобы узнать об удаленном устройстве всю общедоступную информацию. // Поиск первого Bluetooth-устройства, установленного на компьютере HANDLE hRadio; BLUETOOTH_RADIO_INFO pbtri; BLUETOOTH_FIND_RADIO_PARAMS btfrp; HBLUETOOTH_RADIO_FIND hFind; BLUETOOTH_RADIO_INFO RadioInfo= {0}; btfrp.dwSize = sizeof(btfrp); // Определяем параметр поиска hFind = BluetoothFindFirstRadio(&btfrp,&hRadio); // Что, если? if (hFind != 0) { printf("Устройство найдено\n"); } else { printf("Устройства нет\n"); return 1; }; Можно сказать, что безобидная часть нашей программы готова. Теперь приступаем к решительным действиям. Обнаружение невидимок Общеизвестно, что Bluetooth-устройства по желанию хозяина могут находиться в двух режимах: доступном (для любого внешнего обнаружения) и недоступном. По идеи протокола Bluetooth, недоступный режим должен был решить проблему неавторизированного доступа. Это наводит на мысль, что подобные невидимки нельзя взломать, но в нашем мире нет ничего совершенного, и наш будущий пример тому подтверждение. Суть этого режима заключается в том, что на широковещательные запросы устройство не подает голоса. Однако если обратиться к устройству по адресу, то оно начнет действовать! Поэтому для начала составим программку, которая будет последовательно перебирать адреса и обращаться к каждому, пока тот не откликнется. Для начала надо сделать генерацию МАК-адреса: // главная функция генерации MAK |