MongoDB und Python

Ein paar Notizen zu Python und MongoDB 🙂 MongoDB ist eine NoSQL Datenbank, weitere Infos -> Wikipedia 🙂 Aktuelle MongoDB Version installieren (auf Ubuntu 16.04) sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 echo „deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse“ | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list apt install apt-transport-https apt update apt-get install -y mongodb-org siehe auch: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/ … Weiterlesen

Passwort Hashing in Python

Hier die einfachste Variante um in sicheres Passwort Hashing in Python umzusetzen. Dazu wird die passlib verwendet. Diese kann per pip installiert werden, passlib ist für Python 2.x und 3.x kompatibel. pip install passlib Passwort hashen: >>> # passlib laden >>> from passlib.hash import pbkdf2_sha256 >>> >>> # das passwort zum hashen >>> password = … Weiterlesen

Python: Arbeiten mit YAML Files

YAML ist eine vereinfachte Auszeichnungssprache zur Datenserialisierung. Das Format ist einfach gehalten und ist eine schöne alternative zu XML, JSON usw. Ist auch ein super Format für Configfiles als alternative zu INI Files. Einfaches YAML File: variable_str: value variable_num: 33 list: – a – b – c – d dictionary: – list1: – a – … Weiterlesen

Python: Entfernen von Steuerzeichen in ASCII Strings

Bin heute wieder mal über ein Problem mit ASCII Strings gestolpert. Im String war ein CTRL+C welches als \x03 in der ASCII Tabelle ist. Ich bin auf eine Seite gestoßen welche für alle möglichen Script und Programmiersprachen Codesnippets bereitstellt um Steuerzeichen zu entfernen. ASCII Tabelle bei Wikipedia: https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange Hier für Python: stripped = lambda s: „“.join(i … Weiterlesen

Cisco/Python: Backup der Konfiguration bei write Event auf externen Server

Diverse Cisco Geräte können bei einem write Event die Konfiguration an einen anderen Server z.B. über HTTP pushen. Cisco Config: archive path http://1.2.3.4/cisco_config/put/$h-$t write-memory Apache /etc/httpd/conf.d/zzz_cisco_backup.conf: WSGIDaemonProcess cisco_backup user=apache group=apache threads=10 WSGIPythonPath /opt/cisco_backup/web_root WSGIScriptAlias /cisco_backup /opt/cisco_backup/web_root/cisco_backup.wsgi <Directory /opt/cisco_backup/web_root> WSGIProcessGroup cisco_backup WSGIApplicationGroup %{GLOBAL} WSGIScriptReloading On Order deny,allow Allow from all <Files cisco_backup.py> Require all granted </Files> … Weiterlesen

Python: Snippet – E-Mail versenden, alternative zu Mailer

#!/usr/bin/env python # -*- coding: utf-8 -*- import smtplib from email.mime.text import MIMEText def postmaster(mfrom, mto, msubject, message, smtphost): msg = MIMEText(message.encode(„utf-8“)) msg[‚Subject‘] = msubject msg[‚From‘] = mfrom msg[‚To‘] = mto s = smtplib.SMTP(smtphost) s.sendmail(msg[‚From‘], msg[‚To‘], msg.as_string()) s.quit()  

Python: Snippet: SSH shell on Cisco devices

Mit dem Snippet können Kommandos auf einer Cisco Shell via SSH ausgeführt werden. #!/usr/bin/env python import paramiko import sys def send_string_and_wait_for_string(command, wait_string, should_print): shell.send(command) receive_buffer = „“ while not wait_string in receive_buffer: receive_buffer += shell.recv(1024) if should_print: print receive_buffer return receive_buffer client = paramiko.SSHClient() client.load_system_host_keys() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(„10.62.62.10″, username=“testuser“, password=“testpasswd“, look_for_keys=False, allow_agent=False) shell = client.invoke_shell() send_string_and_wait_for_string(„“, … Weiterlesen

Check_MK: Problem mit Apache HTTP Proxy – SELinux blockt Reverse Proxy Verbindung zur Check_MK Instanz

Habe gerade auf ein frisch installiertes CentOS 7.4 Check_MK 1.4.0p19 installiert. Nach dem Start einer OMD Instanz kommt nur die Fehlermeldung: OMD: Site Not Started You need to start this site in order to access the web interface. Im Apache Log ist folgendes zu sehen: [Mon Dec 04 08:50:48.097245 2017] [proxy_http:error] [pid 20887] [client x.x.x.x:31372] … Weiterlesen

Python: Snippet/Experiment – Syslog Server mit globalen und Host Filtern

Der Code ist nicht fertig und war mal ein Labor Versuch. Es lassen sich globale und Host Filter setzen wo diese zutreffen werden die Logs in ein extra File geschrieben. Config file: #!/usr/bin/env python # -*- coding: utf-8 -*- # Config definition class CFG: def __init__(self): # Path for logfiles self.syslogpath = „/home/mthoma/_dev/syslog/log/“ # Listner … Weiterlesen

Python: Snippet Multiprocessing mit Ergebnis

Beispiel für Parallelisierung von Jobs mit Ergebnis welche als Liste zurückgegeben werden. #!/usr/bin/env python # -*- encoding: utf-8; py-indent-offset: 4 -*- import os from multiprocessing import Pool def worker(job): x, y = job result = x ** y return os.getpid(), result if __name__ == ‚__main__‘: jobs = [(1, 2), (3, 4), (5, 6), (11, 12), … Weiterlesen

Python: Experiment/Snippet – Komprimieren und löschen von Logfiles nach X Tagen

Ein Ansatz für Logverzeichnisse im Format /log/<yyyy>/<mm>/<dd>/<div. logsfiles> #!/usr/bin/env python import gzip import shutil import os import datetime import time ############################################# # Config ############################################# # Path of Logfiles # Structure is /opt/log/<YYYY>/<MM>/<DD>/ gpath=’/opt/log/‘ # hold logs for x days hold_time=180 ############################################# def get_immediate_subdirectories(a_dir): return [name for name in os.listdir(a_dir) if os.path.isdir(os.path.join(a_dir, name))] def delete_files(f): # … Weiterlesen

Python: Snippet – Kaputten UTF-8 String reparieren

Ich habe aus der Datenbank einen String zurückbekommen der UTF-8 war aber falsch kodiert zurückgegeben wurde. So wurde aus Geschäftsstelle -> Gesch├ñftsstelle Folgendes Snippet kann einen kaputten UTF-8 String neu auf UTF-8 kodieren: name_kaputt = ‚Gesch\xc3\xa4ftsstelle‘ name = “.join(chr(ord(c)) for c in name_kaputt).decode(„utf-8“) print name_kaputt print name Ergebnis: Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC … Weiterlesen

Python: Snippet – Datum / Zeitstempel älter als X Tage z.B. 90 Tage

Mit dem Typ datetime lässt sich direkt rechnen was das ganze sehr bequem macht. Beispiel: import datetime old_time = datetime.datetime(2016, 4, 11, 10, 57, 23) today = datetime.datetime.today() age = today – old_time if age.days > 90: print „Older than 90 days“ else: print „Not older than 90 days“ Beispiel Datei Alter: import datetime import … Weiterlesen

Einfacher Random String Generator in Python

“.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N)) N = Anzahl der Stellen z.B. Uppercase + Digits mit 16 Stellen: OMD[dev1]:~$ python Python 2.7.13 (default, Jul 24 2017, 12:14:45) [GCC 6.3.0] on linux2 Type „help“, „copyright“, „credits“ or „license“ for more information. >>> import string >>> import random >>> “.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(16)) … Weiterlesen

Subnetze und IP Adressen extrahieren aus SPF Records (z.B. Office365 oder Google Apps for Business)

Wenn man bei Office365 oder Google Apps for Business einen eigenen Mailserver (Postfix) vorschalten möchte beim versenden/empfangen muss man die Mailserver von Microsoft/Google Whitelisten in den mynetworks bei Postfix. Das Script löst alle SPF Record includes auf und generiert CIDR Maps die sich in Postfix einbinden lassen. Beispiel: max@dev1:~$ python get_subnets_of_spf_record_mynetwoks.py Working on job office365 … Weiterlesen

Python: Snippet – Python Code aus Textdateien ausführen/importieren

Check_MK speichert alle Daten in einfachen Dateien direkt als ausführbaren Python Code. Um die abgelegten Dictionarys etc. in seinen eigenen Skripten weiterverwenden zu können kann man sich die mit eval() oder exec() laden. eval() kann verwendet werden um z.B.  ein Dictionary in eine Variable zu laden, exec() kann auch ganze Funktionen etc. laden. Beispiel eval(): dict.txt … Weiterlesen

Python: Snippet – Speichern und weiterverwenden von Objekten

Mit dem Modul pickle (deutsch pökeln, konservieren) bietet Funktionen für das Speichern von Objekten. Die gespeicherten Objekte können wiederhergestellt werden. Die Daten werden als Byte Stream gespeichert. Folgende Datentypen werden unterstützt: int, long, complex, float unicode, str list, tuple, dict uvm. siehe Dokumentation (https://docs.python.org/2/library/pickle.html / https://docs.python.org/3/library/pickle.html ) Hier ein kleines Beispiel: dict_to_file.py #!/usr/bin/env python import pickle t = … Weiterlesen

Python: Snippet – Suchen und ersetzen in Dateien

Der Titel des Posts sagt eigentlich schon alles 😉 Python 3: #!/usr/bin/env python3 import fileinput import re file = fileinput.FileInput(„/etc/ssh/sshd_config“, inplace=True, backup=“.bak“) for line in file: line = re.sub(r“.*Banner.*“,“Banner /etc/issue.net“, line) print(line, end=“) file.close() Python 2: #!/usr/bin/env python import fileinput import re import sys file = fileinput.FileInput(„/etc/ssh/sshd_config“, inplace=True, backup=“.bak“) for line in file: line = … Weiterlesen

Python: Snippet – Threading mit Result

Code-Snippet: #!/usr/bin/env python import socket from multiprocessing.pool import ThreadPool import pprint jobs = („www.heise.de“,“www.google.com“,“www.golem.de“,“www.google.de“,“www.lanbugs.de“,“www.microsoft.com“) def worker(domain): print socket.gethostbyname(domain) return socket.gethostbyname(domain) pool = ThreadPool(processes=3) result_buffer = {} for d in jobs: print „start “ + d async_result = pool.apply_async(worker, args=(d,)) result_buffer[d]=async_result.get() pprint.pprint(result_buffer) Ausgabe: >python thread_with_result.py start www.heise.de 193.99.144.85 start www.google.com 172.217.20.68 start www.golem.de 109.68.230.138 start www.google.de … Weiterlesen

Python: Oracle DB Modul für Python für CentOS6

Quelle: https://gist.github.com/hangtwenty/5547377 #!/bin/bash # INSTALL ORACLE INSTANT CLIENT # ################################# # NOTE: Oracle requires at least 1176 MB of swap (or something around there). # If you are using CentOS in a VMWare VM, there’s a good chance that you don’t have enough by default. # If this describes you and you need to add more … Weiterlesen