Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Найти внешний IP?

    Найти внешний IP?

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Найти внешний IP?, RouterOS
     
    ahead
    Guest
    #1
    0
    03.06.2013 15:50:00
    В этой ситуации как я могу узнать публичный IP-адрес, стоящий за модемом, с помощью скрипта Mikrotik?

    Пользователи<–>Switch<–>Mikrotik<--------->Modem<----?—>Internet

    *   Модем получает динамический и публичный IP-адрес от интернета.
    *   Mikrotik получает локальный IP-адрес от модема через DHCP.
     
     
     
    creatin
    Guest
    #2
    0
    02.12.2019 23:00:00
    Вот: :put [:resolve myip.opendns.com server=208.67.222.222]
     
     
     
    anoka
    Guest
    #3
    0
    29.07.2013 12:20:00
    Привет! Вот скрипт для запроса и установки IP-адреса внешней сетевой карты. Скопируйте в меню System/Scripts в Winbox:

    Имя: Refresh_External_IP

    Источник:

    ```
    # Задаем необходимые переменные
    :global extinterface "ether1-gateway"
    :global ExtIpListName "external-ip"
    :global extip ""
    :global oldextip ""

    # Получаем текущий IP-адрес на этой сетевой карте.
    :local extip2 [/ip address get [/ip address find interface=$extinterface ] address];
    :set extip [:pick $extip2 0 [:find $extip2 "/"]];
    :log info "Current external IP = $extip"

    :if ([:len [/ip firewall address-list find list=$ExtIpListName]] > 0) do={
     :set oldextip [/ip firewall address-list get [/ip firewall address-list find list=$ExtIpListName] address];
     :if ($oldextip != $extip) do={
       /ip firewall address-list set [/ip firewall address-list find list=$ExtIpListName address=$oldextip] address=$extip
       :log info "External IP relpace from $oldextip to $extip"
     } else={
       :log info "External IP not changed"
     };
    } else={
     /ip firewall address-list add list=$ExtIpListName address=$extip
     :log info "New external IP added: $extip"
    };
    ```

    Скопируйте в терминал:

    ```
    add name=Refresh_External_IP policy=ftp,read,write,test,winbox,api source="# Задаем необходимые переменные\r \n:global extinterface "ether1-gateway"\r \n:global ExtIpListName "external-ip"\r \n:global extip ""\r \n:global oldextip ""\r \n\r \n# Получаем текущий IP-адрес на этой сетевой карте.\r \n:local extip2 [/ip address get [/ip address find interface=$extinterfac e ] address];\r \n:set extip [:pick $extip2 0 [:find $extip2 "/"]];\r \n:log info "Current external IP = $extip"\r \n\r \n:if ([:len [/ip firewall address-list find list=$ExtIpListName]] > 0) d o={\r \n :set oldextip [/ip firewall address-list get [/ip firewall address-li st find list=$ExtIpListName] address];\r \n :if ($oldextip != $extip) do={\r \n /ip firewall address-list set [/ip firewall address-list find list =$ExtIpListName address=$oldextip] address=$extip\r \n :log info "External IP relpace from $oldextip to $extip"\r \n } else={\r \n :log info "External IP not changed"\r \n };\r \n} else={\r \n /ip firewall address-list add list=$ExtIpListName address=$extip\r \n :log info "New external IP added: $extip"\r \n};\r \n"
    ```

    Используйте как есть, бесплатно!
     
     
     
    zap71
    Guest
    #4
    0
    21.12.2013 09:23:00
    Выложил слегка изменённую версию скрипта anoka и php-скрипт, который отвечает за часть, связанную с "внешним" сервером, если хотите разместить это на собственном веб-сервере. Всё это можно найти в статье Determine External IP Address With RouterOS на TechBlog Harry.
     
     
     
    jimmyz
    Guest
    #5
    0
    27.02.2016 09:08:00
    Привет всем. Небольшой комментарий к посту/скрипту zap71 в "«SOURCE_LABEL»" .../myrosip.php?who=«SOURCE_LABEL»" mode=http dst-path=mypublicip.txt. Не используйте пробелы, например, «Fantastic ROS». Это расстраивает сервер.

    2016-02-27 10:30:03 Error xx.xx.128.85 403 GET /myrosip.php?who=Fantastic ROS HTTP/1.0 Mikrotik/6.x Fetch 462 Apache access
    2016-02-27 10:30:03 Error xx.xx.128.85 ModSecurity: [file "/etc/httpd/crs/activated_rules/modsecurity_crs_20_protocol_violations.conf"] [line "52"] [id "960911"] [rev "2"] [msg "Invalid HTTP Request Line"] [data "GET /myrosip.php?who=Fantastic ROS HTTP/1.0"] [severity "WARNING"] [ver "OWASP_CRS/2.2.8"] [maturity "9"] [accuracy "9"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/INVALID_REQ"] [tag "CAPEC-272"] Предупреждение. Совпадение с "rx ^(?i:(?:[a-z]{3,10}\\\\s+(?:\\\\w{3,7}?://[\\\\w\\\\-\\\\./]*(?::\\\\d+)?)?/[^?#]*(?:\\\\?[^#\\\\s]*)?(?:#[\\\\S]*)?|connect (?:\\\\d{1,3}\\\\.){3}\\\\d{1,3}\\\\.?(?::\\\\d+)?|options \\\\*)\\\\s+[\\\\w\\\\./]+|get /[^?#]*(?:\\\\?[^#\\\\s]*)?(?:#[\\\\S]*)?)$" против "REQUEST_LINE" требуется. [hostname "mysite.com"] [uri "/myrosip.php"] [unique_id "VtFei5BMStIADvtxPsMAAAAV"] Apache error
    2016-02-27 10:30:03 Error xx.xx.128.85 ModSecurity: [file "/etc/httpd/crs/activated_rules/modsecurity_crs_30_http_policy.conf"] [line "78"] [id "960034"] [rev "2"] [msg "HTTP protocol version is not allowed by policy"] [data "ROS HTTP/1.0"] [severity "CRITICAL"] [ver "OWASP_CRS/2.2.8"] [maturity "9"] [accuracy "9"] [tag "OWASP_CRS/POLICY/PROTOCOL_NOT_ALLOWED"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A6"] [tag "PCI/6.5.10"] Предупреждение. Совпадение с "within %{tx.allowed_http_versions}" против "REQUEST_PROTOCOL" требуется. [hostname "mysite.com"] [uri "/myrosip.php"] [unique_id "VtFei5BMStIADvtxPsMAAAAV"] Apache error
    2016-02-27 10:30:03 Error xx.xx.128.85 ModSecurity: [file "/etc/httpd/crs/activated_rules/modsecurity_crs_49_inbound_blocking.conf"] [line "26"] [id "981176"] [msg "Inbound Anomaly Score Exceeded (Total Score: 5, SQLi=0, XSS=0): Last Matched Message: HTTP protocol version is not allowed by policy"] [data "Last Matched Data: GET /myrosip.php?who=Fantastic ROS HTTP/1.0"] Доступ запрещен с кодом 403 (фаза 2). Совпадение шаблона "(.*)" в TX:960911-OWASP_CRS/PROTOCOL_VIOLATION/INVALID_REQ-REQUEST_LINE. [hostname "mysite.com"] [uri "/myrosip.php"] [unique_id "VtFei5BMStIADvtxPsMAAAAV"] Apache error
    2016-02-27 10:30:03 Error xx.xx.128.85 ModSecurity: [file "/etc/httpd/crs/activated_rules/modsecurity_crs_60_correlation.conf"] [line "37"] [id "981204"] [msg "Inbound Anomaly Score Exceeded (Total Inbound Score: 5, SQLi=0, XSS=0): HTTP protocol version is not allowed by policy"] Предупреждение. Оператор GE совпал с 5 в TX:inbound_anomaly_score. [hostname "mysite.com"] [uri "/myrosip.php"] [unique_id "VtFei5BMStIADvtxPsMAAAAV"]
     
     
     
    GuilhermePinheiro
    Guest
    #6
    0
    28.07.2016 23:34:00
    Большое спасибо… Я использовал это в скрипте для обновления DDNS… Создать скрипт (код ниже) с именем no-ip_ddns_update создать scheduler (или скопировать строку ниже в терминал). /system scheduler add comment=“Update No-IP DDNS” disabled=no interval=5m name=no-ip_ddns_update on-event=no-ip_ddns_update policy=read,write,test Код скрипта: Автоматическое обновление DNS Динамический NO-IP #--------------- Определите значения в этом разделе для настройки ------------------ Данные для входа в NO-IP :local noipuser “EMAIL ИЛИ ИМЯ ПОД ВХОДА В NOIP” :local noippass “ПАРОЛЬ ДЛЯ ВХОДА” Определите имя веб-сервера, IP-адрес которого нужно обновить. Имя сервера не может содержать пробелы. Замените значение в кавычках именем (URL) вашего сервера. Чтобы указать несколько серверов, разделяйте их запятыми. :local noiphost “HOST, НАПРИМЕР: host.ddns.net ” #------------------------------------------------------------------------------------ Изменять больше ничего не нужно :global previousIP /tool fetch url=“ http://myip.dnsomatic.com/ ” mode=http dst-path=mypublicip.txt :local currentIP [file get mypublicip.txt contents] Удалить маску сети с IP-адреса :for i from=( [:len $currentIP] - 1) to=0 do={ :if ( [:pick $currentIP $i] = “/”) do={ :set currentIP [:pick $currentIP 0 $i] } } :if ($currentIP != $previousIP) do={ :log info “No-IP: Текущий IP $currentIP не равен предыдущему IP, требуется обновление” :set previousIP $currentIP URL для обновления. Обратите внимание, что “\3F” — это шестнадцатеричный код знака вопроса (?). Требуется, так как ? является специальным символом в командах. :local url "[http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP](<#0 >)"
      :local noiphostarray
      :set noiphostarray [:toarray $noiphost]
      :foreach host in=$noiphostarray do={
          :log info "No-IP: Отправка обновления для $host"
          /tool fetch url=($url . "&hostname=$host") user=$noipuser password=$noippass mode=http dst-path=("no-ip_ddns_update-" . $host . ".txt")
          :log info "No-IP: Сервер $host обновлен до IP $currentIP"
      } } else={ :log info “No-IP: Предыдущий IP $previousIP равен текущему IP, обновление не требуется.” }
     
     
     
    thiagomedeiros
    Guest
    #7
    0
    31.07.2016 18:15:00
    Да, это можно сделать так: :global currentIP [:resolve myip.opendns.com server=208.67.222.222]; Это всегда будет возвращать твой публичный IP. Скачивать/запрашивать файл не требуется.
     
     
     
    codeck
    Guest
    #8
    0
    05.12.2016 01:08:00
    И вот ещё вопрос: как автоматически пробросить публичный IP в брандмауэр NAT? Нужно перенаправить трафик с публичного IP на локальный роутер.
     
     
     
    raxs
    Guest
    #9
    0
    05.12.2016 17:39:00
    Чтобы включить и активировать эту службу: [admin@MikroTik] /ip cloud set ddns-enabled=yes [admin@MikroTik] /ip cloud print ddns-enabled: yes update-time: yes public-address: 159.148.172.205 dns-name: 529c0491d41c.sn.mynetname.net status: updated Чтобы включить обновление времени из облачной службы: [admin@MikroTik] > ip cloud set update-time=yes Чтобы включить автоматическое определение часового пояса: [admin@MikroTik] > system clock set time-zone-autodetect=yes Свойства Подменю: /ip cloud Tapatalk kullanarak iPhone aracılığıyla gönderildi
     
     
     
    creatin
    Guest
    #10
    0
    03.12.2019 22:54:00
    Этот вариант работает: перед запуском скрипта создайте файл в Windows под названием currentIP.txt, напишите в нём какой-нибудь IP-адрес, например, 1.1.1.1, сохраните файл и загрузите его на ваш роутер. Запустите скрипт ниже:
    :local filename "currentIP.txt"
    :local ip [file get currentIP.txt contents];
    delay 1
    :local cip ([:resolve myip.opendns.com server=208.67.222.222]);
    delay 1
    :local sub ("New WAN address: $cip");
    :local bod ("old WAN IP = $ip \nnew WAN IP = $cip");
    delay 3
    :if ($ip != $cip) do={/tool e-mail send to="your.email@email.com" subject="$sub" body="$bod";
    delay 4
    /file set $filename contents=$cip
    }
    } Установите расписание для запуска скрипта каждые 10 минут (с момента запуска), и он будет отправлять вам электронное письмо каждый раз, когда ваш IP-адрес WAN меняется. Если изменений нет, электронных писем не будет отправлено.
     
     
     
    pcunite
    Guest
    #11
    0
    17.02.2020 23:35:00
    Мне недавно понадобилось это сделать. Вот полный рабочий пример, который отправляет JSON на PHP-сервер, а затем отправляет данные по электронной почте. Примените это к вашему роутеру.

    # Установите этот скрипт и назовите его "GetIPAddress"

    # Включите планировщик для запуска один раз в день и при запуске
    /system scheduler add name=RunGetIPAddress1 interval=1d on-event="{:delay 10; /system script run GetIPAddress}"
    /system scheduler add name=RunGetIPAddress2 start-time=startup on-event="{:delay 120; /system script run GetIPAddress}"

    # СКРИПТ
    {
    # Объявите переменные
    :local filename "GetIPAddress.txt";
    :local sNewIP ([:resolve myip.opendns.com server=208.67.222.222]);
    :local sOldIP ("");
    :local sURL ("https://server/GetIPAddress.php");
    :local sDate [/system clock get date];
    :local sTime [/system clock get time];
    :local sIdentity [/system identity get name];

    # Сообщение для отправки при изменении IP-адреса
    :local sFrom ("PutSomethingHere");
    :local sSubject ("IP Address");
    :local sBody ("Identity: $sIdentity | IP Address: $sNewIP | Date: $sDate| Time: $sTime");

    # Начните выполнение

    # Создайте файл, если его нет
    :if ([:len [/file find name=$filename]] <= 0) do={:put ("create file"); /file print file=$filename; delay 3; /file set $filename contents="file."}

    # Прочитайте файл
    :set $sOldIP [/file get $filename contents];

    # Проверьте, изменился ли IP-адрес
    :if ($sOldIP != $sNewIP) do={

    # Отправьте строку JSON на сервер
    :log info "GetIPAddress: posting data to server";
    /tool fetch keep-result=no mode=https http-method=post url="$sURL" http-data="{\"From\":\"$sFrom\",\"Subject\":\"$sSubject\",\"Body\":\"$sBody\"}";

    # Обновите IP-адрес в файле
    :log info "GetIPAddress: updating IP Address in file";
    /file set $filename contents=$sNewIP;
    } else={
    :log info "GetIPAddress: ip address has not changed";
    }
    }
    Создайте файл GetIPAddress.php, скопируйте/вставьте этот код и затем разместите его на вашем сервере:
    <?php

    // Уведомления от MikroTik устройств в поле. Настройте поле $To ниже.

    // Настройка времени
    date_default_timezone_set('UTC');

    // Прочитайте тип запроса
    $request = http_build_query($_POST);
    $size = strlen($request);

    // Проверьте, не отправил ли клиент необработанные данные POST
    if($size == 0)
    {
    // Если клиент не отправляет заголовок "Content-Type", то данные POST хранятся в php://input ($HTTP_RAW_POST_DATA).

    $request = file_get_contents("php://input");
    $size = strlen($request);
    $_POST = $request;
    }

    // Действуйте в зависимости от типа запроса
    if($size != 0)
    {
    // POST-запрос
    ProcessPost();
    }
    else
    {
    echo "error";
    }

    // Клиент отправляет строку JSON, выглядящую так:
    // "{'From': 'from', 'Subject': 'subject', 'Body': 'body'}";
    function ProcessPost()
    {
    # Установите адрес электронной почты, на который должны отправляться данные.
    $To = 'test@mailinator.com';

    // Прочитайте строку JSON POST в объект
    $contents = utf8_encode($_POST);
    $json = json_decode($contents);

    // Создайте свойства письма
    $subject = $json->{'Subject'};
    $headers = 'Content-Type: text/plain; charset=utf-8' . "\n" . 'Content-Transfer-Encoding: 8bit' . "\n" . 'From: ' . $json->{'From'} . "\n" . 'Reply-To: ' . $To . "\n" . 'X-Mailer: PHP/' . phpversion();
    $message = $json->{'Body'};

    // Отправьте письмо
    mail($To, $subject, $message, $headers);
    }

    ?>
     
     
     
    mac86
    Guest
    #12
    0
    13.05.2020 15:13:00
    Спасибо!!! Всё ещё работает!
     
     
     
    fiadman
    Guest
    #13
    0
    19.02.2022 14:22:00
    Просто напиши: return [:resolve myip.opendns.com server=208.67.222.222];
     
     
     
    Maximiliam1st
    Guest
    #14
    0
    15.06.2018 08:20:00
    Респект https://wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_dynDNS. Облачный DNS от Mikrotik периодически отваливался, из-за чего пришлось оформлять платную подписку dyndns. Следующий скрипт и расписание отлично работают в 6.x и отлично работают за NAT / private ip. Он будет обновлять dyn с вашим внешним IP. Создайте скрипт с именем: dynDNS. Разместите следующий скрипт в боксе:
    [Codebox]
    global ddnsuser "username"
    global ddnspass "password"
    global ddnshost whatever.your.hostname.is
    global ipddns [:resolve $ddnshost];
    global ipfresh [:resolve myip.opendns.com server=208.67.222.222];
    :if ([ :typeof $ipfresh ] = nil ) do={
    :log info (“DynDNS: No ip address on $theinterface .”)
    } else={
    :for i from=( [:len $ipfresh] - 1) to=0 do={
    :if ( [:pick $ipfresh $i] = “/”) do={
    :set ipfresh [:pick $ipfresh 0 $i];
    }
    }
    :if ($ipddns != $ipfresh) do={
    :log info (“DynDNS: IP-DynDNS = $ipddns”)
    :log info (“DynDNS: IP-Fresh = $ipfresh”)
    :log info “DynDNS: Update IP needed, Sending UPDATE…!”
    :global str “/nic/update?hostname=$ddnshost&myip=$ipfresh&wildcard=NOCHG&mx=NOCHG&bac­kmx=NOCHG”
    /tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser password=$ddnspass dst-path=(“/DynDNS.”.$ddnshost)
    :delay 1
    :global str [/file find name=“DynDNS.$ddnshost”];
    /file remove $str
    :global ipddns $ipfresh
    :log info “DynDNS: IP updated to $ipfresh!”
    } else={
    :log info “DynDNS: dont need changes”;
    }
    }
    [/Codebox]
    Запланируйте его (введите следующее в терминальное окно):
    [Codebox]
    /system scheduler add interval=1m name=dynDNS on-event=dynDNS policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api start-time=startup
    [/Codebox]
     
     
     
    miankamran7100
    Guest
    #15
    0
    17.09.2019 06:34:00
    Пожалуйста, напиши код здесь, когда мой роутер перезагрузится без корректного выключения. А потом отправь этот файл мне на почту.
     
     
     
    Jotne
    Guest
    #16
    0
    17.09.2019 16:29:00
    Почему использовать такой сложный код, когда можно просто зайти в IP Cloud и включить его? Тогда роутер сделает всё за тебя. Чтобы получить IP-адрес в коде: :put [/ip cloud get public-address]
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры