Agents/controller/sogo.py

65 lines
2.3 KiB
Python

import datetime
import requests
import re
import socket
def get_local_ip():
try:
# Ein temporärer Socket erstellen, um die lokale IP-Adresse zu ermitteln
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Verbindung zu einem öffentlichen DNS-Server herstellen
s.connect(("8.8.8.8", 80))
# Die lokale IP-Adresse aus dem Socket abrufen
local_ip = s.getsockname()[0]
s.close()
return local_ip
except Exception as e:
print(f"Fehler beim Ermitteln der lokalen IP-Adresse: {e}")
return None
# URL des API-Servers
sogo_server = "http://172.19.1.4/api/v1/get/logs/sogo/1000"
sogo_headers = {"x-api-key":"6A039F-CED4C3-D69E9E-A6C713-7EBB6A"}
api_server = "http://api.stines.de:8001/report"
api_headers = {"access_token":"^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8"}
def extract_email_username(log_entry):
# Regex für das Finden der E-Mail-Adresse in der Log-Zeile
match = re.search(r"for user '([^']+)'", log_entry)
if match:
email = match.group(1)
# Entfernen des '@' Zeichens aus der E-Mail-Adresse
username = email.split('@')[0]
return username
else:
return None
# Funktion zum Abrufen von Daten vom API-Server
def fetch_data_from_api(url):
response = requests.get(url,headers=sogo_headers)
if response.status_code == 200:
return response.json()
else:
print(f"Fehler beim Abrufen der Daten: {response.status_code}")
return None
# Abrufen der Daten
data = fetch_data_from_api(sogo_server)
if data:
for entry in data:
log_line = entry.get('message')
if log_line and "successful login" in log_line:
username = extract_email_username(log_line)
if username:
payload ={
"ipaddress": "172.19.1.4",
"username": username,
"lastaccess": datetime.datetime.fromtimestamp(int(entry.get('time'))).strftime('%Y-%m-%d %H:%M:%S')
}
api_response = requests.post(api_server, json=payload, headers=api_headers)
print(api_response.status_code)
print(f"Extrahierter Benutzername: {payload}")
else:
print("Keine Daten gefunden.")