Wątek przeniesiony 2021-02-04 13:13 z C/C++ przez kq.

regex - oznaczenie wybranych wierszy

0

temat jest niezwiązany z C++ wrzucam tu bo nie wiem gdzie to umieścić - nie zdziwię się jak wątek wywalicie no ale liczę na pomoc...

mam poniższy raport który w skrócie wygląda tak

Nmap scan report for 172.29.184.5

Host is up (0.0061s latency).



PORT    STATE SERVICE

445/tcp open  microsoft-ds

MAC Address: F8:BC:12:A6:4F:A8 (Dell)



Nmap scan report for 172.29.184.7

Host is up (0.00s latency).



PORT    STATE  SERVICE

445/tcp closed microsoft-ds

MAC Address: 00:21:B7:D1:33:D2 (Lexmark International)

chciałbym oznaczyć porty 445 które są "closed" ich adres IP oraz MAC za pomocą regex-a w notepadzie++

znalazłem regex dla MAC -> ([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})
regex dla IPv4 -> \b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b

ale teraz nie wiem jak zrobić aby regex wskazał mi tylko te IP i MAC które są closed... ?

3

nmap potrafi wypluwać raporty w XMLu (które można stosunkowo łatwo przekonwertować do JSONa i odpytywać za pomocą jq) - dlaczego nie wykorzystasz tego ficzera?

1

screenshot-20210204113020.png

\d+\.\d+\.\d+\.\d+.*\d{3}/tcp closed

Obok pola radio do zaznaczania, że to jest wyrażenie regularne, jest pole, które pozwala dopasować nowe wiersze w kropce. To najprostszy przykład. Oczywiście należy uważać na gwiazdkę, bo można zrobić tu psikusa. W różnych implementacjach wyrażeń regularnych trzeba różnie podejść, np. zapisami:

  • *?
  • +?
2

a podasz gotowca jak to zrobić ? Szczerze ? To mam ograniczone zasoby czasowe i potrzebuję to zrobić, a listę mam naprawdę sporą

W takim razie zamiast bawić się z XMLami oraz formatem "human-readable", może wykorzystasz https://nmap.org/book/output-formats-grepable-output.html?

Coś takiego będzie jeszcze łatwiej wrzucić do Notepada i przeszukać wyrażeniami regularnymi.

0

A masz zaznaczonego "ptaszka" koło napisu "Wyrażenia regularne"?

screenshot-20210204114350.png

2

screenshot-20210204115118.png

EDIT
Notepad++ nie obsługuje wyrażeń niezachłannych, ale można to obejść.

\d+\.\d+\.\d+\.\d+.{2,70}\d{3}/tcp closed
0

@Patryk27:

W takim razie zamiast bawić się z XMLami oraz formatem "human-readable", może wykorzystasz (...)

czy taki wynik to powinno zwrócić ?

Host: 172.29.184.1 ()	Status: Up

Host: 172.29.184.1 ()	Ports: 445/filtered/tcp//microsoft-ds///

polecenie nmap nmap -p 445 -oG - myIP/21

0

prawie mi się udało wyfiltrować za pomocą regex-a

screenshot-20210204120306.png

tylko pozostaje pytanie czy jest jakiś sposób aby oznaczał TYLKO te IP gdzie jest "closed" ?

mój regex -> (?:[0-9]{1,3}\.){3}[0-9]{1,3}|closed

0

dobra, poradziłem sobie w taki sposób...

REGEX -> ((?:\d+\.){3}\d+).+445\/closed

zrzut

screenshot-20210204132740.png

jakby ktoś miał coś lepszego, to mile widziane

1

((?:[0-9]{1,3}\.){3}[0-9]{1,3})(?=.*?455/closed) (koniecznie BEZ flagi dot matches new line)
screenshot-20210204132843.png

0

@zkubinski: Podkreślę jeszcze jedną ważną rzecz: Notepad++ ma trochę ułomną obsługę wyrażeń regularnych. Nie doczytałem się czy z całą pewnością NPP używa implementacji boost czy PCRE, ale wygląda to na boost, bo brakuje mu (a przynajmniej parę lat temu brakowało) kilku rzeczy względem wzorcowego PCRE. Wyrażenie, które masz, może działać inaczej (albo wcale) po przeklejeniu do innego programu.

1

rozumiem ale dodatkowo sprawdzam tu -> https://regex101.com/
uważam, że jest to najlepszy validator do regex-a

1 użytkowników online, w tym zalogowanych: 0, gości: 1