Kategorie: Python & Co.

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 […]

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()  

Weiterlesen

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, […]

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] […]

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 […]

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, […]

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 + […]

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 […]

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 […]

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 […]

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 […]

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 […]

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 […]

Weiterlesen

Python: Snippet Argumente für Command Line Tools mit getopt oder argparse

Mein persönlicher Favorit ist argparse, der Vollständigkeit halber aber beide Lösungen. getopt und argpase sind beide bei Python dabei und müssen nicht nachinstalliert werden. GETOPT Ansatz: #!/usr/bin/env python import getopt import sys def usage(): print „test1.py – A test script.\n“ \ “ -p, –print Return a string \n“ \ “ […]

Weiterlesen

Python: Snippet – In einer Datei suchen und Zeilennummern zurückgeben

test.txt in der Gesucht wird nach foobar: wer w erw erwer foobar sfsdfhsdkjfhkjsdf sdf sdf sdf sdf sdf sdflskdjflsdjflksjflksjf sdfkjsdfjkhskjhffoobardjskfhskdjhfkjsdhfkjshdf sflksdjfjklsdfjs dfs dfs df sdf sdf dsf Testscript zum Suchen: #!/usr/bin/env python filename = ‚test.txt‘ search = ‚foobar‘ with open(filename) as f: for num, line in enumerate(f, 1): if search […]

Weiterlesen