Скрипт отправки внешнего IP на почту (если он изменился).

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Аватара пользователя
GDragon
Сообщения: 80
Зарегистрирован: 20 ноя 2014, 15:48

Зачем оно нужно - объяснять не стану :)
Задействует те же переменные что и viewtopic.php?f=14&t=6195

Ранее выкладывал в комментариях, сейчас решил отдельную тему запилить.
 Тело скрипта
# Check ip and send to e-mail if changed
#---------- Config below this line ----------

# set WAN interface name
:local WAN "WAN Interface name";
# set e-mail smtp server name
:local smtpserv [:resolve "your SMTP server"];
# set e-mail username
:local Eaccount "sending e-mail user";
# set e-mail password
:local Epassword "sending e-mail password";
# set e-mail main recipient
:local Etomail "e-mail recipient";

#---------- Config above this line ----------

:global StoredIP
:local sysname [/system identity get name];
:local sysver [/system package get system version];
:local CurrIP
:log info "Get WAN interface IP address (New IP to e-mail script)"

# Get WAN interface IP address
:set CurrIP [/ip address get [/ip address find interface=$WAN] address]
:set CurrIP [:pick [:tostr $CurrIP] 0 [:find [:tostr $CurrIP] "/"]]

:if ([:len $CurrIP] = 0) do={
:log error ("Could not get IP for interface " . $WAN)
:error ("Could not get IP for interface " . $WAN)
} else={:log info "IP from $WAN get. (New IP to e-mail script)"}
:log info "Checking & sending IP if needed."

# Check IP address & send if needed

:if ($StoredIP != $CurrIP) do={
/tool e-mail send from=$Eaccount to=$Etomail \
server=$smtpserv port=465 user=$Eaccount password=$Epassword \
subject=("Mikrotik $sysname IP changed (" . [/system clock get date] . \
")") body=("New $sysname IP: $CurrIP.\nRouterOS \
version: $sysver\nTime and Date stamp: " . [/system clock get time] . " \
" . [/system clock get date]);
:log info "Send new IP to e-mail complete"
:set StoredIP "$CurrIP"
:log info "Stored IP Updated"
} else={:log info "IP not changed"}


23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

а если ай-пи не реальный, то узнать можно таким методом:
# get the current IP address from the internet (in case of double-nat)
/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:local result [/file get dyndns.checkip.html contents]
# parse the current IP result
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "</body>" -1]
:global currentIP [:pick $result $startLoc $endLoc]

ну и потом обрабатываем результат как угодно :-)


Heavymetall2000
Сообщения: 8
Зарегистрирован: 02 сен 2016, 21:42

Здравствуйте! Подскажите этот скрипт надо ежесекундно выполнять в Sheduler? У меня не работает на железке RB2011UiAS-2HnD OS 6.36 (stable)


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Зачем же так часто мониторить? Если вы жизненно зависите от этого адреса, 30-60 секунд, если же адрес нужен для определенных маневров, тогда по необходимости. Вы ответьте на вопрос: "Вам адрес зачем?" Если ответ будет точный и вразумительный, то и период выполнения подберете правильно.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Heavymetall2000
Сообщения: 8
Зарегистрирован: 02 сен 2016, 21:42

podarok66 писал(а):Зачем же так часто мониторить? Если вы жизненно зависите от этого адреса, 30-60 секунд, если же адрес нужен для определенных маневров, тогда по необходимости. Вы ответьте на вопрос: "Вам адрес зачем?" Если ответ будет точный и вразумительный, то и период выполнения подберете правильно.



Я его изменил под себя, но не работает ((( :

Код: Выделить всё

# Check ip and send to e-mail if changed
#---------- Config below this line ----------

# set WAN interface name
:local WAN "ether10";
# set e-mail smtp server name
:local smtpserv [213.180.204.38];
# set e-mail Mikro@yandex.ru
:local Eaccount "Mikro@yandex.ru";
# set e-mail 12345678
:local Epassword "12345678";
# set e-mail main recipient
:local Etomail "Kostik@gmail.com";

#---------- Config above this line ----------

:global StoredIP
:local sysname [/system identity get name];
:local sysver [/system package get system version];
:local CurrIP
:log info "Get WAN interface IP address (New IP to e-mail script)"

# Get WAN interface IP address
:set CurrIP [/ip address get [/ip address find interface=$WAN] address]
:set CurrIP [:pick [:tostr $CurrIP] 0 [:find [:tostr $CurrIP] "/"]]

:if ([:len $CurrIP] = 0) do={
:log error ("Could not get IP for interface " . $WAN)
:error ("Could not get IP for interface " . $WAN)
} else={:log info "IP from $WAN get. (New IP to e-mail script)"}
:log info "Checking & sending IP if needed."

# Check IP address & send if needed

:if ($StoredIP != $CurrIP) do={
/tool e-mail send from=$Eaccount to=$Etomail \
server=$smtpserv port=587 user=$Eaccount password=$Epassword \
subject=("Mikrotik $sysname IP changed (" . [/system clock get date] . \
")") body=("New $sysname IP: $CurrIP.\nRouterOS \
version: $sysver\nTime and Date stamp: " . [/system clock get time] . " \
" . [/system clock get date]);
:log info "Send new IP to e-mail complete"
:set StoredIP "$CurrIP"
:log info "Stored IP Updated"
} else={:log info "IP not changed"}


В чем может быть ошибка?


gmx
Модератор
Сообщения: 3290
Зарегистрирован: 01 окт 2012, 14:48

Посмотрите в скрипте порт SMTP у вас именно такой?


Heavymetall2000
Сообщения: 8
Зарегистрирован: 02 сен 2016, 21:42

gmx писал(а):Посмотрите в скрипте порт SMTP у вас именно такой?


Да, такой! С такой учеткой у меня отлично скрипт работает отправки лог-файла на почту. А этот скрипт ничего в логах не отображает... У меня провайдер билайн, через l2tp протокол авторизация...


gmx
Модератор
Сообщения: 3290
Зарегистрирован: 01 окт 2012, 14:48

А IP менялся?? Там ведь условие в скрипте, что он будет работать только если текущий IP не равен ранее запомненному.
И интерфейс WAN у вас не ether10, а что-то вроде pptp_out_1... ну или как-то похоже.


Heavymetall2000
Сообщения: 8
Зарегистрирован: 02 сен 2016, 21:42

gmx писал(а):А IP менялся?? Там ведь условие в скрипте, что он будет работать только если текущий IP не равен ранее запомненному.
И интерфейс WAN у вас не ether10, а что-то вроде pptp_out_1... ну или как-то похоже.


Всем спасибо! Разобрался! Пришлось немного изменить под себя и заработало )))


dariusii
Сообщения: 7
Зарегистрирован: 02 июл 2018, 09:33

Код: Выделить всё

[iron@MikroTik] > :local WAN "7-sky";
[iron@MikroTik] > :local smtpserv [:resolve "smtp.gmail.com"];
[iron@MikroTik] > :local Eaccount "fooname@gmail.com";
[iron@MikroTik] > :local Epassword "foopass";
[iron@MikroTik] > :local Etomail "secondfooname@gmail.com";
[iron@MikroTik] > 
[iron@MikroTik] > :global StoredIP
[iron@MikroTik] > :global StoredIP
[iron@MikroTik] > :local sysname [/system identity get name];
[iron@MikroTik] > :local sysver [/system package get system version];
[iron@MikroTik] > :local CurrIP
[iron@MikroTik] > :log info "Get WAN interface IP address (New IP to e-mail script)"
[iron@MikroTik] > 
[iron@MikroTik] > :set CurrIP [/ip address get [/ip address find interface=$WAN] address]
syntax error (line 1 column 6)
ессно, гуглить :set CurrIP жесть. это может быть любая переменная для такого случая. то бишь, народ-то где-то тоже сталкивался, но поиск приводит к чему-то вот такому.


Ответить