БОТНЕТ НА DOTNET'E SULVERUS AKA ДРОЗДОВ АНДРЕЙ Спецвыпуск: Хакер, номер #070, стр. 070-056-2 Кроме вышеупомянутых пространств имен, нам еще потребуется пространство System.Text для конвертирования типов, а именно: нам нужно будет преобразовать тип данных string в int. Для этого есть класс Convert, в котором есть большой набор функций для конвертирования из всего во все. Сперва переведем количество IP-адресов в тип данных int: string items = ListBox1.Items.Count.ToString(); int itm = Convert.ToInt32(items); А теперь таким же образом переведем номер порта в int: string BOTport = TextBox4.Text; int prt = Convert.ToInt32(BOTport); После таких преобразований мы можем написать цикл для проверки связи (смотрим соответствующую врезку). В принципе, все довольно понятно: организуется цикл, в котором создается сокет, а потом идет попытка соединения с ботом. Для этого мы регистрируем переменные типа IPHostEntry, IPAdress, IPEndPoint, затем создается сокет, использующий протокол TCP, далее центр отправляет боту сообщение «привет», предварительно подготовив массив байтов методом Encoding.ASCII.GetBytes(msg). Если программа получает «», то она считает, что бот активный. В конце цикла мы закрываем сокет методом Socket.Shutdown() и Socket.Close(). Теперь необходимо написать функцию, которая будет отправлять команды активным ботам. Она, собственно, у нас уже написана — ее надо только немного подкорректировать: нужно, чтобы функция брала IP-адрес для отправки сообщений не из первого ListBox'a, а из второго, и слала не слово «привет», а любую команду — для этого надо просто поменять строку на: string msg = TextBox1.Text; byte[] msg2 = Encoding.ASCII.GetBytes(msg); Теперь, когда мы можем полноценно разговаривать с ботами, надо подготовить наш скрипт для экспорта в интернет и откомпилироваться. [готовим на экспорт] Во-первых, нам нужно подправить web.config, чтобы наш скрипт работал на хостинге. Для этого нужно заменить <authentication mode="Windows"/> на <authentication mode="Off"/>, или просто закомментировать эту строку, но делать это нужно не в блокноте, а именно в студии, чтобы потом не было глюков. После таких нехитрых действий компилируемся и заливаем наш скрипт на хостинг. Теперь можно работать :). [Vista Style] Иногда бывает ситуация, когда нежелательно залезать в сам центр по тем или иным причинам, а узнать, сколько ботов в данный момент находится в сети, необходимо. Что делать в подобном случае? Есть много способов решения подобной проблемы, но самым удобным, на мой взгляд, является удаленный разговор с центром управления ботами. Такая тактика общения с центром хороша из соображений безопасности. Например, если хакер будет соединяться с центром через цепочку проксей, и не на прямую, а с подключением к веб-службе, которая может находиться на другом конце мира. Приступим к написанию всего этого хозяйства. Для начала нам надо создать новый проект типа ASP.NET Web Service. Что собой представляет данное нововведение? На самом деле, это простой скрипт, с которым можно работать не напрямую, а обращаясь к нему по http-протоколу из какого-либо приложения (обычной программы или другого скрипта). Веб-сервисы используют пространства имен System.Web.Services, System.Web.Services.Protocols, System.Web.Services.Description и System.Web.Services.Discovery. Во втором пространстве имен обозначены типы для работы с протоколами, по которым будут обмениваться данными веб-служба со своим клиентом. Веб-служба может использовать HTTP GET/POST и SOAP. Мы будем использовать HTTP. Создав проект, мы видим C# код, в котором встречаются строки [WebMethod] - нетрудно догадаться, что так обозначаются функции, которыми будет обладать сервис. Для наших целей достаточно написать функцию для проверки связи с ботами, и, чтобы это реализовать, в сервисе мы должны использовать уже известные нам пространства имен, а именно: System.Net, System.Net.Sockets, а также пространство имен System.Text для конвертирования из байтов в ASCII, и обратно. Надо условиться, что когда клиент делает запрос к сервису, то сервис получает данные о боте и выводит или его IP-адрес, если бот в онлайне, или, если бот не активен, выводит фразу на языке ботов: BINAN(Bot Is Not Available Now). Теперь надо создать строку, в которую мы будем все это возвращать, и дописать туда код для проверки связи — для этого нужно просто взять кусок кода из ранее написанного нами скрипта для работы с ботами и немного дописать его: |