пятница, 17 апреля 2015 г.

Передаем адрес-лист с одного Mikrotik на другой.

Создаем на своем ПК пустой файл list.txt. Перетаскиваем его в свой микротик.(это нужно сделать единоразово). Потом запускаешь скрипт:
:global iplist;
 :foreach i in=[/ip firewall address-list find where list=test] do={ :set iplist ($iplist . "\r\n" . [/ip firewall address-list get  $i address])};
 /file set [/file find name=list.txt] contents="$iplist";
 delay 4;
 /tool fetch mode=ftp upload=yes address=0.0.0.0 port=2121 user=admin password=admin ascii=yes src-path=list.txt dst-path=list.txt
 delay 6;
 :set iplist;
 /file remove list.txt;
 /file print file=list.txt;
 delay 6;
 /file set list.txt contents=""
  Вместо  :global iplist; можно использовать локальную переменную, тогда очищать ее каждый раз не надо, строчка :set iplist; не нужна!
  Его в шедуллер! Этот скрипт  передаст файл на другой микротик с нужными данными(в нужном формате!), очистит переменную, перезапишет файл list.txt с пустым значением(т.е. все подготовит для следующего выполнения).

  На принимающей стороне:
:if ( [/file get [/file find name=list.txt] size] > 0 ) do={
     /ip firewall address-list remove [/ip firewall address-list find list=suspendedaccts]
     :local content [/file get [/file find name=list.txt] contents] ;
     :local contentLen [ :len $content ] ;
     :put ( "=>" . $content . "<=" )
     :local lineEnd 1
     :local line ""
     :local lastEnd [ :tonum 1 ]


     :do {
       :set line [ :pick $content $lastEnd [ :find $content "\r\n" $lastEnd ] ]
       :set lineEnd [:find $content "\n" $lastEnd ] ;
       :put "lineEnd=$lineEnd< - lastEnd=$lastEnd - line=$line<"
     :if ( [ :len $content ] = 0 ) do={
       :put "UNIX"
       :set line [ :pick $content $lastEnd [ :find $content "\r\n" $lastEnd ] ]
        :set lineEnd [:find $content "\n" $lastEnd ] ;
     }
       :set lastEnd ( $lineEnd + 1 ) ;

       :if ( [:pick $line 0 1] != "\n" ) do={
       :put ">$line<"
         :if ( [:len $line ] > 0 ) do={ /ip firewall address-list add list=suspendedaccts address=$line }
       }
     } while ($lineEnd < $contentLen)
   }
 :local lineEnd 1 и  :local lastEnd [ :tonum 1 ] ставим 1, потому-как файл  list.txt с первой пустой строчкой. Такой файл получается после отработки первого скрипта.
  

Подписаться на новые статьи.

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

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