Bawiąc się skryptem - problem

Wszystkie tematy związane z tematyką systemu MikroTik.

Bawiąc się skryptem - problem

Postprzez _Toem » Wt, 25-02-2020 16:23

Jest dana lista Lista_1 Lista_2
Oczekiwane Nazwa1 Nazwa2

Lista_1 Lista ma wpisy po nazwie
Kod: Zaznacz cały
/ip firewall address-list add list=Lista_1 address="onet.pl" comment="wpis_1" 
/ip firewall address-list add list=Lista_1 address="wp.pl" comment="wpis_2" 
/ip firewall address-list add list=Lista_1 address="google.com" comment="wpis_3"
/ip firewall address-list add list=Lista_1 address="mrex.exs.pl" comment="wpis_4"


Lista_2 Lista ma wpisy po IP
Kod: Zaznacz cały
/ip firewall address-list add list=Lista_2 address="213.180.141.140" comment="opis_1" 
/ip firewall address-list add list=Lista_2 address="1.2.3.4" comment="opis_2" 
/ip firewall address-list add list=Lista_2 address="178.33.54.92" comment="opis_3"
# dowolny adres ip z listy mrex.exs.pl
/ip firewall address-list add list=Lista_2 address="2.3.4.5" comment="opis_4"


Założenie jest takie,
weź z Lista_2 adres IP i sprawdź w Lista_1 dla danego IP jaki ma wpis komentarza -> Nazwa1
mając Nazwa1 sprawdź z Lista_1 dla danego Nazwa1 jaki jest wpis komentarza -> Nazwa2

korzystając ze skryptu Lista
Kod: Zaznacz cały

:log info "====  START  ===="
#dane global aby latwiej było sledzic
:global adresIP ""
:global Nazwa1 ""
:global Nazwa2 ""

# robiac z reki

:global adresIP "1.2.3.4"
# nie dziala - skrypt nie konczy sie

:global adresIP "178.33.54.92"
#działa

# sprawdzajac listę Lista_2
:foreach poz in=[/ip firewall address-list find where list="Lista_2"] do=
:global adresIP [/ip firewall address-list get $poz address];
:global Nazwa1 ""
:global Nazwa2 ""

:global Nazwa1 [ip firewall address-list get [ find where list="Lista_1" && address=$adresIP] comment  ];
    :if ($Nazwa1 != "") do={
:global Nazwa2 [ip firewall address-list get [ find where list="Lista_1" && address=$Nazwa1] comment  ];
    }

:delay 3s
}
# skrypt nie konczy

:beep
#koniec
:log info "====  STOP  ===="



Jaki myk zastosować aby poprawić skrypt

teoretycznie dla 213.180.141.140 nazwa1->onet.pl nazwa2->wpis_1
teoretycznie dla 178.33.54.92 nazwa1->mrex.exs.pl nazwa2->wpis_4

ale niestety nie działa :(
_Toem
 
Posty: 25
Dołączył(a): Wt, 19-09-2017 15:51

Re: Bawiąc się skryptem - problem

Postprzez slx » Pt, 28-02-2020 14:29

Skrypt się nie wykonuje do końca dlatego, że podczas jego wykonania następuje błąd: "find" nie znajduje danego rekordu i przekazuje do "get" błędną wartość. Na szczęście można łapać błędy za pomocą polecenia "on-error" i na nie reagować lub ignorować. Nie za bardzo rozumiem Twojego opisu co chcesz osiągnąć, bo nie widzę powiązania "Lista_1" z "Lista_2", poza tym na "Lista_1" nie masz adresów IP, a ich tam szukasz. No i skrypt nic nie robi, poza ustawianiem zmiennych globalnych. Poniżej kod z ignorowaniem błędów.
Kod: Zaznacz cały
:log info "====  START  ===="
#dane global aby latwiej było sledzic
:global adresIP ""
:global Nazwa1 ""
:global Nazwa2 ""

# robiac z reki

#:global adresIP "1.2.3.4"
# nie dziala - skrypt nie konczy sie

#:global adresIP "178.33.54.92"
#działa

# sprawdzajac listę Lista_2
:foreach poz in=[/ip firewall address-list find where list="Lista_2"] do={
:global adresIP [/ip firewall address-list get $poz address];
:global Nazwa1 ""
:global Nazwa2 ""

:do {
  :global Nazwa1 [ip firewall address-list get [ find where list="Lista_1" && address=$adresIP] comment  ];
} on-error={}

:do {
    :if ($Nazwa1 != "") do={
:global Nazwa2 [ip firewall address-list get [ find where list="Lista_1" && address=$Nazwa1] comment  ];
    }
} on-error={}

:delay 3s
}
# skrypt nie konczy

:beep
#koniec
:log info "====  STOP  ===="
slx
Moderator
 
Posty: 475
Dołączył(a): Śr, 21-11-2007 11:33
Lokalizacja: Wrocław

Re: Bawiąc się skryptem - problem

Postprzez _Toem » Pt, 28-02-2020 18:01

Dzięki za wskazówki
testowałem również rozwiązania z kontrolą błędu jakie sugerujesz.
Dla jasności - jak zaimportujesz przykładowe listy do MT to zauważysz że tam gdzie masz po nazwie pojawiają się dynamiczne wpisy po IP,

Jaki jest cel a dosyć pewnie trywialny ale jednak - w oparciu o listy np z Pihole utworzyłem listę ( Lista_1) wpisów po nazwie [przykład lista Shodan] , następnie reguła sprawdza w ruchu czy adres IP znajduje się na liście (Lista_1) - jeżeli tak to zapisuje ten adres do (Lista_2) w postaci IP.
I teraz przeglądając IP (Lista_2) chcę wiedzieć pod jaka nazwą jest na (Lista_1). Pierwsze zapytanie (NAZWA1) da odpowiedź z komentarza, 2- gie zapytanie daje odpowiedź skąd (NAZWA2). W oparciu o uzyskane informacje tworzę wpis do StaticDNS

Przedstawiony skrypt (lista) jest w postaci poglądowej jedynie w celu prezentacji problemu

Tak wiem ze mogę od razu wszystkie wpisy zapisać jako staticDNS z ip 127.0.0.1 z dużym TTL-em, ale myślę że w sieci rzadko się zdarzy żeby zapytać się DNS-a o wszystkie wpisy dlatego chcę przykładowym skryptem (lista) - wpisywać jako StaticDNS tylko te które były wykorzystane.
Załączniki
przykl2.png
Ile IP-ków pod jedna nazwą
przykl1.png
przykład1 dla listy shodan
_Toem
 
Posty: 25
Dołączył(a): Wt, 19-09-2017 15:51


Powrót do MikroTik



Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 10 gości

cron