unified2 è un parser-Python puro per IDS (si pensi [Snort] (http://snort.org)) unified2 formato log binario.
Modulo consente di elaborare IDS registri in formato binario "unified2" in oggetti Python.
Essa non risolve ids regole e non vuole essere un sostituto per barnyard2 o Snort stesso in quel ruolo.
Scopo principale è quello di estrarre dati a pacchetto dal registro, associati a qualche particolare innescato (e risolti / registrato separatamente attraverso altri mezzi, ad esempio alert_syslog o alert_csv moduli Snort) regola, quindi non ho prestato molta attenzione ai metadati evento di elaborazione.
Modulo non ha componenti C e non usa ctypes, quindi dovrebbe essere abbastanza portatile per le implementazioni di lingua non CPython.
Formato
Definizione Format è derivato da Snort intestazioni (src / sfutil / Unified2_common.h) tramite modulo pyclibrary e sono memorizzati nella cache in file di unified2 / _format.py.
Le definizioni più recenti (ad esempio, se sono stati aggiunti nuovi tipi di dati) può essere generato eseguendo lo stesso script sul Unified2_common.h del Snort:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bzr branch 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
Installazione
Si tratta di un pacchetto regolare per Python 2.7 (non 3.X).
Utilizzando pip è il modo migliore:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installare unified2
Se non lo avete, usate:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install pip
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installare unified2
In alternativa, vedi anche:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Arricciatura https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installare unified2
Oppure, se assolutamente necessario:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install unified2
Ma, davvero non dovrebbe farlo.
Versione corrente-git può essere installato in questo modo:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installare -e 'git: //github.com/mk-fg/unified2.git#egg=unified2'
Utilizzo
Semplice esempio:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; import unified2.parser
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; per 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 'Evento:', ev
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; se ev_tail: 'tail Evento:' stampa, ev_tail
Oggetto Event ecco un dict di metadati e una "coda", che può essere un blob o una simile tuple ricorsivamente-analizzata dei metadati-dict e "coda" (ad esempio per UNIFIED2_EXTRA_DATA).
Interfaccia unified2.parser.Parser è meglio illustrato dalla funzione unified2.parser.read:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; parser, buff_agg = Parser (), ''
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; while True:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; appassionato = parser.read (src)
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; se non lucidare: rompere # EOF
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; buff_agg + = appassionato
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; while True:
buff_agg, ev = parser.process (buff_agg)
se ev è None: rottura
resa ev
Idea è che il metodo Parser.read deve essere chiamato con un flusso (ad esempio un oggetto di file), restituendo però molti byte parser ha bisogno per ottenere il prossimo pezzo da interpretare dei dati (un pacchetto, in caso di log u2) o qualsiasi altra cosa può essere letto Al momento, stringa vuota è solitamente un'indicazione di ritorno leggere EOF o forse non bloccante.
Parser.process allora dovrebbe essere chiamato con accumulato (da Parser.read chiama) Buffer, restituendo il primo pacchetto che può essere analizzato da lì (o None, se buffer non è abbastanza grande) e rimanendo dati (analizzati dal non) del buffer.
Requisiti :
- Python
I commenti non trovato