Итак, по просьбе желающих выкладываю скрипт для автоматического поднятия впн соединения, который, в случае если подвисла сессия -> сам заходит на страничку stat.elsite.ru и нажимает на кнопку сбросить сессию, скрипт написан не под нетворк скриптс, а под етканет, но адаптировать под себя у вас вполне получится:
[root@server ~]# cat checkinet.pl
#!/usr/bin/perl
use WWW::Curl::Easy;
use Date::Format;
use DateTime::Locale;
my $SERVER_ADDRESS = "https://stat.elsite.ru/";
my $INDEX_FILE = "index.php3";
my $RESET_FILE = "user_detail.php3";
my $LOGIN = "unlogin"; # Учетная запись вашей безлимитки
my $PASSWORD = "password"; # Пароль
my $INDEX_POST = "frmLogin=$LOGIN&frmPasswd=$PASSWORD";
my $RESET_POST = "frmOfferID=1&btnResetSession=%D1%E1%F0%EE%F1%E8%F2%FC+%F1%E5%F1%F1%E8%FE";
my $COOKIE_FILE = "/tmp/cookiefile.tmp";
my $BODY_FILE = "/tmp/bodyfile.tmp";
my $LOG_FILE = "/var/log/ifupppp0.log"; # Путь к лог файлу
my $TEST_HOST1 = "http://www.yandex.ru/"; # Страничка для проверки 1
my $TEST_HOST2 = "http://www.google.ru/"; # Страничка для проверки 2
my $INET_UP_CMD = "ifup ppp0"; # Команда для поднятия впн соединения
my $FW_RELOAD_CMD = "efw ppp0 all all flush; efw ppp0 all all start"; # Команда для перезагрузки фаервола
sub get_content
{
my $url = shift || die;
my $post = shift;
my $curl = new WWW::Curl::Easy;
my $ret = 0;
$curl->setopt(CURLOPT_DEBUGDATA, 0);
$curl->setopt(CURLOPT_URL, $url);
$curl->setopt(CURLOPT_HEADER, 0);
$curl->setopt(CURLOPT_SSL_VERIFYPEER, 0);
$curl->setopt(CURLOPT_NOPROGRESS, 1);
$curl->setopt(CURLOPT_NOBODY, 1);
$curl->setopt(CURLOPT_VERBOSE, 0);
if (open(BODY_FILE, " > ".$BODY_FILE))
{
$curl->setopt(CURLOPT_FILE, BODY_FILE);
$curl->setopt(CURLOPT_WRITEHEADER, BODY_FILE);
}
$curl->setopt(CURLOPT_COOKIEFILE, $COOKIE_FILE);
$curl->setopt(CURLOPT_COOKIEJAR, $COOKIE_FILE);
if ($post)
{
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, $post);
}
my $tt = $curl->perform;
if ($curl->errbuf)
{ $ret = -1; }
else
{ $ret = 1; }
if (BODY_FILE)
{ close(BODY_FILE); }
return ($ret);
}
print localtime()." Starting script.\n";
if ((get_content($TEST_HOST1) < 0) && (get_content($TEST_HOST2) < 0))
{
print localtime()." Internet connection not found.\n";
my $connected = 0;
open(LOGFILE, ">> ".$LOG_FILE);
printf (LOGFILE localtime()." Internet not connected, try to connect...\n");
print localtime()." Trying to start new connection.\n";
system ($INET_UP_CMD);
if ((get_content($TEST_HOST1) > 0) || (get_content($TEST_HOST2) > 0)) {
print localtime()." Connection success.\n";
printf (LOGFILE localtime()." Connected.\n");
$connected = 1;
} else {
print localtime()." Connection failed.\n";
printf (LOGFILE localtime()." Not connected, trying to reset session and connect...\n");
$connected = 0;
print localtime()." Trying to reset connection on the builling server.\n";
get_content($SERVER_ADDRESS);
get_content($SERVER_ADDRESS.$INDEX_FILE,$INDEX_POST);
get_content($SERVER_ADDRESS.$RESET_FILE,$RESET_POST);
print localtime()." Trying to start new connection.\n";
system ($INET_UP_CMD);
if ((get_content($TEST_HOST1) > 0) || (get_content($TEST_HOST2) > 0)) {
print localtime()." Connection success.\n";
printf (LOGFILE localtime()." Connected.\n");
$connected = 1;
} else {
print localtime()." Connection failed.\n";
printf (LOGFILE localtime()." Not connected.\n");
$connected = 0;
}
}
if ($connected == 1) {
print localtime()." Acceping new firewall rules.\n";
system($FW_RELOAD_CMD);
}
close (LOGFILE);
}
else
{ print localtime()." Connection already exist.\n"; }
[b][root@server ~]#[/b]