оповещение об отсутствии интернета
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
возможно все-таки из-за "неавторизованности" клиента
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
совсем просто то можно так.
1-й файл - bash-скрипт, который нужно "где-то" создать (например, в той-же папке /root), и запускать по расписанию через cron
По результатам пинга в файл /usr/lib/cgi-bin/inet_status пишется либо 1 (интернет есть), либо 0 (интернета нет).
2-я часть - это код который нужно добавить в начало hotspotlogin.cgi, вместо того твоего пинга.
Он просто считывает этот самый файл и ищет в нем 1. Если не найдено (счетчик совпадений равен 0), то тогда - юзеру сообщение и выход
1-й файл - bash-скрипт, который нужно "где-то" создать (например, в той-же папке /root), и запускать по расписанию через cron
Код: Выделить всё
#!/bin/bash
# Месторасположение файла
file=/usr/lib/cgi-bin/inet_status
# Сервер, по пингу на который определяется - есть доступ в интернет или нет.
test_server=www.google.com
if ping -c3 $test_server &> /dev/null
then
echo "1" > $file
chmod 666 $file
else
echo "0" > $file
chmod 666 $file
fi
exit
2-я часть - это код который нужно добавить в начало hotspotlogin.cgi, вместо того твоего пинга.
Код: Выделить всё
$file = "inet_status";
$count = "0";
$templ = "1";
if (! open LOGF, "<$file") {
die "Can't open file $file!";
} else {
while (<LOGF>){
chomp;
if ($_ =~ m/$templ/g){
$count += 1;
}
}
close LOG_FILE;
if ($count == 0) {
print "Content-type: text/html\n\n";
print "Твое сообщение, которое хочешь засветить клиентам о том, что тырнета нет";
exit;
}
}
Re: оповещение об отсутствии интернета
Дак дело в том что скрипт:Dmitry писал(а):возможно все-таки из-за "неавторизованности" клиента
use Net::Ping;
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
if (!$pong->ping("www.ya.ru"))
{
print "Content-type: text/html\n\n";
print "сообщение";
exit;
}
по идее должен выполнится на сервере, запуская его именно на сервере все работает,
когда обращаюсь к нему с клиента он вроде как работает но при любом исходе (прошёл пинг или нет) всегда попадает на print "сообщение";
Создается впечатление что переменная pong всегда получает одно и то же значение в случае если скрипт активируется с клиента
вот в чем странность то.
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
попробуй на время встромить туда такой код
увидишь, пингует или нет
Код: Выделить всё
$msg = system("ping -c3 www.google.com");
print $msg;
Re: оповещение об отсутствии интернета
В этом коде ошибку выбивает, но то что пингует это факт, даже небольшая задержка по времени видна в случае валидного домена, вот бы как то результат переменной понять
#!/usr/bin/perl
use Net::Ping;
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
$pong->ping("8.8.8.8");
print "Content-type: text/html\n\n";
print $pong;
exit;
на клиенте Net:Ping=HASH(0x9c499d0), адрес (9c499d0) при обновлении в браузере постоянно меняется
#!/usr/bin/perl
use Net::Ping;
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
$pong->ping("8.8.8.8");
print "Content-type: text/html\n\n";
print $pong;
exit;
на клиенте Net:Ping=HASH(0x9c499d0), адрес (9c499d0) при обновлении в браузере постоянно меняется
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
Вообще-то, те мои две строки стоит вставлять ПОСЛЕ строкиDazzler писал(а):то что пингует это факт, даже небольшая задержка по времени видна в случае валидного домена,
Код: Выделить всё
print "Content-type: text/html\n\n";
http://wifi-hotspot.zp.ua/cgi-bin/11.cgi
Только там у меня код этот вписан дважды, и в первый раз введено несуществующее доменное имя.
По поводу Net:Ping мне нечего сказать, я им не пользовался, и что значат получаемые вами значения, я не знаю.
Re: оповещение об отсутствии интернета
интересный нюанс
код:
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
$p = $pong->ping("www.google.com");
print "Content-type: text/html\n\n";
print $p;
на клиенте выводится '0' (процедура выполняется с задержкой), если задать неверный домен то ничего не выводиться, и без задержки, в обеих случаях нет сообщений об ошибках. Вопрос только в одном, как разрулить 0 и пустоту ?
код:
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
$p = $pong->ping("www.google.com");
print "Content-type: text/html\n\n";
print $p;
на клиенте выводится '0' (процедура выполняется с задержкой), если задать неверный домен то ничего не выводиться, и без задержки, в обеих случаях нет сообщений об ошибках. Вопрос только в одном, как разрулить 0 и пустоту ?
Re: оповещение об отсутствии интернета
так работаетВообще-то, те мои две строки стоит вставлять ПОСЛЕ строкии тогда в самой странице вы будете наблюдать вывод пинга. Вот примерКод: Выделить всё
print "Content-type: text/html\n\n";
http://wifi-hotspot.zp.ua/cgi-bin/11.cgi
Только там у меня код этот вписан дважды, и в первый раз введено несуществующее доменное имя.
Код: Выделить всё
print "Content-type: text/html\n\n"; $msg = system("ping -c3 www.google.com"); print $msg;
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
очень просто - ноль это НЕ пустота !Dazzler писал(а):интересный нюанс
код:
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
$p = $pong->ping("www.google.com");
print "Content-type: text/html\n\n";
print $p;
на клиенте выводится '0' (процедура выполняется с задержкой), если задать неверный домен то ничего не выводиться, и без задержки, в обеих случаях нет сообщений об ошибках. Вопрос только в одном, как разрулить 0 и пустоту ?
в принципе, можно попытаться сразу оба условия вставить в проверку:
Код: Выделить всё
if ($p ne "" && $p == 0) {
# Это действия при успешной проверке. В принципе нам тут вроде как делать ничего не нужно, но между фигурными скобками должно быть хоть что-то, поэтому присвоим 1 отфонарной переменной
$a = 1;
} else {
# это место неуспешной проверки. Тут тогда и выводите ваше сообщение что нет интернета и потом выход из скрипта
print "Content-type: text/html \n\n";
print "Интернета нет, бла-бла-бла...";
exit;
}
Re: оповещение об отсутствии интернета
а так проще:
Ну наконец то, головная боль закончилась, спасибо Дмитрий, а то я никак понять не могу в чем же разница между "0" и "пустотой", для меня это одно и то же как бы, было
Кстати, я думаю можно пинговать DNS провайдера, он на пинг не ответит только в одном случае
Ну, теперь можно заняться и DNS'ом.
Код: Выделить всё
#!/usr/bin/perl
use Net::Ping;
$myhost = 8.8.8.8 # dns провайдера
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
$p = $pong->ping($myhost);
if (!($p ne "" && $p == 0))
{
print "Content-type: text/html \n\n";
print "Интернета нет";
exit;
}
Кстати, я думаю можно пинговать DNS провайдера, он на пинг не ответит только в одном случае
Ну, теперь можно заняться и DNS'ом.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей