С консолькой тяжело в mpd4 :( Ну как бы её нету :)
Посоветовали не смотреть даже в сторону 3.18...
Пробовал на 3.18, не получается убить соеденение :(Нашел как убить соеденение - только 2-мя способами, и оба не хотят работать:
http://www.rostovlinux.ru/content/view/934/56/
Здесь для управления NAS'ом используется консоль mpd, поэтому запускать mpd следует с дополнительными ключами: -a MHOST -c MPORT, где MHOST и MPORT нужно заменить на прослушиваемые ip и порт соответсвенно.
Скрипт прерывания сессии:
#!/usr/local/bin/bash
MHOST=127.0.0.1 # mpd host
MPORT=5555 # mpd telnet port
IP="$3";
test -z "$IP" && exit 1
for bundle in `echo "bundle" | /usr/bin/nc $MHOST $MPORT | grep Opened | awk '{print $1}'`;
do
if echo -e "bundle $bundle\\nshow iface" | /usr/bin/nc $MHOST $MPORT | grep "${IP}$" >/dev/null 2>&1
then
echo -e "bundle $bundle\\nclose phys" | /usr/bin/nc $MHOST $MPORT >/dev/null 2>&1
fi
done;
exit 0;
2.
Этот пытался запустить локально - висит, ничего не делает...
Вот 100% рабочий скрипт:
mpd_kill.pl
#!/usr/bin/perl
if( $ARGV[3] eq '' ) { die 'Usage: mpddown user nasip userip nasport'; };
$linkname='pptp'; ## имя линка без номера (links.conf, mpd.conf)
$maxng=40; ## номер последнего линка. первый должен быть 0 (ноль)
$user=$ARGV[0];
$nasip=$ARGV[1];
$userip=$ARGV[2];
$nasport=$ARGV[3]; if( $nasport > $maxng ) { $nasport=1; };
$nastelnetport=5005;
use IO::Socket;
sub checklink;
$sock = IO::Socket::INET->new(
PeerAddr => $nasip,
PeerPort => $nastelnetport,
Proto => 'tcp') or die "Can not connect to mpd!\n$!";
$sock->autoflush(1);
while (<$sock>){ print; last; }; ## читаем ввод из сокета
while (<$sock>){ print; last; }; ## пропускаем приветствие
while (<$sock>){ print; last; }; ## всего 3 строки
printf($ARGV[0]);
$portn=$nasport;
sprintf("PORT NO %d",portn);
checklink;
if( $user eq $luser ) {
print $sock "close\n"; }
else {
$portn++;
while( ($portn != $nasport) && ($user ne $luser) ) {
if( $portn > $maxng ) { exit 0};
checklink;
if( $user eq $luser ) {
print $sock "close\n";
};
$portn++;
} ;
};
close $sock;
exit 0;
sub checklink {
print $sock "link pptp",$portn,"\n"; ## выбрали линк
print $sock "show radius\n"; ## запросили инфу о линке
while (<$sock>){ ## обрабатываем в цикле ввод
print;
@words=split(' ');
$luser=$words[2];
last if( $words[0] eq 'Authname' ); ## ищем строку с именем пользователя
};
};
, а в файле nibs.conf должна быть след. строчка:
kill_program = "${sbindir}/mpd_kill.pl %{User-Name} %{NAS-IP-Address} %{Client-IP-Address} %{NAS-Port}