Именно это я и имел ввиду... Не думаю что можно найти какую либо "лёгкую" либу под это дело ^^самая большая проблема - это организовать протокол router - icq/
#[WL-500W]&&[1.9.2.7-10-pre4]&&[CPU 300Mhz]&&[128Mb RAM]&&[BeeLine L2TP]&&[Danya0.ru]~
#[Восстанавливаю/Перепаиваю до 128мб и мн.др.: Личка, ICQ:2чч2l7боо, ТЕЛ:+7(92б)2бб5Ч80..
Именно это я и имел ввиду... Не думаю что можно найти какую либо "лёгкую" либу под это дело ^^самая большая проблема - это организовать протокол router - icq/
Общение через ICQ с различными серверными программами и самими серверами - достаточно полезная штука, какие бы возможности не были у устройства, особенно когда у людей дел по горло то гораздо проще получить по аське все не обходимое за пару секунд, чем ходить в WebUI или подключаться по SSH.
Прикладываю получившийся результат, пока что скрипт потестировал просто запустив из командной строки php .../icqcontrol/icqcontrol.php.
В /conf/conf.php находится конфигурационная информация:
$icq_uin, $icq_password - ICQ номер и пароль для учетной записи, под которой будет работать роутер (пароль не более 8-ми символов, иначе будет ошибка авторизации, т.к. подключение через md5).
$icq_session_timeout - время через которое отвалится сессия, если нет активности (под активностью понимается успешный запуск некой команды).
$icq_allowed_uins - ICQ номера с которых возможно управлять роутером, php-ый массив, определяется так: array(222222222 => true, 333333333 => true), если какой-то uin временно требуется отключить, то можно выставить false или вообще удалить.
$icq_connection_delay - время через которое происходит попытка переподключения
$icq_retries - кол-во попыток подключения, через которое происходит продолжительная пауза (полезно, когда происходит блокировка аккаунта)
$icq_long_connection_delay - продолжительность длительной паузы, по-умолчанию 20 минут.
$icq_users - информация для логина, php-ый массив, ключ-логин, значение - пароль.
Нужно зарегистрировать учетную запись ICQ для роутера, добавить в контакт лист те номера, откуда будет возможно управление, разрулить все проблемы с авторизацией, сделать чтобы получение сообщение было возможно только от людей из списка контактов.
Все команды имеют следующий вид:
имя_функции("аргумент1", "аргумент2", ...)
в строках аргументов не должно быть символов ".
Пока что реализованы функции test("Message") и exec("command"), login("login", "password"), logout(). Первая просто в тестовых целях посылает обратно переданное сообщение, вторая через shell_exec запускает команду операционной системы, про последние и так все понятно.
Вот пример общения c роутером:
login("login", "password")
test("a")
logout()
Новые функции можно добавить просто путем добавления соответствующих статических методов в класс в файле FunctionLib.class.php.
Вместо WebIcqPro использую WebIcqLite, т.к. после смены протокола, оригинальный WebIcqPro не работает, а то что выложено на форуме создателя в качестве исправлений не внушает доверия.
Буду благодарен любой помощи и советам, также сообщайте о любых недоработках или ошибках, буду править в меру своих возможностей.
круто,
еще бы реализовать счетчики, например, скачивается торрент, как тока докачался, пришло сообщение в асю=)
Asus wl-500gpv2 (rtorrent + ssh + ntorrent + rrdstorm)
Может не в тему, но очень легко реализовать управление роутером по фтп.
Скрипт раз в 5 секунд проверяет определенный файлик и выполняет его и затем удаляет. Потом редирет консоли возвращается в другой файлик.
Можно вместо скрипта в ftp использовать в цикле wget с шарового хостинга . Хотя по icq конечно удобнее.
как правильно запустить демона с помощью screen для php скрипта? да и вообще как отследить правильно активность скрипта?
как передать файл от роутеровской аси?
да и вообще есть более простой вариант парсера, а не func("arg")?
зы. вообще считаю что тема с асей оч прикольная, еще бы довестибы совсем до ума...
Asus wl-500gpv2 (rtorrent + ssh + ntorrent + rrdstorm)
Мои эксперименты с icq не удались, поэтому я у себя установил mcabber (Jabber клиент) у него есть уже пример скрипта для обработки сообщений. Система с клиентом взаимодействует через pipe. Вобщем получилось всё просто. Пока реализовал скачивание файлов по присылаемой ссылке, выполнение команды в shell с выдачей результата.
Пришлось вставить в крон реконнект, потому-что клиент при потере соединения реконектится сам не хочет.
mcabber запускается через screen, весь вывод заворачивается в null.
2supremacy
А можно посмотреть, что в итоге получилось?
зарегистрируйте аккаунт на jabber.ru для своего роутера.
после установки mcabber редактируем файл /opt/etc/.mcabber/mcabberrc
далее редактируем /opt/etc/.mcabber/eventcmdPHP Code:
set username = routeraccount@jabber.ru
set password = ********
set server = jabber.ru
set port = 5222
set events_command = /opt/etc/.mcabber/eventcmd
set event_log_files = 1
set event_log_dir = /opt/etc/.mcabber/event_files
set fifo_name = /opt/etc/.mcabber/mcabber.fifo
set fifo_hide_commands = 0
set fifo_ignore = 0
set autoaway = 0
создаём исполняемый файл /opt/bin/mcabber-runPHP Code:
#!/bin/sh
event=$1
arg1=$2
arg2=$3
filename=$4
# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.
if [ $event = "MSG" ]; then
case "$arg1" in
IN)
if [ $arg2 = "masteraccount@jabber.ru" ]
then
var=`/bin/cat $filename`
cmd=`echo "$var" | cut -c1-4`;
cmdarg=`echo "$var" | cut -c6-`;
echo "cmd($cmd) cmdarg($cmdarg)" >> /opt/etc/.mcabber/log
if [ $cmd = "exec" ]; then
$cmdarg > /opt/etc/.mcabber/result && (echo "/say_to -n -f /opt/etc/.mcabber/result $arg2" > /opt/etc/.mcabber/mcabber.fifo) &
elif [ $cmd = "!get" ]; then
cd /opt/etc/.mcabber
/opt/bin/curl -O $cmdarg && (echo "/say_to $arg2 Complete $cmdarg" > /opt/etc/.mcabber/mcabber.fifo) &
fi
echo "/say_to $arg2 Ok" > /opt/etc/.mcabber/mcabber.fifo
else
echo "/say_to $arg2 Ne ponyatno" > /opt/etc/.mcabber/mcabber.fifo
fi
/bin/rm $filename
;;
MUC)
# Groupchat message in room $arg2
if [ -n "$filename" && -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
OUT)
# Outgoing message for buddy $arg2
;;
esac
fi
у меня mcabber запускается файлом /opt/etc/init.d/S97mcabberPHP Code:
#!/bin/sh
export LANG="ru_RU.UTF-8"
/opt/bin/mcabber -f /opt/etc/.mcabber/mcabberrc >/dev/null 2>&1
Для начала нужно просто запустить mcabber и убедится что всё работаетPHP Code:
#!/bin/sh
#
# Startup script for mcabber
#
# Stop myself if running
PIDFILE=/opt/var/run/mcabber.pid
case $1 in
start)
[ -f /opt/etc/.mcabber/mcabber.fifo ] && rm /opt/etc/.mcabber/mcabber.fifo
/opt/bin/screen -dmS mcabbers /opt/bin/mcabber-run
sleep 2s
rm ${PIDFILE}
pidof mcabber > ${PIDFILE};
;;
stop)
[ -f ${PIDFILE} ] && kill `cat ${PIDFILE}` ;;
*)
echo "usage: $0 (start|stop)"
exit 1
esac
возможно авторизовать ваш masteraccount с которого вы будете управлять роутером, убедится что сообщения приходят и отправляются.PHP Code:
/opt/bin/mcabber -f /opt/etc/.mcabber/mcabberrc
потом запускать выполнив
(если у вас эти скрипты не выполняются автоматически при загрузке)PHP Code:
/opt/etc/init.d/S97mcabber start
на всякий случай вставил в cron.hourly скрипт mcabber-online
Скрипт обработки сообщений выложил в урезанном виде, т.к. у меня там много специфических функций, типа выдача истории падения канала, поэтому не исключены ошибки. Лучше скачать архив с исходниками mcabber там несколько примеров скриптов.PHP Code:
#!/bin/sh
if [ -w /opt/etc/.mcabber/mcabber.fifo ]
then
echo "/connect /status away" > /opt/etc/.mcabber/mcabber.fifo
fi
Ну и в линуксе я не сильно разбираюсь, поэтому некоторые решения могут кому-то показаться кривоватыми.
Last edited by supremacy; 30-07-2009 at 07:01. Reason: исправление ошибок
Все установил, связи есть, как команды посылать, в каком виде их набирать?
и еще, после запуска попадаещ видимо в общий чат, и в каталоге event_files копятся файлы, что с ними делать?
в jabber есть понятие закладок. По умолчанию этот чат добавлен в закладки вашего аккаунта. Я удалил его из закладок используя клиент windows, вы может попробовать сделать это командой /room bookmark [add|del] [-autojoin|+autojoin]
Файлы копятся видимо потому что я выложил урезанный скрипт. В полном скрипте в конце обработки сообщений всегда вызывалась команда удаления файла события.
по командам читайте MCABBER(1) Manual PagePHP Code:
/bin/rm $filename
как отправить сообщение из командной строки я вроде показал:
отправить текст:
отправить содержимое тектового файла result:PHP Code:
echo "/say_to account@jabber.ru Ok" > /opt/etc/.mcabber/mcabber.fifo
PHP Code:
echo "/say_to -n -f /opt/etc/.mcabber/result account@jabber.ru" > /opt/etc/.mcabber/mcabber.fifo
Пример скрипта eventcmd идущего с исходниками:
Я не стал расписывать то что делает скрипт, но кое-какие пояснения видимо требуются.PHP Code:
#! /bin/sh
#
# Sample events script for mcabber
# Plays a sound when receiving a message
#
# To use this script, set the "events_command" option to the path of
# the script (see the mcabberrc.example file for an example)
#
# MiKael, 2005-07-15
# The following sound comes with the gtkboard package,
# you can modify this line to play another one...
CMD_MSG_IN="/usr/bin/play /usr/share/sounds/gtkboard/machine_move.ogg"
event=$1
arg1=$2
arg2=$3
filename=$4
# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.
if [ $event = "MSG" ]; then
case "$arg1" in
IN)
# Incoming message from buddy $arg2
$CMD_MSG_IN > /dev/null 2>&1
if [ -n "$filename" -a -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
MUC)
# Groupchat message in room $arg2
if [ -n "$filename" && -f "$filename" ]; then
# We could process filename here...
/bin/rm $filename
fi
;;
OUT)
# Outgoing message for buddy $arg2
;;
esac
elif [ $event = "STATUS" ]; then
# Buddy $arg2 status is $arg1 (_, O, I, F, D, N, A)
echo > /dev/null
elif [ $event = "UNREAD" ]; then
# $arg1 is the number of unread buffers
echo > /dev/null
fi
if [ $arg2 = "masteraccount@jabber.ru" ] только с этого аккаунта будут приниматься команды
если отправить с masteraccount@jabber.ru роутеру сообщение exec ps то он ответит Ok, а затем пришлёт список запущенных процессов.
если отправить !get http://www.lilotux.net/~mikael/mcabb.../mcabber.1.txt он ответит Ok, а как только скачает файл пришлёт Complete http://www.lilotux.net/~mikael/mcabb.../mcabber.1.txt
Если у кого-то возник вопрос а зачем весь этот огород городить? Отвечу просто у моего провайдера даже за деньги нельзя получить белый IP, а таким образом я получаю возможность посылать команды роутеру хоть с мобильного телефона, хоть в браузере из почтового ящика gmail.com
Last edited by supremacy; 03-02-2009 at 06:45.
2supremacy
спасибо.
уже сделал примерно также, но у вас в некоторых местах красивее получилось
единственное:
$cmdarg > /opt/etc/.mcabber/result ... в result пишет только stdout. Я сделал
$cmdarg > /opt/etc/.mcabber/result 2>&1 ... чтоб приходили и сообщения об ошибках.