unified2 is een pure-Python parser voor IDS (denk [Snort] (http://snort.org)) unified2 binaire log-formaat.
Module maakt het mogelijk om IDS logs in binaire "unified2" formaat te verwerken tot python objecten.
Het is niet opgelost regel ids en is niet bedoeld als vervanging voor barnyard2 of Snort zich in die rol zijn.
Belangrijkste doel is om een pakket van gegevens uit het logboek, geassocieerd met een aantal bijzondere getriggerd halen (en opgelost / afzonderlijk aangemeld via andere middelen, bijv alert_syslog of alert_csv snort modules) regel, dus ik heb niet veel aandacht besteed aan de verwerking van metagegevens van gebeurtenissen.
Module niet C componenten en niet ctypes gebruiken, dus moet redelijk draagbaar aan niet-CPython taal implementaties zijn.
Indeling
Format definitie is afgeleid van Snort headers (src / sfutil / Unified2_common.h) via pyclibrary module en worden opgeslagen in unified2 / _format.py bestand.
Nieuwere definities (laten we zeggen, als er nieuwe data types werden toegevoegd) kan worden gegenereerd door het uitvoeren van hetzelfde script op de Snort's Unified2_common.h:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bzr tak lp: pyclibrary
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; cd pyclibrary
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; python ... / unified2 / _format.py ... / snort-2.XYZ/src/sfutil/Unified2_common.h
installatie
Het is een reguliere pakket voor Python 2.7 (niet 3.x).
Met behulp van pip is de beste manier:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installeren unified2
Als je het niet hebt, gebruik dan:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install pip
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installeren unified2
Als alternatief zie ook:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installeren unified2
Of, als u absoluut moet:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install unified2
Maar, je moet echt niet doen.
Huidige-git versie kan worden geïnstalleerd als volgt uit:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installeren -e 'git: //github.com/mk-fg/unified2.git#egg=unified2'
Gebruik
Eenvoudig voorbeeld:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; import unified2.parser
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; voor ev, ev_tail in unified2.parser.parse ('/ var / log / snort / snort.u2.1337060186'):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; print 'Event', ev
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; indien ev_tail: print 'Event staart:', ev_tail
Event-object is hier een dict van metadata en een "staart", die ofwel kan een blob of een soortgelijke recursief-ontleed tupel van metadata-dict en "staart" (bv voor UNIFIED2_EXTRA_DATA).
unified2.parser.Parser-interface wordt het best geïllustreerd door de unified2.parser.read functie:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; parser, buff_agg = Parser (), ''
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; terwijl True:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; buff = parser.read (src)
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; zo niet buff: break # EOF
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; buff_agg + = buff
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; terwijl True:
buff_agg, ev = parser.process (buff_agg)
Indien EV is Geen: break
opbrengst ev
Idee is dat Parser.read methode moet worden aangeroepen met een stroom (bijvoorbeeld een file object), terugkerende hoeveel bytes parser moet de volgende parseable brok gegevens te krijgen (een pakket, bij u2 log) of wat kan worden gelezen op het moment, lege string is meestal een indicatie van EOF of misschien niet-blokkerende lezen terugkeer.
Parser.process dan worden aangeroepen met geaccumuleerd (door Parser.read oproepen) buffer, terugkerend het eerste pakket dat verwerkt kan worden van daaruit (of Geen, als buffer te klein is) en de resterende (niet-ontlede) buffer data.
Eisen
- Python
Reacties niet gevonden