Vorbereitung

Netcat

Wir werden eine echte NAT-Implementierung untersuchen, um zu verstehen, wie eine solche intern arbeitet. Dazu müseen wir kontrolliert Zustand in der NAT-Tabelle erzeugen und dazu brauchen wir ein Werkzeug, das es uns erlaubt TCP-Verbindungen und UDP Pakete zu erzeugen, bei denen wir die genutzten Ports einstellen können, denn NAT nutzt diese zum Multiplexen/Demultiplexen. Darüber hinaus brauchen wir natürlich auch einen Server, der diese Pakete und Verbindungsversuche annimmt. Für diese Aufgabe eignet sich Netcat hervorragend. Die man page von Netcat hat folgendes zu seinem Anwednungsbereich zu sagen:

The nc (or netcat) utility is used for just about anything under the sun involving TCP, UDP, or UNIX-domain sockets. It can open TCP connections, send UDP packets, listen on arbitrary TCP and UDP ports, do port scanning, and deal with both IPv4 and IPv6. Unlike telnet(1), nc scripts nicely, and separates error messages onto standard error instead of sending them to standard output, as telnet(1) does with some.

Für unsere Zwecke also das ideale Werkzeug. Schauen wir uns die für dieses Praktikum wichtigsten Kommandozeilenschalter an.

TCP-Client

Das Netcat-Tool heißt auf der Kommandozeile nc. Als Client werden wir nur einige der verfügbaren Schalten benutzen. Der generelle Aufruf als TCP-Client sieht so aus:

nc [-p source_port] [-q seconds] [destination] [port]

Dabei ist:

  • [-p source_port] - Der Quellport, der genutzt werden soll
  • [-q seconds] - Anzahl an Sekunden, die gewartet werden soll, bevor nc sich beendet (negativer Wert bedeutet nicht beenden!)
  • [destination] - Die IP-Adresse oder der Hostname, zum dem der Client sich verbinden soll
  • [port] - Die Zielportnummer

Beispiel:

echo “hello” | nc -p 3456 -q -1 10.0.0.1 1234

Im Beispiel wird der String “hello” über eine TCP-Verbinding an 10.0.0.1 Port 1234, Quell-Port 3456 gesendet. Die TCP-Verbindung bleibt danach offen (-q -1).

TCP-Server

Einen Server mit Natcat aufzusetzen ist ebenso einfach. Der generelle Aufruf sieht dabei wie folgt aus:

nc -l -k [port]

Dabei ist:

  • -l - Das l steht für listen. Dieses Flag sagt Netcat, dass ein Server und kein Client erzeugt werden soll
  • -k - Diese Option instruiert nc, dass der Server sich nicht nach der ersten Verbindung beendigen soll
  • [port] - Der lokale Port, auf dem der Server Verbindungen annehmen soll

Beispiel:

nc -k -l 1234

Hier wir ein TCP-Server gestartet, der beliebige Verbindungsanfragen auf Port 1234 annimmt.

UDP-Client

Bei UDP ist das Ganze noch ein wenig simpler. Ein Client wird einfach wie folgt gestartet:

nc [-u] [destination] [port]

  • -u - UDP anstelle von TCP benutzen
  • [destination] - Die IP-Adresse oder der Hostname, zum dem UDP Pakete geschickt werden sollen
  • [port] - Die Zielportnummer

Beispiel:

echo “hello” | nc -u 10.0.0.1 1234 

Hier wird ein UDP Datagram mit dem String “hello” als Inhalt an einen UDP-Server auf dem Host 10.0.0.1, Port 1234 geschickt.

UDP-Server

Der UDP-Server unterscheidet sich nur duch den -u Schalter, um UDP anstelle von TCP zu nutzen. D.h. ein UDP-Server sieht wie folgt aus:

nc -l -u -k [port]

Dabei ist:

  • -u - UDP anstelle von TCP benutzen
  • -l - Das l steht für listen. Dieses Flag sagt Netcat, dass ein Server und kein Client erzeugt werden soll
  • -k - Diese Option instruiert nc, dass der Server sich nicht nach dem ersten Paket beendigen soll
  • [port] - Der lokale Port, auf dem der Server Pakete annehmen soll

Beispiel:

nc -k -u -l 1234

Hier wird ein UDP-Server gestartet, der Pakete auf Port 1234 annimmt und beliebige Pakete annimmt ohne sich zu beenden.

NAT-Tabelle anzeigen

Zu guter Letzt brauchen wir noch ein Werkzeug, dass die NAT-Tabelle anzeigen kann und dieses Werzeug heisst conntrack. Hier brauchen wir nur einen Schalter, und zwar -L, mit dem die Tabelle angezeigt wird. conntrack kann wesentlich mehr, aber für unsere Zwecke reicht das einfache Anzeigen der Tabelleneinträge.

Damit sind Sie für das Praktikum gerüstet.

Viel Erfolg!


Zurück
Übersicht
Weiter