наши услуги

спецпредложения

сообщение с сайта

verification code
Главная » БЛОГ » Сети » Скрипт для удаленной смены пароля на точке доступа D-Link DWL-2100AP

Комментарии (0) Автор:

Скрипт для удаленной смены пароля на точке доступа D-Link DWL-2100AP

В свое время возникла задача — раз в сутки менять WPA-PSK ключ на точке доступа, при этом поднимать для подобной попсы RADIUS было как-то нелогично, да еще и несколько пакетиков кофе обнаружилось рядом...

В результате 20-минутного мозгового штурма было принято решение написать PERL-овый скрипт, который менял бы ключ по телнету и отсылал его на электронную почту клиента.

В процессе возник вопрос, чем же, собственно, этот ключ генерировать? Порты, как всегда, пришли на помощь, и была обнаружена следующая приятнейшая тулза :

Port: pwgen-2.06
Path:/usr/ports/sysutils/pwgen2
Info: A small, powerful, GPL'ed password generator

Потому,

# cd /usr/ports/sysutils/pwgen2
# make install clean

Далее, для подключения по телнету и отсылки писем по SMTP PERLу  нужны модули Net::Telnet и Net::SMTP, так что

# perl -MCPAN -e 'install Net::Telnet'
# perl -MCPAN -e 'install Net::SMTP'

И, наконец-то, можем приступать к скрипту. Заранее скажу, что скрипт 100% протестирован на точке D-Link DWL-2100AP с версией прошивки:

D-Link Access Point wlan1 -> version
 SOFTWARE_VERSION: v2.40eu
Сам скрипт:
#!/usr/bin/perl -w
use Net::Telnet();
use Net::SMTP();
$log="/usr/local/etc/wifi_pass/log";   # Файл, в который будем записывать историю смены паролей
$telnet_log="/usr/local/etc/wifi_pass/telnet_log";   # Файл, в который будем складывать "дамп протокола" общения с точкой
$pwgen="/usr/local/bin/pwgen -1ncB";    # Путь к pwgen и ключи запуска, чтобы "рандомные" пароли были человекочитабельны
$mail_smtp="smtp.myisp.net";               # Сервер, через который будем слать почту
$mail_from="it\@mycompany.com.ua";         # Адрес, от имени которого шлем уведомления
@mail_to_user= qw/ client1@client-company.com.ua client2@client-company.com.ua /; # Клиенты, получающие уведомление о смене пароля
@mail_to_admin= qw/ admin1@mycompany.com.ua admin2@mycompany.com.ua /;  # Админы, получающие уведомление о процессе смены пасса
$username="ACCESSPOINTADMINLOGIN";     # Админский логин в точку
$passwd="ACCESSPOINTADMINPASSWORD";    # Пасс к админскому логину в точку
$ap="192.168.1.25";     # Айпи точки
$date="/bin/date";
chomp($date = `$date`);
#--------------------Открываем логфайл для записи--------------------------
open(LOG,">> $log");
print LOG "========================\n";
print LOG "$date\n";
#--------------------Генерячим пароль посредством pwgen --------------------
chomp($pass_new = `$pwgen`);
print LOG "$pass_new\n\n\n";
close LOG;
#--------------------Подключаемся к точке по телнету и меняем пасс-----------
$t = new Net::Telnet (Timeout => 10, Input_log => "$telnet_log") || die "Conversation opening failed"; # Логируем все, что происходит.
$t->open($ap);
$t->login($username, $passwd) || die "Login or password incorrect";
$t->cmd("set passphrase");
$t->cmd("$pass_new");
$t->errmode(sub {die @_ unless $_[0] =~ /eof/}); # Немаловажный момент - после ребута точки скрипт аварийно завершает работу,
$t->cmd("reboot");                               # так что пишем обработчик ошибки.
$t->close;
#---------------Пишем лог общения с точкой-----------------------------------------
open (TLN, "$telnet_log");
@telnet_log = ;
close (TLN);
#---------------Уведомляем пользователей--------------------------------------------------
foreach $mail_to_user(@mail_to_user){
 $smtp = Net::SMTP->new("$mail_smtp");
 $smtp->mail("$mail_from");
 $smtp->to("$mail_to_user");
 $smtp->data();
 $smtp->datasend("To: $mail_to_user\n");
 $smtp->datasend("Subject: Client-Company NEW WiFi Password\n");
 $smtp->datasend("$date\n");
 $smtp->datasend("-=====================================================-\n");
 $smtp->datasend("Password to access in the Client-Company Wi-Fi Zone was been changed\n");
 $smtp->datasend("New Password:  $pass_new\n");
 $smtp->datasend("-=====================================================-\n");
 $smtp->datasend("If you have any questions, please contact admin by e-mail: it\@mycompany.com.ua\n");
 $smtp->dataend();
 $smtp->quit;
}
#--------------Уведомляем админов--------------------------------------------------------
foreach $mail_to_admin(@mail_to_admin){
 $smtp = Net::SMTP->new("$mail_smtp");
 $smtp->mail("$mail_from");
 $smtp->to("$mail_to_admin");
 $smtp->data();
 $smtp->datasend("To: $mail_to_admin\n");
 $smtp->datasend("Subject: Client-Company NEW WiFi Password\n");
 $smtp->datasend("$date\n");
 $smtp->datasend("-=====================================================-\n");
 $smtp->datasend("Password to access in the Client-Company Wi-Fi Zone was been changed\n");
 $smtp->datasend("New Password:  $pass_new\n");
 $smtp->datasend("-=====================================================-\n");
 $smtp->datasend("log of the changing password:");
 $smtp->datasend("@telnet_log\n");
 $smtp->dataend();
 $smtp->quit;
}

Далее, делаем

# chmod +x наш_супер_скрипт.pl
И добавляем в cron задание для запуска скрипта
0       5       *       *       3       root    /usr/local/etc/wifi_pass/script.pl
Вот и все, IT'S ALIVE ! ! !

продажа серверов бу
FREEhost.com.ua - качественный хостинг и регистрация доменов во всех зонах
Украинский хостинг - UNIX хостинг & ASP хостинг

Write a comment

  • Required fields are marked with *.

If you have trouble reading the code, click on the code itself to generate a new random code.