Страница 1 из 1

MPD + shell

Добавлено: 2008-04-07 15:15:24
Rita
Здравствуйте. Помогите пожалуйста.
У нас на работе стоит биллинг к нему идут множество скриптов, с некоторыми я разобралась путем логики и чтения документации, но все же пока в шелле не особо, вот нужна ваша помощь.
Итак есть скрипт:

Код: Выделить всё

#!/bin/sh
MHOST=127.0.0.1  # mpd host
MPORT=5005       # mpd telnet port
. /etc/billing.conf
for IP in `echo "select inet_ntoa(assigned_ip) from sessionsradius,vgroups where vgroups.vg_id=sessionsradius.vg_id and vgroups.login=\"$1\"" | /usr/local/mysql/bin/mysql -bN -h${rdbhost} -u${rdbuser} -p${rdbpass} ${rdbname} | grep -v assigned_ip`;
do
for bundle in `echo "billing nopersonal bundle" | telnet $MHOST $MPORT | grep Opened | awk '{print $1}'`;
do
if echo -e "bundle $bundle\\nshow iface" grep "${IP}$" >/dev/null 2>&1
then
echo -e "bundle $bundle\\nclose phys" >/dev/null 2>&1
fi
done;
done;
exit 0;
Принцип в том, что скрипт смотрит в базе какой айпи выдан в биллинге, по нему ищет бандл и соответственный отключает.
Но он прекрасно работал в мпд3 а сейчас стоит мпд4.4 в нем уже идет через авторизацию, т.е. надо в этом скрипте сделать так чтобы он входя авторизовался и дальше делал свое дело. Может кто подскажет как его переделать чтобы с авторизацией он был? :?
Буду очень признательна. Спасибо.

Re: MPD + shell

Добавлено: 2008-04-08 12:01:51
Rita
Так что, ни кто не обратит внимания? :(
Вот пробую сделать через перл, пока в тестовом режиме, но при запуске обрывается на 13 строке(выделена), и выдается ошибка "pattern match timed-out at ./killmpd.pl line 13"
В чем может быть проблема?
#!/usr/bin/perl
$hostname= "127.0.0.1";
$port= "5005";
$login = "billing";
$pass = "nopersonal";
use Net::Telnet ();
$t = new Net::Telnet ;
$t->open(Host => $hostname,
Port => $port,
Timeout => 10);
$t->waitfor('/Username:.*$/');
$t->print($login);
$t->waitfor('/Password:.*$/');
$t->print($pass);
#$t->print("bundle pptp0");
#$t->print("close");
#$t->print("exit");
exit 0;

Re: MPD + shell

Добавлено: 2008-04-08 16:36:21
hizel
модифицировал так

Код: Выделить всё

#!/usr/bin/perl
$hostname = 'localhost';
$port = 5005;
$login = 'billing';
$pass = 'nopersonal';
use Net::Telnet ();
$t = new Net::Telnet(Host => $hostname,
         Port => $port,
         Binmode => '\015\012',
         Prompt => '/\[\]/',
          Timeout => 10);
$ok = $t->login($login, $pass);
exit 0;
когда пишете на perl не используйте двойные кавычки без необходимости ;)

Re: MPD + shell

Добавлено: 2008-04-08 18:13:27
Rita
О уже ответили :wink: , ну тогда и я внесу свою лепту, у меня путем измышлений и поисков вот такой код получился, причем работоспособный тоже. Кстати как и у вас :) Вот еще нужно будет сидеть думать как теперь из биллинга сделать выборку чтобы вставить нужное подключение :cry:

Код: Выделить всё

#!/usr/bin/perl
$hostname= "127.0.0.1";
$port= "5005";
$login = "foo";
$pass = "bar";
use Net::Telnet;
$t = new Net::Telnet (Timeout => 10,Port => '5005',Binmode => '\015\012', Prompt
$t->open(Host => $hostname, Port => $port,Timeout => 10);
#$t->open('$hostname');
$t->waitfor('/Username:.*$/');
$t->print($login);
$t->waitfor('/Password:.*$/');
$t->print($pass);
$t->print("bundle pptp0");
$t->print("close");
$t->print("exit");
exit 0;
п.с.
модераторы извините что тема к перлу сдивнулась, но так уж получилось, если что перенесите ее в перл раздел.
и еще, тут смайлики какие-то не красивые, ну можно было бы и еще добавить.

Re: MPD + shell

Добавлено: 2008-04-08 19:55:16
hizel
общение с mysql, что то типа

Код: Выделить всё

use DBI;

my ($server,$db,$user,$password) = ('mysql.host','billing','blabla','lala');
my $dbh = DBI->connect("DBI:mysql:host=$server;database=$db","$user","$password") or die 'can\'t connect sql server :(';
my $sth = $dbh->prepare('select inet_ntoa(assigned_ip) from sessionsradius,vgroups where vgroups.vg_id=sessionsradius.vg_id and vgroups.login=?');
$sth->execute($ARGV[0]);

while(@row = $sth->fetchrow_array()){
  print "$row[0]\n";
}
что касается Net::Telnet обратите внимание на cmd
в http://search.cpan.org/~jrogers/Net-Tel ... /Telnet.pm
если уж использовать эту библиотеку то со всеми удобствами ;)

Пы.Сы. в этой ветке нет модераторов, так что ваше обращение скорее к администраторам
форума ;)