ARP-Übersetzungstabelle anzeigen und verändern

Mit Hilfe des Tools “arp” kann unter Windows und Linux die Übersetzungstabelle für IP-Adressen zur MAC-Adresse (physikalische Adresse) angezeigt und verändert werden. Diese Übersetzungstabelle wird von ARP (Address Resolution Protocol) verwendet. Das Tool wird im Normalfall nur für Test- und Debugzwecke verwendet.


>arp -a

Zeigt die aktuellen ARP-Einträge in der Übersetzungstabelle an.

ARP-Einträge

Um einen Eintrag aus der Tabelle zu löschen:


>arp -d 192.168.0.22

Um einen eigenen statischen Eintrag hinzuzufügen:


>arp -s 192.168.0.22 00-aa-00-62-c6-09

Verwendung von sqlite3 in Python

Beim Entwickeln von Python-Scripts benötigt man oft eine Möglichkeit, Daten schnell und komfortabel zu speichern. Dazu eignet sich die Programmbibliothek SQLite hervorragend. Bei SQLite befindet sich die gesamte relationale Datenbank in einer einzigen Datei, da dieses System für die Verwendung im Embedded-Bereich entworfen wurde. Dabei unterstützt SQLite viele SQL-Sprachbefehle, welche im SQL-92-Standard festgelegt wurden. Das sind Funktionen wie Transaktionen, Views, Subselects und Trigger. Um SQLite in Python zu verwenden müssen wir die Bibliothek erst einbinden:


import sqlite3

Der nächste Schritt ist das Erstellen einer Verbindung zu der SQLite-Datenbank. Dies geschieht mit Hilfe eines “connection objects” das die Datenbank repräsentiert.


connection = sqlite3.connect('c:\\temp\spy.db')

Es existiert die Möglichkeit die Datenbank im Memory zu erzeugen, dazu wird anstelle des Pfades zur Datenbank “:memory:” verwendet.

Hier ein simples Beispiel bei dem eine Tabelle mit dem Namen “spydb” erstellt wird. Die Tabelle enthält 3 Spalten: id mit dem Autowert, ipsend und iprecv als Textfeld.
In der Zeile 8 und 9 werden Daten in die Tabelle geschrieben und in Zeile 12 mit einem “commit” die Transaktion ausgeführt.


# create a cursor to work with the database
mycursor = connection.cursor()

# create a new table
mycursor.execute("create table spydb (id INTEGER PRIMARY KEY ASC, ipsend text, iprecv text)")

# insert data to the table
mycursor.execute("insert into spydb (ipsend , iprecv ) values('10.0.0.1','10.0.0.2')")
mycursor.execute("insert into spydb (ipsend , iprecv ) values('10.0.0.3','10.0.0.15')")

# save the changes
connection.commit();

# insert data to the table
mycursor.execute("insert into spydb (ipsend , iprecv ) values('10.0.13.99','10.0.0.15')")

# rollback the changes
connection.rollback();

mycursor.execute('select * from spydb order by id desc')
for row in mycursor:
    print row

# close the cursor if we are finish
mycursor.close()

Wenn wir nun auf der Zeile 20 alle Daten aus der Tabelle auswählen und ausgeben, sieht dies wie folgt aus:

In der Zeile 15 wird ein weiterer Datensatz hinzugefügt, dieser wird jedoch nicht ausgegeben, da die Transaktion rückgängig (Zeile 18) gemacht wurde.

Python Docs

DNS-Abfragen mit nslookup

Braucht man Informationen zu einer Domain kann unter Windows und Linux nslookup verwendet werden. Das Tool nslookup bietet die Möglichkeit einen interaktiven Modus oder den nicht interaktiven Modus zu verwenden. Diese Modi unterscheiden sich beim Eingeben der Werte. Im interaktiven Modus wird in einer eigenen Konsole gearbeitet und jeder Befehl einzeln angegeben. Beim nicht interaktiven Modus hingegen, wird alles in einem Befehl definiert.

Was hat www.monsterli.ch für eine IP-Adresse?

Im interaktiven Modus:


>nslookup
>www.monsterli.ch
Server:                192.168.0.1
Address:               192.168.0.1#53

Name:      www.monsterli.ch
Address:   80.238.129.157

Durch die Eingabe von nslookup, in der Konsole, wird in den interaktiven Modus gewechselt. Nach dem wechseln des Modus, kann durch die Eingabe des Hostnamens die Abfrage gestartet werden.

Im nicht interaktiven Modus:


>nslookup www.monsterli.ch
Server:                192.168.0.1
Address:               192.168.0.1#53

Name:      www.monsterli.ch
Address:   80.238.129.157

Was ist der Mailserver der Domain monsterli.ch ?

Im interaktiven Modus:


>nslookup
>set type=mx
>monsterli.ch
Server:                192.168.0.1
Address:               192.168.0.1#53

Nicht autorisierende Antwort:
monsterli.ch    MX preference = 0, mail exchanger = mail.monsterli.ch
monsterli.ch    MX preference = 5, mail exchanger = monsterli.ch
monsterli.ch    MX preference = 10, mail exchanger = mail2.monsterli.ch

Im nicht interaktiven Modus:


>nslookup -type=mx monsterli.ch
Server:                192.168.0.1
Address:               192.168.0.1#53

Nicht autorisierende Antwort:
monsterli.ch    MX preference = 0, mail exchanger = mail.monsterli.ch
monsterli.ch    MX preference = 5, mail exchanger = monsterli.ch
monsterli.ch    MX preference = 10, mail exchanger = mail2.monsterli.ch

Einen alternativen DNS-Server für die Abfragen verwenden

Soll bei der DNS-Abfrage nicht der standart DNS-Server verwendet werden, kann dieser angegeben werden. Hier im Beispiel wird ein öffentlicher DNS-Server von Google verwendet.

Im interaktiven Modus:


>nslookup
>server 8.8.4.4
Standardserver: google-public-dns-b.google.com
Address:  8.8.4.4

>www.monsterli.ch
Server:                8.8.4.4
Address:               8.8.4.4#53

Name:      www.monsterli.ch
Address:   80.238.129.157

Im nicht interaktiven Modus:


>nslookup www.monsterli.ch 8.8.4.4
Server:                8.8.4.4
Address:               8.8.4.4#53

Name:      www.monsterli.ch
Address:   80.238.129.157

Port-Scanning mit nmap

Nmap ist ein sehr mächtiges Tool zum Herausfinden ob Ports offen sind und auf eingehende Verbindungen warten. Dazu bietet nmap verschiedene Möglichkeiten einen Scan durchzuführen:

Stealth SYN-Scan
Der SYN-Scan stellt keine vollständige Verbindung zum Zielrechner her, wie es beim “Three-Way-Handshake” üblich wäre. Dabei sendet nmap ein SYN-Paket und untersucht die Antwort des Zielrechners. Wird als Antwort ein SYN/ACK-Paket empfangen, werden Verbindungen auf diesem Port akzeptiert. Anstelle eines ACK-Paket zurückzusenden, wird die Verbindung durch nmap sofort unterbrochen, indem ein RST-Paket zum Zielrechner gesendet wird. Dies verhindert, dass der Dienst zu einem DoS Opfer wird.


sudo nmap -sS 192.168.0.1

UDP-Scan
Beim UDP-Scan sendet nmap an jeden zu prüfenden Port ein UDP-Paket, dabei ist der Paketinhalt meistens leer. Ist es jedoch ein “bekannter” Port wie 53 oder 161 wird der Inhalt des Paketes dem Protokoll angepasst.


sudo nmap -sU 192.168.0.1

Scan mit “Lockadressen” (Scan with decoys)
Das Scanning mit “Lockadressen” versucht die eigene IP-Adresse, hinter mehreren aktiven IP-Adressen, zu verstecken. Dabei sendet nmap einige Pakete mit der eigenen IP-Adresse und sendet danach gefälschte Pakete mit den Lockadressen. Ein IDS kann so zwar erkennen, dass von einigen IP-Adressen einen Port-Scan durchgeführt wird, aber welche Adresse den effektiven Scan verursacht, ist nicht einfach zu bestimmen. Wichtig dabei ist, dass “decoys” gewählt werden welche aktiv sind, damit der Zielrechner nicht Opfer eines SYN-Flooding wird.


sudo nmap -D 192.168.0.200,192.168.0.300 192.168.0.1

Im Beispiel wird der Zielrechner 192.168.0.1 gescannt. Die Lockadressen sind: 192.168.0.200 und 192.168.0.300

FIN-, X-mas- und Null-Scans
Bei diesen 3 Scans wird ein unsinniges Paket an jeden Port des Zielrechner geschickt. Wenn der Port aktiv ist, werden diese Pakete einfach ignoriert. Ist der Port jedoch geschlossen und das System reagiert wie im RFC 793 definiert, dann wird es ein RST-Paket zurückschicken. Diese Techniken funktionieren nicht auf allen Systemen, da sich nicht alle Implementierungen nach dem RFC 793 richten. Unter anderem sind das Microsoft Windows, einige Cisco-Devices, BSDI und IBM OS/400.

Null-Scan


sudo nmap -sN 192.168.0.1

Dabei ist kein einziges Flag gesetzt

FIN-Scan


sudo nmap -sF 192.168.0.1

TCP FIN-Flag ist gesetzt

X-mas-Scan


sudo nmap -sX 192.168.0.1

Da dieses Paket die Flags FIN, PSH und URG gesetzt hat, heisst die Technik xmas-scan. (Es leuchtet wie ein Weihnachtsbaum)

SYN-Scan
SYN-Scan bei einem Zielrechner mit Windows

Null-Scan
Ein Null-Scan beim selben Zielsystem, führt wegen der Implementierung zu keinem Resultat

zen.spamhaus.org – PBL

Die PBL von zen.spamhaus.org ist keine Blacklist, wie fälschlicherweise oft angenommen wird. IP-Adressen werden in dieser Liste nicht aufgenommen weil damit SPAM oder ähnliches verschickt wurde, sondern es handelt sich dabei um dynamische IP-Adressen, welche von den ISP’s, an Breitbandkunden verteilt werden. Die Liste beinhaltet weltweite dynamische IP-Bereiche.

FAQ Spamhaus PBL

Fussgänger-Simulation (2009)

Die Fussgänger-Simulation ist während dem Modul “Paralleles Rechnen”, im Herbstsemester 2009, in einer Gruppenarbeit entstanden.

Beschreibung
Es soll eine parallelisierbare Simulation einer fiktiven zweidimensionalen Welt von Fussgängern erstellt werden. Alle Fussgänger – wir wollen sie Agenten nennen – haben ein Ziel, das sie zu einer bestimmten Zeit erreichen möchten. Sie versuchen dies grundsätzlich so einfach wie möglich, d.h. durch eine gradlinige Folge von Schritten zu tun. Wir wollen annehmen, dass jeder Agent pro Sekunde genau einen Schritt in eine beliebige Richtung tun kann. Die Schrittweite ist (in Grenzen) frei und kann auch Null sein.

Vorgehen
Zuerst wurde eine Ein-Prozessor Fussgängerwelt erstellt, welche dann mit dem Framework MPI erweitert wurde, so dass die Applikation auf mehreren Rechnern lauffähig ist und auf jedem Rechner eine eigene Fussgängerwelt abbildet. Die Fussgänger können die Grenzen zwischen den einzelnen Welten (Rechner) überschreiten und die grenznahen Fussgänger nehmen auch Grenzgänger der Nachbarswelt wahr (near-collision detection). Begegnen sich zwei Fussgänger auf ihrem Weg ins Ziel und erkennen eine mögliche Kollision, dann weichen sie einander aus.

Fussgänger-Simulation
Fussgänger-Simulation:
hell grüne Agents = im Ziel
dunkel grüne Agents mit Vektor ins Ziel

XML – Fluchtsymbole

Irgendwo, irgendwann in einem Email:

Gemäss XML-Spy sollte das & Zeichen durch ein Fluchtsymbol ersetzt werden…

Ähm ja, was ist den ein Fluchtsymbol? Ist wohl ein Zeichen, das aus dem XML entflohen ist und freundlicherweise einen Vermerk hinterlassen hat? Da hilft wohl nur eines: dein Freund und Helfer die Suchmaschine. Also suche nach: “xml Fluchtsymbol”. 1 Treffer

Dort steht:

Ein Meta-Zeichen ist entweder ., \, ?, *, +, {, } (, ), [ oder ]. Diese Zeichen haben in regulären Ausdrücken eine spezielle Bedeutung, können aber als Fluchtsymbol angegeben werden, um Atome zu bilden…

Hmm.. irgendwie auch nicht das Richtige. Probieren wir dass selbe doch mal mit “xml meta zeichen”. 2 Treffer.

Aha, beim zweiten Treffer:

Die EntityNodes sind insbesondere zur Darstellung der XML Meta-Zeichen <, >, ’, ” und & notwendig

Und diese Zeichen sollten also als:

&lt; &gt; &apos; &quote; &amp;

geschrieben werden.

Hätte man den üblichen englischen Ausdruck “escape characters” nicht ins Deutsche übersetzt, wäre es doch von Anfang an klar gewesen. ;o)

Gomoku online – ein einfaches Java-Applet (2007)

Gomoku ist der japanische Name für das Spiel “Fünf in einer Reihe”. Dabei handelt es sich um ein einfaches Strategiespiel, das oft mit Papier und Bleistift gespielt wird. Dabei versuchen die beiden Spieler eine Reihe mit 5 Kreisen / Kreuzen zu erstellen. Wer zuerst eine durchgehende Linie mit 5 Elementen hat, gewinnt das Spiel. Mit diesem einfachem Java-Applet können 2 Spieler gegeneinander, auf einer modernen oder klassischen Oberfläche, spielen. Dieses Java-Applet wurde beim Erlernen von Java, im Jahre 2007, in Zusammenarbeit mit H. Gut erstellt.

Das Applet ausprobieren

Mit VBScript OS Version bestimmen

Dieses Skript kann verwendet werden um die Server OS Version zu bestimmen. Das Skript liefert das Resultat für Windows 2000, Windows 2003, Windows 2008. Es kann jedoch auf einfache Weise erweitert werden, damit auch Client Versionen zurückgeliefert werden.


'/*
'	check windows version
'	return: 
'			win2k for windows 2000
'			win2k3 for windows 2003
'			win2k8 for windows 2008
'			unknown if the os is older / newer
'*/
function getOSVersion()
	strWinVersion = ""
	set objWMIService = GetObject("winmgmts:" _
		& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
	Set colOperatingSystems = objWMIService.ExecQuery _
		("Select * from Win32_OperatingSystem")
	For Each objOperatingSystem in colOperatingSystems
			strWinVersion = objOperatingSystem.Version
	Next

	'/**/	
	strMajor = left(strWinVersion,3)
	strOS = ""
	SELECT CASE strMajor
	case "5.0"
		'WScript.Echo "Windows 2000"
		strOS = "win2k"
	case "5.2"
		'WScript.Echo "Windows 2003"
		strOS = "win2k3"
	case "6.0"
		'WScript.Echo "Windows 2008"	
		strOS = "win2k8"
	case else
		'WScript.Echo "Windows x?" & "(" & strWinVersion & ")"
		strOS = "unknown"
	end select
	getOSVersion = strOS
End Function

Netcat als Port Scanner verwenden

Netcat kann als einfacher “Port Scanner” verwendet werden. Dabei liefert das Tool nicht die vielen Optionen wie nmap, aber es genügt um herauszufinden welche Ports bei einem System offen sind.


nc -v 127.0.0.1 -z 80-1024

Parameter:

    -v zeige detailierte Ausgabe
    -z zero-I/O mode [Scanner-Modus]
    80-1024 Ports zum Scannen. Eingabe eines ganzen Bereiches oder nur eines einzelnen Ports

Prüfen ob der Port 80 bei www.monsterli.ch offen ist:


nc -v www.monsterli.ch -z 80
Connection to www.monsterli.ch 80 port [tcp/www] succeeded!