среда, 8 мая 2013 г.

[Powershell] Узнаем внешний IP-адрес маршрутизатора и отсылаем его на почту

Иногда возникает такая ситуация, что IP-адресация в удаленном офисе динамическая, и, как правило, раз в сутки IP-адрес роутера меняется. Можно, конечно, использовать технологию DynDNS, но мы-то не ищем легких путей.
Итак, скрипт узнает внешний IP-адрес с помощью сервиса checkip.dyndns.com, сравнивает его с ранее узнанным, который записан в файле C:\Users\Public\ext_ip.txt. Если новый IP-адрес отличается, то записывает в файл новый IP-адрес и отсылает его на почтовый ящик, зарегистрированный в нашем примере на Mail.Ru.

$ext_ip="C:\Users\Public\ext_ip.txt"
$def_ip="0.0.0.0"
$FileExists = Test-Path $ext_ip
If ($FileExists -eq $False) {$def_ip | Out-File $ext_ip}


$web=New-Object net.webclient
$new_ip=$web.DownloadString("http://checkip.dyndns.com") -replace "[^\d\.]"
$old_ip=Get-Content -Path $ext_ip -TotalCount 1
 

If (-not ($new_ip -eq $old_ip)) {
$new_ip | Out-File $ext_ip
$EmailFrom = "check_ip_address@mail.ru"
$EmailTo = "check_ip_address@mail.ru"
$Subject = $new_ip
$Body = ""
$SMTPServer = "smtp.mail.ru"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
$SMTPClient.EnableSsl = $True
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("check_ip_address@mail.ru", "P@ssw0rd");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) }


Соответственно, на сервере, где выполняется скрипт, должен быть разрешен исходящий трафик по портам 80 и 25.

Можно пойти еще дальше и доработать скрипт, записывая IP-адрес в опубликованную папку на FTP-сервере, а на другой стороне написать скрипт, который загружает новый IP-адрес из этой папки и меняет A-запись на локальном DNS-сервере, попутно очищая кэш DNS-записей.

Комментариев нет:

Отправить комментарий