. .

Kategorie: Codeschnippsel RSS-Feed für diese Kategorie

0

Python: Script zur Überwachung von Dateisystemereignissen mit pyinotify

observeDirs_email_overview

Inhalt Beschreibung Quellcode Projektdaten Beschreibung Mit dem Python-Modul Pyinotify können alle Änderungen auf dem Dateisystem verfolgt werden. Pyinotify bezieht die Informationen direkt vom Subsystem „inotify“ (inode notify) des Kernels, um bestmögliche Performance zu gewährleisten. Das Script „observeDirs“ überwacht rekursiv alle Verzeichnisse, die in der Liste „dirs_recursive_to_observe“ in „oD_configuration.py“ vorkommen. dirs_recursive_to_observe = [ '/etc', '/root', '/usr' ] dirs_recursive_to_ignore = [ '/usr/portage', ] regexs_to_ignore = [ '^/root/.viminfo*', ]   Mit pyinotify werden in den konfigurierten Verzeichnissen folgende Veränderungen an Dateien oder Unterverzeichnissen behandelt: Neu-Erstellung, Bearbeitungen von Dateien, Metadatenänderungen (z.B. Berechtigungen), Löschungen und Verschiebungen. Über jede diese Veränderungen wird man per eMail informiert.

0

Perl: automatisch iptables Drop-Regeln aus Vorkommnissen in Logdateien erstellen

observeLogfiles_logging

Inhalt Beschreibung Quellcode Projektdaten Beschreibung Das folgende Script ist eine Weiterentwicklung des „w00tw00t.pl„-Scripts. Ziel ist es weiterhin, automatisiert auf Spam oder Angriffe auf bestimmte Dienste zu reagieren, in dem die verursachende IP-Adresse über iptables ausgesperrt wird. Das Script beschränkt sich nun nicht mehr auf nur ein Logfile – es können beliebig viele Logdateien auf verdächtige Aktivitäten überwacht werden. Das Script setzt sich in den Hintergrund und forkt sich für jede konfigurierte Logdatei. Ist eine Logdatei nicht vorhanden, wird alle 30 Sekunden versucht, die Logdatei zu öffnen – zum Beispiel beim Einsatz von logrotate notwendig. Hier ein kleines Beispiel zur Konfiguration

0

PHP: Klasse zur statistischen Fehlererrechnung und Prozessfähigkeitsuntersuchung

statistics_php

In diesem Beitrag geht es darum, aus festgestellten Messergebnissen, die zum Beispiel in einer Datenbank abgelegt sind, eine sogenannte Prozessfähigkeitsanalyse zu erstellen. Diese wird beispielsweise in der Automobilindustrie für die Qualitätssicherung gefordert und benötigt. Bekannte geforderte Werte sind der Prozessfähigkeitsindex CpK – eine Kennzahl zur statistischen Bewertung eines Prozesses – oder ebenenfalls der Six-Sigma-Wert sowie einige andere Werte. Mininum, Maximum, Durchschnitt, Median, Abstand (Range), Modus, Moment, Varianz, Standardabweichung, Standardfehler, Schiefe, Woelbung (Exzess), Variationskoeffizient, Prozessfaehigkeitsindex, Wahrscheinlichkeitsdichtefunktion, Verteilungsfunktion, PPM und Fehlerhaftigkeit können mit unten gelisteter PHP-Klasse bestimmt werden. Ausgangslage der zu berechnenden Werte zur Prozessfähigkeitsanalyse können Messdaten aus dem Messlabor sein, die

0

virtual framebuffer X server zur Erstellung von Webseiten-Screenshots verwenden

Screenshot gentoo.org

Ich zeige hier eine Möglichkeit, wie mit der Verwendung eines virtual framebuffer X Servers Screenshots von Webseiten erstellt werden können, ohne auf Drittanbieter wie zum Beispiel url2png.com angewiesen zu sein. Wie der Titel schon verrät ist hierbei aber die Installation von X Server Libraries notwendig. Das ist allerdings unter Umständen auf einigen Systemen nicht möglich bzw. nicht erwünscht. Das Script wurde mit bash v4.2.45 auf gentoo Linux ausgeführt. Bei diesem Betriebssystem ist es nötig, das xorg-server Paket mit dem USE-Flag „xvfb“ zu kompilieren. Außerdem werden in dem folgenden Shell-Script auch Programme aus diesen Paketen verwendet: x11-misc/xdotool, x11-apps/xwd und media-libs/netpbm. xdotool

0

Perl: w00tw00t-Einträge im Apache-Log automatisch für iptables-Firewallregeln verwenden

Perl: w00tw00t-Einträge im Apache-Log automatisch für iptables-Firewallregeln verwenden

Im Apache-Errorlog finden sich bei mir immer wieder einige Einträge dieser Art: „[Wed Apr 07 23:17:01 2010] [error] [client 88.191.61.110] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:“. Diese Einträge entstehen wohl, wenn Apache von einem Tool namens `dfind‘ gescannt wird. `dfind‘ sucht nach Schwachstellen in der verwendeten Server-Software. Da solche Log-Einträge ziemlich überhand nahmen, schrieb ich ein kleines Perl-Script, dass ähnlich wie `tail‘ das Apache-Logfile beobachtet und bei einem Eintrag nach entsprechendem Muster („.*request without hostname.*w00tw00t.*“) iptables anweist, die Client-IP zu sperren – falls diese IP ohnehin nicht schon gesperrt ist. Das Script setzt sich selbst

0

JavaScript: „99 Bottles of Beer“ mit JavaScript-Engine SpiderMonkey

JavaScript: 99 Bottles of Beer mit JavaScript-Engine SpiderMonkey

SpiderMonkey gilt als erste jemals entwickelte JavaScript-Engine (lt. Wikipedia), die aktuell von der Mozilla Foundation weiterentwickelt wird. Ursprünglich verwendete man JavaScript ausschließlich im Browser, mittlerweile findet JavaScript aber auch außerhalb davon Verwendung, so zum Beispiel auf Mikrocontrollern. Um SpiderMonkey auszuprobieren, griff ich auf einen recht beliebten Code-Fall zurück: 99 Bottles of Beer. Man kann zur Ausführung des Codes in den interaktiven Modus von SpiderMonkey wechseln: `js -i‘. Natürlich kann das Script aber auch in einer Datei gespeichert und mit `js <datei>‘ ausgeführt werden. /* * This small example was tested on gentoo Linux (current date: 2013-10-14) * with JavaScript Shell

1

C: Speicherallokation: malloc() vs. talloc()

malloc() vs. talloc()

Als ich vor Kurzem auf gentoo Linux ein `emerge -quDN world‘ machte, habe ich ausnahmsweise mal zugeschaut, was da gerade alles aktualisiert wird. Da fiel mir ein Paket namens `sys-libs/talloc‘ auf – und fragte mich, ob das tatsächlich etwas mit Speicherallocation zu tun haben könnte. Kurz gegoogelt bin ich auf einen Artikel von Stephen Gallagher aufmerksam geworden: Why you should use talloc for your next project. talloc ist eine Speicherimplementierung vom Samba-Projekt. talloc bietet hier die Möglichkeit, reservierten Speicher in einem zusammenhängenden Bereich zu erhalten. Welche Vorteile daraus gezogen werden können, ist an Hand dieses kleinen Beispiels ersichtlich: #include <unistd.h>

0

C: Prozessnamen einer PID unter Linux, HP-UX, MacOS und Solaris ermitteln

C Code

In diesem Beispiel zeige ich, wie unter Linux, HP-UX, MacOS und Solaris zu einer Prozess ID der Name des Prozesses ermittelt werden kann. Wiederum die Definition der Funktionen im entsprechenden Header (processname.h): #ifndef PRJ_PROCESSNAME_H #define PRJ_PROCESSNAME_H 1 #define MAX_PROCNAME 1024 #ifdef __cplusplus extern "C" { #endif int prjProcessName(int pid, char *procname); #ifdef __cplusplus } #endif #endif /* !PRJ_PROCESSNAME */ Nach der überschaubaren Headerdatei nun der eigentliche Code in processname.c: Dabei wird an Hand einer Definition entschieden, um welches System es sich handelt. Das sollte natürlich vom configure-Script bestimmt werden, hier in diesem Beispiel aber hartcodiert. #include <stdlib.h> #include <stdio.h> #include

0

Perl: veraltetete Distfiles von gentoo Linux automatisiert löschen

Perl: veraltetete Distfiles von gentoo Linux automatisiert löschen

Gentoo Linux verwendet bekanntermaßen den sogenannten Portage zur Verwaltung der Software auf dem System. Wenn mittels `emerge‘ ein Paket installiert wird, zieht der Portage die Quelldateien der Software aus dem Netz und speichert diese standardmäßig in /usr/portage/distfiles/. Je nach Konfiguration in /etc/portage/make.conf belässt der Portage die Quelldateien auf dem Dateisystem, um bei Änderungen der USE-Flags und der daraus erforderlichen Recompilierung des Pakets die Dateien nicht erneut herunterladen zu müssen. Aktualisiert man nun die Paketinformationen mit `emerge –sync‘, werden veraltete ebuilds entfernt. In diesen ebuilds (bzw. dessen Manifest-Dateien) ist hinterlegt, welches Quellpaket in welcher Version verwendet werden soll. Ist also ein

0

Python: kompilierte gentoo Linux Pakete automatisiert in gechrootete Verzeichnisse übertragen

Python: kompilierte gentoo Linux Pakete automatisiert in gechrootete Verzeichnisse übertragen

Aus Sicherheitsgründen werden bestimmte Dienste wie Web-, Mail- oder FTP-Services gechrooted, um den Diensten den Zugriff außerhalb des gechrooteten Basis-Verzeichnisses zu verwehren. Sollte der Dienst einem erfolgreichen Angriff erlegen sein, befindet sich der Angreifer in einer eingeschränkten Umgebung, die nur für das erfolgreiche Laufen des Dienstes konfiguriert ist bzw. sein sollte. Dadurch kann die Sicherheit des restlichen Systems bzw. der restlichen Dienste erhöht werden. Unter gentoo Linux wird zur Packetverwaltung (der sog. Portage) das Tool `emerge‘ verwendet. Logischerweise werden von den „eingesperrten“ Diensten bestimmte Bibliotheken und auch Binaries benötigt, um überhaupt laufen zu können. Wenn mit `emerge‘ ein Software-Paket installiert

0

PHP: Daten von api.xing.com abrufen

PHP Code

Seit letztem Jahr bietet Xing eine API an, mit der man Daten zum Beispiel seines eigenen Profils abrufen kann. Hierbei verwendet Xing zur Authentifizierung das OAuth-Protokoll in Version 1. Um die API nutzen zu können wird ein Account im Xing Developer Bereich benötigt, sowie ein Consumer Key und ein Token. Der Developer-Account kann mit dem eigenen Profilaccount „freigeschalten“ werden; der Consumer Key (Test) kann über das Webinterface von dev.xing.com erstellt werden. Um daraufhin an den für den Abruf der Xing-Daten benötigten Access-Token zu kommen, empfiehlt es sich, das von Xing bereitgestellte Test-Script (in ruby geschrieben) auf https://dev.xing.com/docs/examples zu verwenden. Hier

0

C/C++: Zugriff mehrerer Prozesse auf Shared Memory unter Berücksichtigung des 3rd readers/writers Problems

C Code

Im folgenden Listing gehe ich auf den Zugriff auf Shared Memory ein. Dabei soll sichergestellt werden, dass zwei Prozesse, die auf den gemeinsamen Shared Memory zugreifen wollen, sich nicht gegenseitig am Zugriff hindern, die Prozesse also quasi „verhungern“. Siehe hierzu auch zum Beispiel Wikipedia bzw. etwas genauer auf rfc1149.net. Der folgende Teil bezieht sich auf die Semaphoren und den Shared Memory an für sich: Die Header-Datei shmem.h: #ifndef PRJ_SHMEM_H #define PRJ_SHMEM_H 1 #include <prjconfig.h> #define SEMKEYPATH "/opt/prj/sbin/prjd" /* Path used on ftok for semget key */ #define SEMKEYID 1209 /* Id used on ftok for semget key */ #define SHMKEYPATH

0

PHP: Versenden von eMails über einen (entfernten) SMTP-Server

PHP Code

Über fsockopen() können mit PHP TCP-Verbindungen aufgebaut werden – so auch zu einem SMTP-Dienst. Beim Versenden von eMails müssen bei der SMTP-Sitzung natürlich bestimmte Vorgaben und Abläufe erfüllt sein (siehe auch RFC 821). Die kleine Klasse „eMail“ ermöglicht das Versenden von eMails auf recht einfache Weise. Allerdings ist sie an die Bedürfnisse des deutschen Zeichensatzes angepasst. Bei der Authentifizierung sollte darauf geachtet werden, dass der SMTP-Server die Methode der Authentifzierung auch unterstützt bzw. zulässt. Unten in diesem Beitrag ist ein Beispiel, wie dann über die Klasse „eMail“ eine HTML-eMail versendet werden kann.   <?PHP /* * this is a small

0

C: Interprozesskommunikation über Message Queues

C Code

In diesem Beispiel zeige ich kurz, wie Message Queues zum Austausch von Nachrichten zwischen zwei unterschiedlichen Prozessen verwendet werden können. Hierzu einmal das Headerfile msg_queue.h: #ifndef _PRJ_MSG_QUEUE_H_ #define _PRJ_MSG_QUEUE_H_ #include <stdlib.h> #include <stdio.h> #include <string.h> #define QUEUE_KEY 2048 #define STOP_COMMAND "exit" /* type this to stop writting to message queue */ typedef struct _userOptions { size_t write; size_t read; } userOptions; typedef struct _msgBuffer { long type; char text[2048]; } msgBuffer; void prj_usage(); userOptions prj_initUserOptions(userOptions options); int prj_parseArgs(int *argc, char **argv, userOptions *options); int prj_startQueue(key_t const key); void prj_stopQueue(int msqid); int prj_readFromQueue(int msqid); int prj_writeToQueue(int msqid); int main(int argc, char

0

C: Passwortabfrage im Terminal

C Code

Ich beschreibe hier kurz, wie unter Linux in der Konsole ein Passwort abgefragt werden kann, ohne dass die Eingabe des Users im Terminal erscheint. Hierzu Definitionen im Header-File passphrase.h: #ifndef PRJ_PASSPHRASE_H #define PRJ_PASSPHRASE_H 1 #if defined(__cplusplus) extern "C" { #endif char * prj_read_passphrase(size_t size); int prj_get_passphrase(size_t count, size_t size, char **passphrase); #if defined(__cplusplus) } #endif #endif /* !PRJ_PASSPHRASE_H */ Daraufhin der eigentliche Code in passphrase.c: #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <termios.h> #include "passphrase.h" /* * \brief prj_read_passphrase * * reads from stdin input of user * * \param size maximum length of input * * \return