unified2 est un parser-Python pur pour IDS (pensez [Snort] (http://snort.org)) unified2 format de log binaire.
Module permet de traiter IDS connecte format binaire "de unified2" en objets Python.
Il ne résout pas les identifiants de règle et ne est pas destiné à être un remplacement pour barnyard2 ou Snort lui-même dans ce rôle.
Le but principal est d'extraire des données de paquets à partir du journal, associés à certains notamment déclenché (et résolu / connecté séparément par d'autres moyens, par exemple alert_syslog ou modules alert_csv snort) règle, donc je ne ai pas prêté beaucoup d'attention aux métadonnées de l'événement de transformation.
Module n'a pas les composants C et ne utilise pas ctypes, devrait donc être assez portable pour les implémentations de langue non-CPython.
Format
Définition du format est dérivé de têtes Snort (src / sfutil / Unified2_common.h) via le module pyclibrary et sont mis en cache dans le fichier unified2 / _format.py.
Définitions plus récentes (par exemple, si de nouveaux types de données ont été ajoutés) peuvent être générés en exécutant le même script sur Unified2_common.h du Snort:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bzr branche 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
Installation
Ce est un forfait régulier pour Python 2.7 (non 3.X).
Utilisation pip est la meilleure façon:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installer unified2
Si vous ne l'avez pas, utilisez:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install pip
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installer unified2
Alternativement voir aussi:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Boucle https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installer unified2
Ou, si vous devez absolument:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install unified2
Mais, vous ne devriez pas le faire.
Version actuelle-git peut être installé comme ceci:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installer -e 'git: //github.com/mk-fg/unified2.git#egg=unified2'
Utilisation
Exemple simple:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; unified2.parser d'importation
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Ev, ev_tail dans 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 'Evénement:', ev
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; si ev_tail: «queue Evénement: 'impression, ev_tail
objet de l'événement ici est un dict des métadonnées et une "queue", qui peut être soit une goutte ou un tuple même manière récursive-analysé des métadonnées-dict et "queue" (par exemple pour UNIFIED2_EXTRA_DATA).
Interface unified2.parser.Parser est mieux illustré par la fonction unified2.parser.read:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; analyseur, 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; buff = parser.read (src)
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; sinon polir: briser # 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; while True:
buff_agg, ev = parser.process (buff_agg)
si ev est None: pause
rendement ev
Idée ici est que la méthode Parser.read doit être appelé avec un flux (par exemple, un objet de fichier), revenant cependant de nombreux octets analyseur a besoin d'obtenir le prochain morceau analysable des données (un paquet, en cas de journal de u2) ou ce que peut être lu pour le moment, une chaîne vide est habituellement une indication de rendement lire EOF ou peut-être non-bloquant.
Parser.process puis doit être appelé avec accumulée (par des appels Parser.read) tampon, retournant le premier paquet qui peut être analysée à partir de là (ou Aucun, si le tampon ne est pas assez grand) et les données restantes tampons (non analysé).
Exigences :
- Python
Commentaires non trouvées