65 lines
2.3 KiB
Python
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.")
|