Advertisement
CyberPingU

Netfilter to json

Jul 18th, 2021
1,432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.99 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Sun Jul 18 11:12:29 2021
  5.  
  6. @author: mf18626
  7. """
  8. import os
  9. import sys
  10. import json
  11.  
  12. def readLogFile(logFile):
  13.     try:
  14.         with open(logFile) as f:
  15.             logLines = f.readlines()
  16.         return logLines
  17.     except FileNotFoundError:
  18.         print("No such file")
  19.         return None
  20.  
  21. def parse(logLine):
  22.  
  23.     keywords = ["in=","out=","src=","dst=","proto=","spt=","dpt=","ack","syn","psh","fin","rst"]
  24.     tokenizedLogLine = logLine.split()
  25.    
  26.     # Inizializzo i campi, che saranno comuni a tutti i protocolli; poi qualcuno li popola, qualcuno no
  27.     fields={"timestamp":"",
  28.             "eventId":"",
  29.             "inIface":"",
  30.             "outIface":"",
  31.             "srcIP":"",
  32.             "dstIP":"",
  33.             "spt":"",
  34.             "dpt":"",
  35.             "proto":"",
  36.             "syn":"",
  37.             "ack":"",
  38.             "psh":"",
  39.             "fin":"",
  40.             "rst":""}
  41.     # Il timestamp รจ sempre al primo posto
  42.     fields.update({"timestamp":tokenizedLogLine[0]})
  43.     # Utilizzo sempre il quarto campo come identificatore per poi ordinare su elastic    
  44.     fields.update({"eventId":tokenizedLogLine[3]})        
  45.  
  46.     for token in tokenizedLogLine:
  47.         for keyword in keywords:
  48.             for token in tokenizedLogLine:
  49.                 if keyword.lower() in token.lower():
  50.                     if keyword == "in=":
  51.                         fields.update({"inIface":token.lower().split("=")[1]})
  52.                     elif keyword == "out=":
  53.                         fields.update({"outIface":token.lower().split("=")[1]})
  54.                     elif keyword =="src=":
  55.                         fields.update({"srcIP":token.lower().split("=")[1]})
  56.                     elif keyword =="dst=":
  57.                         fields.update({"dstIP":token.lower().split("=")[1]})                  
  58.                     elif keyword =="proto=":
  59.                         fields.update({"proto":token.lower().split("=")[1]})
  60.                     elif keyword =="spt=":
  61.                         fields.update({"spt":token.lower().split("=")[1]})
  62.                     elif keyword =="dpt=":
  63.                         fields.update({"dpt":token.lower().split("=")[1]})
  64.                     elif keyword =="syn":
  65.                         fields.update({"syn":token.lower()})    
  66.                     elif keyword =="ack":
  67.                         fields.update({"ack":token.lower()})    
  68.                     elif keyword =="psh":
  69.                         fields.update({"psh":token.lower()})    
  70.                     elif keyword =="fin":
  71.                         fields.update({"fin":token.lower()})    
  72.                     elif keyword =="rst":
  73.                         fields.update({"rst":token.lower()})    
  74.     return fields
  75.  
  76. logFileArray = readLogFile("campionato.log")
  77. i = 0
  78. for logLine in logFileArray:
  79.     with open("input/jsonizedlog-"+str(i)+".json","w") as jsonfile:
  80.         json.dump(parse(logLine),jsonfile)
  81.     i += 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement