![]() |
Система закачки файлов, управляемая через Icq
Общая структура
http://www.xakep.ru/post/37440/structure.jpg В основе системы закачки файлов находится база данных (MySQL v5.1). Основное её предназначение – хранение очереди закачек. Помещение новых объектов в эту очередь происходит через интерфейсную часть, в качестве которой я выбрал сервис ICQ. Непосредственно закачку осуществляет скрипт ddd.pl, выбирающий из базы данных информацию об очередном скачиваемом объекте. Вся система закачки базируется на ОС FreeBSD 6.2. Каким же функционалом будет наделена наша система закачек? Каждый из закачиваемых объектов имеет приоритет (значения от 0 до 255, где 255 – наивысший приоритет), в соответствии с которым демон ddd.pl будет осуществлять выборку из БД очередного объекта скачивания. Я говорю об объектах скачивания, потому как система закачек в моей реализации поддерживает ftp и http ссылки и достаточно просто расширяема для работы с другими протоколами. Далее, желательно, чтобы система закачек не занимала весь канал под свои нужны, поэтому необходимо встроить средства ограничения скорости передачи данных (на основе DUMMYNET). Закачка файлов будет происходить под пользователем icq_bot (входящего в группу nobody), а скаченные файлы будут размещаться в /home/icq_bot/allfiles/. Файрвол будет ограничивать скорость передачи данных для всех процессов пользователя icq_bot. Рассмотрим реализацию. Конфигурирование ядра Для работы системы закачки достаточно добавить в ядро следующие опции: options IPFIREWALL # активизировать ipfw options DUMMYNET # активизировать поддержку пайпов и очередей Пересоберем ядро и приступим к конфигурированию полученной операционной системы. Конфигурирование FreeBSD Для начала активизируем запуск скрипта /etc/rc.firewall при загрузке системы. Для этого добавим следующую строку в файл /etc/rc.conf: firewall_enable=YES Для того чтобы появилась возможность ограничения скорости закачек добавим следующее правило файервола: /sbin/ipfw pipe 1 config bw 64Kbit/s /sbin/ipfw add 5000 pipe 1 ip from any to me uid icq_bot В последнем добавленном правиле мы ограничиваем скорость только у процессов, выполняемых под пользователем icq_bot. Создадим в домашней директории пользователя icq_bot директорию allfiles: cd /home/icq_bot && mkdir allfiles chown icq_bot:nobody allfiles В эту директорию впоследствии будут помещаться все скачанные файлы. База данных http://img68.imageshack.us/img68/937...1084110wq0.jpg ICQ интерфейс Для работы по протоколу ICQ были найдены модули Net::ICQ2000 и Net::OSCAR . Было решено остановиться на последнем – его программный интерфейс более прост. Помимо этого NET::OSCAR есть в портах: cd /usr/ports/net-im/p5-Net-OSCAR make install Рассмотрим сокращенный вариант кода ICQ бота (icq_bot.pl): Код:
#!/usr/bin/perlchmod +x /usr/local/bin/icq_bot.pl Если у вас есть желание «демонизовать» этот скрипт, то добавьте следующий строки: Код:
use POSIX;echo “/usr/local/bin/icq_bot.pl”>>/etc/rc.local Запустим полученный код и добавим нашего ICQ-бота себе в контакт лист: http://www.xakep.ru/post/37440/icqlist.jpg Бот обрабатывает команды только с UIN`а, заданного в переменной $ADM_UIN. Кодом определено, что бот обрабатывает все строки, предваренные символом «!». Испытаем на нем команды: http://www.xakep.ru/post/37440/showlist.jpg Скрипт закачек Код:
#!/usr/bin/perlДля начала разместим скрипт ddd.pl в домашней директории пользователя icq_bot. Там же создадим небольшой скрипт startddd.sh (не забудьте назначить ему права на исполнение): #!/bin/sh sudo -u icq_bot /home/icq_bot/ddd.pl Далее, в файле /etc/gettytab добавим строки, описывающие новый тип терминала: icqbot:ht:np:sp#115200:al=icq_bot:lo=/home/icq_bot/startddd.sh: Здесь мы переопределили программу авто загрузки (по умолчанию /usr/bin/login) на наш скрипт. Осталось переопределить тип седьмого виртульного терминала. Для этого в файле /etc/ttys добавим параметр icqbot к вызову getty: ttyv7 "/usr/libexec/getty icqbot" cons25r on secure Все готово: kill -1 1 Заключение Предложенная мной система, как и любая другая, не идеальна, но имеет некоторый запас для дальнейшего развития: * наращивание числа протоколов, с которыми она может работать * повышение отказоусточивости * более гибкая приоритезация * управление временем закачек Расширенную версию icq_bot.pl и ddd.pl вы можете скачать отсюда: //Автор: Ostretsov Atrem rufog@mail.ru |
Да вещь клёвая, я вней ищё несовсем разобрался!
|
На вид канает под дипломный проэкт но ИМХО ИЗВРАТ.
1. Нафига база данных, можно обойтись текстовым файлом. 2. я юзаю прогу на Делфи + пхп-скрипт, который отвечает за список закачки. Конечно, подписать под это icq - весело. например, качается список а если что-то срочное то по аське скинуть но все таки это лишнее палево. Легче вставить строку в файл в нужное место. |
+ за то, что выложил. Может более продвинутым очень нужно...
|
| Время: 09:01 |