<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Mikrotik.moscow [тема: Статистика пула IP-адресов]</title>
		<link>http://mikrotik.moscow</link>
		<description>Новое в теме Статистика пула IP-адресов форума RouterOS на сайте Mikrotik.moscow [mikrotik.moscow]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 01 Aug 2026 06:50:12 -0400</pubDate>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423930">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Этот скрипт, вероятно, был написан задолго до того, как в RouterOS появилась прямая поддержка подсетевой арифметики. Если у вас версия 6 или 7, то он должен работать. Замените это:<br /><br /># Преобразование в массив октетов (замена '.' на ',') &nbsp;<br />:for x from=0 to=([:len [:tostr $minaddress]] - 1) do={  <br /> &nbsp; &nbsp;:if ([:pick [:tostr $minaddress] $x ($x + 1)] = ".") do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp;:set minaddress ([:pick [:tostr $minaddress] 0 $x] . "," . [:pick [:tostr $minaddress] ($x + 1) [:len [:tostr $minaddress]]])  <br /> &nbsp; &nbsp;} &nbsp;<br />} &nbsp;<br /><br />:for x from=0 to=([:len [:tostr $maxaddress]] - 1) do={  <br /> &nbsp; &nbsp;:if ([:pick [:tostr $maxaddress] $x ($x + 1)] = ".") do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp;:set maxaddress ([:pick [:tostr $maxaddress] 0 $x] . "," . [:pick [:tostr $maxaddress] ($x + 1) [:len [:tostr $maxaddress]]])  <br /> &nbsp; &nbsp;} &nbsp;<br />} &nbsp;<br /><br /># Вычисление доступных адресов для текущего диапазона &nbsp;<br />:if ([:len [:toarray $minaddress]] = [:len [:toarray $maxaddress]]) do={  <br /> &nbsp; &nbsp;:set maxindex ([:len [:toarray $minaddress]] - 1)  <br /> &nbsp; &nbsp;:for x from=$maxindex to=0 step=-1 do={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;# Вычисляем 256^($maxindex - $x) &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set tmpint 1 &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;:if (($maxindex - $x) &gt; 0) do={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:for y from=1 to=($maxindex - $x) do={ :set tmpint (256 * $tmpint) } &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set tmpint ($tmpint * ([:tonum [:pick [:toarray $maxaddress] $x]] - [:tonum [:pick [:toarray $minaddress] $x]]) )  <br /> &nbsp; &nbsp; &nbsp; &nbsp;:set pooladdresses ($pooladdresses + $tmpint) &nbsp;<br /> &nbsp; &nbsp;} &nbsp;<br />} &nbsp;<br /><br /># Добавляем текущий диапазон к общему количеству доступных адресов пула &nbsp;<br />:set pooladdresses ($pooladdresses + 1) &nbsp;<br /><br />На это: &nbsp;<br />:set pooladdresses ($pooladdresses + ([:toip $maxaddress] - [:toip $minaddress]))  <br /><br />Я думал, что так скрипт будет работать намного быстрее, но похоже, что это особо не влияет. Если у вас много DHCP-пулов, скрипт всё равно долго выполняется. Ещё можно было бы для ускорения поднять poolused наверх и добавить проверку с условием, что если пул пустой — пропускать его. Но всё равно, если пулов много, будет медленно. &nbsp;<br /><br />Вот мой переработанный код с локальными переменными в областях видимости и проверкой if poolused &gt; 0:<br /><br />:local criticalthreshold 85 &nbsp;<br />:local warnthreshold 70 &nbsp;<br /><br />/ip pool { &nbsp;<br /> &nbsp; :put ("Статистика IP-пулов") &nbsp;<br /> &nbsp; :put ("------------------") &nbsp;<br /><br /> &nbsp; # Обход всех IP-пулов &nbsp;<br /> &nbsp; :foreach p in=[find] do={  <br /><br /> &nbsp; &nbsp; &nbsp;:local poolname [get $p name]  <br /> &nbsp; &nbsp; &nbsp;:local pooladdresses 0 &nbsp;<br /> &nbsp; &nbsp; &nbsp;:local poolused [:len [used find pool=[:tostr $poolname]]]  <br /> &nbsp; &nbsp; &nbsp;:local minaddress &nbsp;<br /> &nbsp; &nbsp; &nbsp;:local maxaddress &nbsp;<br /> &nbsp; &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp;:if ($poolused &gt; 0) do={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;:local line (" &nbsp; &nbsp; " . $poolname) &nbsp;<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp;# Обход диапазонов IP текущего пула &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;:foreach r in=[:toarray [get $p range]] do={  <br /><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Получаем минимальный и максимальный адреса &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:local findindex [:find [:tostr $r] "-"]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:if ([:len $findindex] &gt; 0) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set minaddress [:pick [:tostr $r] 0 $findindex]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set maxaddress [:pick [:tostr $r] ($findindex + 1) [:len [:tostr $r]]]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set minaddress [:tostr $r]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set maxaddress [:tostr $r]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp;<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:set pooladdresses ($pooladdresses + ([:toip $maxaddress] - [:toip $minaddress]))  <br /> &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp;<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp;:local poolpercent (($poolused * 100) / $pooladdresses) &nbsp;<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp;# Вывод информации &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set line ([:tostr $line] . "  [" . $poolused . "/" . $pooladdresses . "]")  <br /> &nbsp; &nbsp; &nbsp; &nbsp;:set line ([:tostr $line] . "  " . $poolpercent . " % занято")  <br /><br /> &nbsp; &nbsp; &nbsp; &nbsp;# Цветовое выделение в зависимости от порогов заполнения &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;:if ( [:tonum $poolpercent] &gt; $criticalthreshold ) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:log error ("IP-пул " . $poolname . " заполнен на " . $poolpercent . "%") &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:put ([:terminal style varname] . $line)  <br /> &nbsp; &nbsp; &nbsp; &nbsp;} else={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:if ( [:tonum $poolpercent] &gt; $warnthreshold ) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:log warning ("IP-пул " . $poolname . " заполнен на " . $poolpercent . "%") &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:put ([:terminal style syntax-meta] . $line)  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:put ([:terminal style none] . $line)  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp;<br /> &nbsp; &nbsp; &nbsp;} &nbsp;<br /> &nbsp; } &nbsp;<br />} <br />
			<i>20.09.2023 22:33:00, alcohol.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423930</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423930</guid>
			<pubDate>Wed, 20 Sep 2023 22:33:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423929">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Пока у вас настроена система электронной почты вот так: <noindex><a href="https://wiki.mikrotik.com/wiki/Manual:Tools/email" target="_blank" rel="nofollow" >https://wiki.mikrotik.com/wiki/Manual:Tools/email</a></noindex>, тогда измените: &nbsp;<br /># Отправка данных &nbsp;<br />:log info message=("script=pool pool=$poolname used=$poolused total=$pooladdresses") &nbsp;<br />на: &nbsp;<br /># Отправка данных &nbsp;<br />/tool e-mail send to=your.mail@gmail.com subject="test" body="script=pool pool=$poolname used=$poolused total=$pooladdresses" start-tls=yes &nbsp;<br /><br />Проверено — работает отлично. Но вы будете получать по одному письму на каждый пул. Это можно исправить. И вы не получите красивые графики, которые дает Splunk. Смотрите мою подпись. &nbsp;<br /><br />РЕДАКТИРОВАНИЕ &nbsp;<br />Чтобы протестировать в командной строке (cli), замените на: &nbsp;<br /># Отправка данных &nbsp;<br />:put ("script=pool pool=$poolname used=$poolused total=$pooladdresses") &nbsp;<br /><br />И добавьте [ перед первой строкой и ] после последней. Вырежьте и вставьте в cli для теста. <br />
			<i>21.06.2019 19:37:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423929</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423929</guid>
			<pubDate>Fri, 21 Jun 2019 19:37:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423928">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Очень полезный скрипт. Можно ли сделать так, чтобы информация DHCP приходила на почту? Можешь добавить это в скрипт? <br />
			<i>21.06.2019 19:12:00, plisken.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423928</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423928</guid>
			<pubDate>Fri, 21 Jun 2019 19:12:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423927">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Обновлённый скрипт для подсчёта аренды, отображаемой в ip dhcp-server lease, а не того, что используется в пуле, чтобы учесть все статические зарезервированные IP.<br /><br /># Сбор информации о DHCP пулах<br /># ----------------------------------<br />/ip pool {<br />	:local poolname<br />	:local pooladdresses<br />	:local poolused<br />	:local minaddress<br />	:local maxaddress<br />	:local findindex<br />	:local tmpint<br />	:local maxindex<br /><br />	# Перебор IP пулов<br />	:foreach pool in=[find] do={<br />		:set poolname [get $pool name]<br />		:set pooladdresses 0<br />		:set poolused 0<br /><br />		# Перебор IP-диапазонов текущего пула<br />		:foreach range in=[:toarray [get $pool range]] do={<br /><br />			# Получение минимального и максимального адресов<br />			:set findindex [:find [:tostr $range] "-"]<br />			:if ([:len $findindex] &gt; 0) do={<br />				:set minaddress [:pick [:tostr $range] 0 $findindex]<br />				:set maxaddress [:pick [:tostr $range] ($findindex + 1) [:len [:tostr $range]]]<br />			} else={<br />				:set minaddress [:tostr $range]<br />				:set maxaddress [:tostr $range]<br />			}<br /><br />			# Преобразование в массив октетов (замена '.' на ',')<br />			:for x from=0 to=([:len [:tostr $minaddress]] - 1) do={<br />				:if ([:pick [:tostr $minaddress] $x ($x + 1)] = ".") do={<br />					:set minaddress ([:pick [:tostr $minaddress] 0 $x] . "," . \<br />					[:pick [:tostr $minaddress] ($x + 1) [:len [:tostr $minaddress]]])<br />				}<br />			}<br /><br />			:for x from=0 to=([:len [:tostr $maxaddress]] - 1) do={<br />				:if ([:pick [:tostr $maxaddress] $x ($x + 1)] = ".") do={<br />					:set maxaddress ([:pick [:tostr $maxaddress] 0 $x] . "," . \<br />					[:pick [:tostr $maxaddress] ($x + 1) [:len [:tostr $maxaddress]]])<br />				}<br />			}<br /><br />			# Подсчёт доступных адресов в текущем диапазоне<br />			:if ([:len [:toarray $minaddress]] = [:len [:toarray $maxaddress]]) do={<br />				:set maxindex ([:len [:toarray $minaddress]] - 1)<br />				:for x from=$maxindex to=0 step=-1 do={<br />					# Вычисляем 256^($maxindex - $x)<br />					:set tmpint 1<br />					:if (($maxindex - $x) &gt; 0) do={<br />						:for y from=1 to=($maxindex - $x) do={ :set tmpint (256 * $tmpint) }<br />					}<br />					:set tmpint ($tmpint * ([:tonum [:pick [:toarray $maxaddress] $x]] - \<br />					[:tonum [:pick [:toarray $minaddress] $x]]))<br />					:set pooladdresses ($pooladdresses + $tmpint)<br />				}<br />			}<br /><br />			# Добавляем текущий диапазон к общему количеству доступных адресов пула<br />			:set pooladdresses ($pooladdresses + 1)<br /><br />		# /foreach range<br />		}<br /><br />		# Проверка, используется ли пул в DHCP или VPN, и вывод количества занятых аренды<br />		:local dname [/ip dhcp-server find where address-pool=$poolname]<br />		:if ([:len $dname] = 0) do={<br />			:set poolused [:len [used find pool=[:tostr $poolname]]]<br />		} else={<br />			:local dname [/ip dhcp-server get [find where address-pool=$poolname] name]<br />			:set poolused [:len [/ip dhcp-server lease find where server=$dname]]<br />		}<br /><br />		# Отправляем данные<br />		:log info message=("script=pool pool=$poolname used=$poolused total=$pooladdresses")<br /><br />	# /foreach pool<br />	}<br /># /ip pool<br />} <br />
			<i>21.06.2019 18:27:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423927</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423927</guid>
			<pubDate>Fri, 21 Jun 2019 18:27:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423926">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Нравится этот скрипт, но нашёл в нём большую ошибку. Он не учитывает DHCP IP, которые переведены в статические. /ip dhcp-server lease print показывает все IP во всех пулах, и статические, и динамические. /ip pool used print, который используется в скрипте, показывает только закреплённые IP. Для меня это всего лишь часть всех IP, и scoop показывает гораздо меньше используемых адресов, чем есть на самом деле. Если будет время, посмотрю, как исправить и получить правильные цифры. <br />
			<i>20.06.2019 22:26:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423926</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423926</guid>
			<pubDate>Thu, 20 Jun 2019 22:26:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423925">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Ребята, нужна скрипт для автоматической переадресации VLAN с одного порта на другой, если моя основная ссылка падает. То есть: если основной линк ether1 отключается, то созданные VLAN с ether1 автоматически переносились бы на ether2. Хочу сделать это для авто-резервирования линка. Спасибо, Shakib <br />
			<i>19.12.2018 09:05:00, Shakib.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423925</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423925</guid>
			<pubDate>Wed, 19 Dec 2018 09:05:00 -0500</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423924">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Ребята, нужна скрипт для переноса VLAN с одного порта на другой. То есть, если моя основная ссылка ether1 падает, созданные VLAN с ether1 автоматически переключаются на ether2. Хочу сделать это для автоматического резервирования канала. Спасибо, Shakib <br />
			<i>19.12.2018 09:01:00, Shakib.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423924</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423924</guid>
			<pubDate>Wed, 19 Dec 2018 09:01:00 -0500</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423923">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Где я могу посмотреть результат? Например, когда я делаю копипаст в терминал, результат виден, но если я запускаю скрипт, где тогда увидеть результат? В логах ничего нет. Спасибо. <br />
			<i>17.03.2018 04:21:00, nichky.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423923</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423923</guid>
			<pubDate>Sat, 17 Mar 2018 04:21:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423922">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Повторяю свой вопрос: можете показать код на примере 192.168.100.1/24, пожалуйста? Для меня это немного непонятно. Большое спасибо! <br />
			<i>16.03.2018 20:21:00, plisken.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423922</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423922</guid>
			<pubDate>Fri, 16 Mar 2018 20:21:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423921">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Можешь показать пример кода на основе 192.168.100.1/24, пожалуйста? Для меня это немного непонятно. Спасибо! <br />
			<i>24.06.2017 08:40:00, plisken.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423921</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423921</guid>
			<pubDate>Sat, 24 Jun 2017 08:40:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423920">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Извините, что разбудил эту очень старую тему. Недавно один автор запроса понадобилось кастомное решение для получения оповещений и записи статистики использования DHCP пула Mikrotik с помощью bash-скрипта на базе Linux. Я использовал этот скрипт и попытался вывести его на новый уровень. Bash-скрипт на Ubuntu удалённо запускает этот скрипт, получает результаты в файл, сохраняет данные в таблицах MySQL, форматирует вывод по желанию и отправляет письмо, если пул использован на XX %. Я сделал это решение — оно не слишком изящное и точно не профессиональное, но я многому научился. Это просто моя идея и её могущественный обмен, возможно, кто-то найдёт это полезным для других проектов. Просто мои пять копеек <noindex><a href="https://aacable.wordpress.com/2016/06/02/getting-out-of-the-box-solution-with-mikrotik-bash-mysql/" target="_blank" rel="nofollow" >https://aacable.wordpress.com/2016/06/02/getting-out-of-the-box-solution-with-mikrotik-bash-mysql/</a></noindex> <br />
			<i>02.06.2016 12:02:00, aacable.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423920</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423920</guid>
			<pubDate>Thu, 02 Jun 2016 12:02:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423919">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Привет, nest! Не мог бы ты поделиться конфигурацией для отправки результата скрипта по электронной почте? Буду благодарен за помощь. Спасибо, Nil. <br />
			<i>02.08.2014 09:21:00, nileshkahar.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423919</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423919</guid>
			<pubDate>Sat, 02 Aug 2014 09:21:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423918">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			dssmiktik — ты добавил это в вики? Мне кажется, этот скрипт станет очень полезным, когда я добавлю функцию отправки нам уведомлений на почту. Спасибо. У нас уже был один хотспот, куда внезапно набежало много посетителей, и мы быстро исчерпали IP-адреса (обычно за время аренды бывает 50-100 пользователей, а тут внезапно почти в 10 раз больше, с /23 у нас просто не было шансов справиться). Если бы этот скрипт нас вовремя оповестил, мы могли бы принять меры заранее, а не реагировать на звонки с жалобами, что клиенты не могут выйти в интернет. Ещё раз спасибо! <br />
			<i>08.01.2012 23:30:00, nest.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423918</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423918</guid>
			<pubDate>Sun, 08 Jan 2012 23:30:00 -0500</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423917">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			спасибо <br />
			<i>08.01.2012 08:20:00, huigezi.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423917</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423917</guid>
			<pubDate>Sun, 08 Jan 2012 08:20:00 -0500</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423916">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			СУПЕР! Вот что я так давно искал, а нашёл только сейчас в двухлетнем посте!!! СПАСИБО!! <br />
			<i>07.01.2012 11:29:00, m4rk0.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423916</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423916</guid>
			<pubDate>Sat, 07 Jan 2012 11:29:00 -0500</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Статистика пула IP-адресов</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423915">Статистика пула IP-адресов</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Я написал скрипт для сбора информации о занятых и доступных адресах во всех IP-пулах. Это может быть полезно, если у вас несколько пулов и нужно равномерно распределять нагрузку между ними. Кроме того, его можно использовать для отслеживания процента заполнения IP-пула с уведомлениями через логи, email или для автоматического запуска какого-либо действия. Скрипт работает с одним IP, диапазоном IP или несколькими диапазонами, заданными в пуле. &nbsp;<br /># Статистика по IP -&gt; Пул &nbsp;<br /># &nbsp;<br /># criticalthreshold = выводить название пула красным, если заполнение пула превышает этот % &nbsp;<br /># warnthreshold = выводить название пула желтым, если заполнение пула превышает этот % &nbsp;<br /><br />:local criticalthreshold 85 &nbsp;<br />:local warnthreshold 70 &nbsp;<br /><br /># Внутренние вычисления... &nbsp;<br /># ---------------------------------- &nbsp;<br />/ip pool { &nbsp;<br /> &nbsp; :local poolname &nbsp;<br /> &nbsp; :local pooladdresses &nbsp;<br /> &nbsp; :local poolused &nbsp;<br /> &nbsp; :local poolpercent &nbsp;<br /> &nbsp; :local minaddress &nbsp;<br /> &nbsp; :local maxaddress &nbsp;<br /> &nbsp; :local findindex &nbsp;<br /> &nbsp; :local tmpint &nbsp;<br /> &nbsp; :local maxindex &nbsp;<br /> &nbsp; :local line &nbsp;<br /><br /> &nbsp; :put ("Статистика IP-пулов") &nbsp;<br /> &nbsp; :put ("------------------") &nbsp;<br /><br /># Перебираем все IP-пулы &nbsp;<br /> &nbsp; :foreach p in=[find] do={  <br /><br /> &nbsp; &nbsp; &nbsp;:set poolname [get $p name]  <br /> &nbsp; &nbsp; &nbsp;:set pooladdresses 0 &nbsp;<br /> &nbsp; &nbsp; &nbsp;:set poolused 0 &nbsp;<br /> &nbsp; &nbsp; &nbsp;:set line "" &nbsp;<br /><br /> &nbsp; &nbsp; &nbsp;:set line (" &nbsp; &nbsp; " . $poolname) &nbsp;<br /><br /># &nbsp; Перебираем диапазоны IP в текущем пуле &nbsp;<br /> &nbsp; &nbsp; &nbsp;:foreach r in=[:toarray [get $p range]] do={  <br /><br /># &nbsp; &nbsp; &nbsp;Определяем минимальный и максимальный адрес &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; :set findindex [:find [:tostr $r] "-"]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; :if ([:len $findindex] &gt; 0) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:set minaddress [:pick [:tostr $r] 0 $findindex]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:set maxaddress [:pick [:tostr $r] ($findindex + 1) [:len [:tostr $r]]]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; } else={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:set minaddress [:tostr $r]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:set maxaddress [:tostr $r]  <br /> &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br /><br /># &nbsp; &nbsp; &nbsp; Преобразуем в массив октетов (замена '.' на ',') &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; :for x from=0 to=([:len [:tostr $minaddress]] - 1) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:if ([:pick [:tostr $minaddress] $x ($x + 1)] = ".") do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set minaddress ([:pick [:tostr $minaddress] 0 $x] . "," . [:pick [:tostr $minaddress] ($x + 1) [:len [:tostr $minaddress]]]) }  <br /> &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; :for x from=0 to=([:len [:tostr $maxaddress]] - 1) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:if ([:pick [:tostr $maxaddress] $x ($x + 1)] = ".") do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set maxaddress ([:pick [:tostr $maxaddress] 0 $x] . "," . [:pick [:tostr $maxaddress] ($x + 1) [:len [:tostr $maxaddress]]]) }  <br /> &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br /><br /># &nbsp; &nbsp; &nbsp;Считаем количество доступных адресов в текущем диапазоне &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; :if ([:len [:toarray $minaddress]] = [:len [:toarray $maxaddress]]) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:set maxindex ([:len [:toarray $minaddress]] - 1)  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:for x from=$maxindex to=0 step=-1 do={ &nbsp;<br /># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Вычисляем 256^($maxindex - $x) &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set tmpint 1 &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :if (($maxindex - $x) &gt; 0) do={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:for y from=1 to=($maxindex - $x) do={ :set tmpint (256 * $tmpint) } &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set tmpint ($tmpint * ([:tonum [:pick [:toarray $maxaddress] $x]] - [:tonum [:pick [:toarray $minaddress] $x]]) )  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :set pooladdresses ($pooladdresses + $tmpint) &nbsp;<br /># &nbsp; &nbsp; &nbsp; &nbsp; конец цикла for x &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp;<br /><br /># &nbsp; &nbsp; &nbsp;если длина массива $minaddress = длине $maxaddress &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br /><br /># &nbsp; &nbsp; &nbsp;Добавляем к общему количеству адресов один текущий диапазон (возвращаем к общему подсчёту) &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; :set pooladdresses ($pooladdresses + 1) &nbsp;<br /><br /># &nbsp; конец foreach r &nbsp;<br /> &nbsp; &nbsp; &nbsp;} &nbsp;<br /><br /># &nbsp; Теперь у нас есть общее число доступных адресов во всех диапазонах этого пула &nbsp;<br /># &nbsp; Получаем число занятых адресов в пуле &nbsp;<br /> &nbsp; &nbsp; &nbsp;:set poolused [:len [used find pool=[:tostr $poolname]]]  <br /> &nbsp; &nbsp; &nbsp;:set poolpercent (($poolused * 100) / $pooladdresses) &nbsp;<br /><br /># &nbsp; Выводим информацию &nbsp;<br /> &nbsp; &nbsp; &nbsp;:set line ([:tostr $line] . "  [" . $poolused . "/" . $pooladdresses . "]")  <br /> &nbsp; &nbsp; &nbsp;:set line ([:tostr $line] . "  " . $poolpercent . " % занято")  <br /><br /># &nbsp; Устанавливаем цвет вывода в зависимости от порогов заполнения &nbsp;<br /> &nbsp; &nbsp; &nbsp;:if ( [:tonum $poolpercent] &gt; $criticalthreshold ) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; :log error ("IP Pool " . $poolname . " заполнен на " . $poolpercent . "%") &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; :put ([:terminal style varname] . $line)  <br /> &nbsp; &nbsp; &nbsp;} else={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; :if ( [:tonum $poolpercent] &gt; $warnthreshold ) do={  <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:log warning ("IP Pool " . $poolname . " заполнен на " . $poolpercent . "%") &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:put ([:terminal style syntax-meta] . $line)  <br /> &nbsp; &nbsp; &nbsp; &nbsp; } else={ &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:put ([:terminal style none] . $line)  <br /> &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br /> &nbsp; &nbsp; &nbsp;} &nbsp;<br /><br /># конец foreach p &nbsp;<br /> &nbsp; } &nbsp;<br /># /ip pool &nbsp;<br />} <br />
			<i>29.03.2010 20:38:00, dssmiktik.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423915</link>
			<guid>http://mikrotik.moscow/forum/forum57/88146-statistika-pula-ip_adresov/message423915</guid>
			<pubDate>Mon, 29 Mar 2010 20:38:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
	</channel>
</rss>
