Netzwerke_1

Computernetze: Internet - kurze Einführung

mit Linux-Kommandozeilenwerkzeugen

Internet

  • inter (lateinisch) = zwischen
  • Internet: Vernetzung zwischen Computernetzen

Netzwerkprotokolle

In einem Kommunikationsprotokoll ist die

  • Syntax
  • Semantik und
  • Synchronisation der Kommunikation

festgelegt, damit Parteien Daten/Informationen austauschen können.

In einem Protokoll sind beispielsweise folgende Dinge geregelt:

  • Wie beginnt eine Nachricht? Wie endet eine Nachricht?
  • Wie ist die Nachricht formatiert?
  • Wen adressiert die Nachricht?
  • Was passiert im Fehlerfall?

Netzwerkprotokolle sind Kommunikationsprotokolle, die den Austausch von Daten zwischen Computern regeln.

TCP/IP

Die wichtigsten Kommunikationsprotokolle im Internet sind:

  • TCP: Transmission Control Protokoll
  • IP: Internet Protocoll

Meist wird der Begriff TCP/IP aber für eine Vielzahl von Protokollen verwendet, die den Datenaustausch im Internet regeln.

TCP/IP Schichtmodell

Software ist oft in Schichten organisiert, um die Komplexität in den Griff zu bekommen (Schichtenarchitektur). Das ISO/OSI-Referenzmodell beschreibt eine (idealisierte) Schichtstruktur für Computernetzwerke mit sieben Schichten. Hier betrachten wir nur das vereinfachte TCP/IP-Referenzmodell:

Schicht Beispiel-Protokolle
Anwendungsschicht (application layer) HTTP, FTP, SMTP, POP3
Transportschicht (transport layer) TCP, UDP, SCRP
Internetschicht IP, ICMP
Netzzugangsschicht Ethernet, WLAN, Token Ring

Dabei kann eine Schicht immer nur auf die Funktionalitäten, der direkt darunterliegende Schicht zugreifen. Der Zugriff erfolgt über die bereitgestellten (Software)-Schnittstellen entsprechend den Protokollen.

Für weitere Protokolle in den Schichten siehe https://de.wikipedia.org/wiki/Internetprotokollfamilie#Protokollstapel

Anwendungsschicht

Internet-Anwendungssoftware nutzt in der Regel direkt die Protokolle der Anwendungsschicht, wie z.B.:

  • Webbrowser: HTTP, HTTPS
  • Email-Programme: SMTP, POP3
  • FTP-Clients bzw. Server: FTP (file transfer)

Beispiele für Kommandozeilenprogramme (Beschreibungen aus der Manpage):

  • wget: GNU Wget is a free utility for non-interactive download of files fromthe Web. It supports HTTP, HTTPS, and FTP protocols, as well as retrieval through HTTP proxies.
  • curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user interaction.
In [3]:
# get reponse header "-S"
wget -S http://christianherta.de
--2021-04-06 17:09:33--  http://christianherta.de/
Resolving christianherta.de (christianherta.de)... 217.160.223.1
Connecting to christianherta.de (christianherta.de)|217.160.223.1|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Content-Type: text/html; charset=UTF-8
  Transfer-Encoding: chunked
  Connection: keep-alive
  Keep-Alive: timeout=15
  Date: Tue, 06 Apr 2021 15:09:33 GMT
  Server: Apache
  X-Powered-By: PHP/5.6.40
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html              [ <=>                ] 184,05K  --.-KB/s    in 0,1s    

2021-04-06 17:09:33 (1,44 MB/s) - ‘index.html’ saved [188465]

Der HTTP-Header beinhaltet Meta-Daten zur Anfrage (request) bzw. zur Antwort (response) etc., mehr siehe z.B.

Client-Server Modell

Ein Server (Diener) ist ein Computer, der in einem Netzwerk bestimmte Dienste zur Verfügung stellt. Der Server beantwortet Anfragen, die von außen an ihn gestellt werden. Die Dienste sind typischerweise rechen- und/oder speicherintensiv, sodass Server oft leistungsfähige Rechner sind. Typische Dienste sind:

  • Retrieval (Suche) in Datenbanken.
  • Zugriff und Speicher auf Dateisysteme oder Emails.
  • Numerische Berechungen.

Clients (Kunden) sind Computer, die die Dienster der Server nutzen. Dazu sendet ein Client ein Anfrage (Request) an einen Server, auf die der Server antwortet (Response).

Daneben gibt es noch den älteren Begriff Host (Gastgeber) aus der Zeit der Großrechner (1960er Jahre). Dies bezeichnet einen Computer, der im Netzwerk eingebunden ist und bestimmte Dienste zur Verfügung stellt. Host wird auch oft synonym mit dem Begriff Server verwendet.

Routing

Das Internet ein Netz aus Computernetzen. Die einzelnen Netze sind durch Router (physikalisch) verknüpft. So erscheint das Internet als riesiges Computernetz, obwohl es eigentlich aus vielen kleinen physikalischen Computernetzen besteht. Das Internet besteht aber eigentlich aus sehr vielen verbundenen Computernetze. Die Router verbinden dabei die Computernetze, d.h. mittels Router können Datenpakete Netzgrenzen "überschreiten". Dies ist dann notwendig, wenn sich Sender und Empfänger eines Datenpaketes nicht im gleichen (physikalischen) Netz befinden. Oft durchquert ein Datenpaket viele unterschiedliche Netze. Dabei verbindet ein Router typischerweise nur zwei Netzwerke. Dazu ist er physikalisch in beiden Netzwerke mit jeweils einer Netzwerkschnittstelle angebunden.

Den Vorgang des Finden des Wegs von Sender zum Empänger durch die verschiedenen Stationen (Router) wird Routing genannt. Beim Routing-Vorgang wird also der Weg des Datenpakets bestimmt. Jeder Router verwendet hierfür eine sogenannte Routing-Tabelle (routing table), in dem er abhängig von der Routenwahlmethode (verwendeter Algorithmus) und der Zieladresse den nächsten Router (genauer: die Adresse des nächsten Routers) auswählt, der innerhalb des Netzes direkt zu erreichen ist, mehr siehe z.B. https://www.elektronik-kompendium.de/sites/net/0810101.htm.

Die Routing-Protokolle liegen im Schichtenmodell auf der Internet-Schicht (bzw. der Verbindungschicht im OSI-Modell).

Die Routing-Tabellen können

  • statisch manuell von den Administrierenden angelegt werden (z.B. mit dem Befehl ip route) oder
  • dynamisch im Austausch mit den angrenzenden Routern automatisch angepasst werden.

Hinweis: Routing-Tabellen bestimmen nicht nur in Routern die Regeln für die Pakete, sondern auch in "normalen" Rechnern. Hier sind Sie aber im Normalfall sehr einfach.

Gateway

Gateways verbinden zwei Systeme, hier zwei Computernetze. Router sind somit spezielle Gateways auf der Internetschicht (bzw. Ebene 3. des OSI-Modells). Computernetz-Gateway können aber auch auf anderen Schichten des OSI-Modells liegen, siehe z.B. https://de.wikipedia.org/wiki/Gateway_(Informatik)#Arbeitsweise.

Dennoch wird oft der Begriff Gateway mit Router synonym verwendet.

IP Adressen

Computer (mit Netzwerkgeräten bzw. Netzkarten), die am Internet angeschlossen sind, können eindeutig durch eine IP-Adresse identifiziert werden (analog zu einer Telefonnummer). In einem Computer können z.B. mehrere Karten stecken, sodass er mehrere IP-Adressen haben kann.

Es gibt zwei Adressierungsschemata:

  • IPv4: 32bit-Adresse (4 Bytes), jedes Byte wird typischweise als Dezimalzahl (von 0 bis 255) geschrieben. Die einzelnen Bytes sind mit Punkten getrennt, z.B. $91.65.98.254$.
  • IPv6: 64bit-Adresse. Da die 32bit Adressen nicht ausreichen für alle an das Internet angeschlossenen Rechner, wurde ein neues Adresssierungsschema entworfen.

Die IP-Adresse ihres Rechners erhalten Sie z.B. folgendermaßen:

In [7]:
hostname --all-ip-addresses # oder -I
192.168.178.22 172.17.0.1 2a02:8109:a0c0:4694:7003:7dda:888f:6316 2a02:8109:a0c0:4694:3561:d126:a69f:4ac8 

Die ausgegeben IP-Adressen (private Adressen) können sich von der IP-Adresse unterscheiden, über die man von außerhalb sieht. Diese öffentliche Adresse erhält man z.B. mittels der Webseite http://ifconfig.me:

In [38]:
# mit curl
curl ifconfig.me # curl schreibt die heruntergeladene Datei per standard nach stdout
echo
# oder per wget
wget -O - -q ifconfig.me 
  # -O - output in Datei "-", das ist stdout
  # -q oder --quiet Turn off Wget's output.
95.90.246.102
95.90.246.102

Erklärung: Wenn Sie sich von zuhause ins Internet einwählen, bekommt Ihr DSL- bzw. Kabelmodem eine (öffentliche) IP automatisch von Ihrem Provider zugewiesen. Das Modem arbeit dabei in der Regel auch als Gateway/Router und übersetzt per NAT (Network Adress Translation, siehe auch IP Masquerading/Port Adress Translation) die interen IPs ihres Heimnetz auf die zugewiesene öffentliche IP (ihres Routers).

Nebenbemerkung: Mittels NAT können viele Rechner (nicht öffentlich sichtbar) gleiche IPs haben. Dies schwächt das Problem ab, dass die Anzahl der Addressen bei IPv4 nicht ausreicht.

Nicht offizielle IPv4 Adressen

IP Adressen müssen (eigentlich) eindeutig sein, damit im Internet ein Computer bzw. seine Netzwerkkarte genau addressiert werden kann. Es gibt aber IPv4-Bereiche, die nicht offiziell vergeben werden. Diese können von (verschiedenen) lokalen Netzen genutzt werden. D.h. das solche Computer nicht vom öffentlichen Netz durch diese IPv4-Adressen erreicht werden können.

Folgende IPv4 Adressenbereiche sind nicht offiziell vergeben:

Addressbereich Menge
10.0.0.0 - 10.255.255.255 ca. 16 Mio Adressen
172.16.0.0 - 172.31.255.255 ca. 1 Mio Adressen
192.168.0.0 - 192.168.255.255 ca. 65.500 Adressen

Außerdem wird 127.0.0.0 bis 127.255.255.255 nicht offiziell vergeben und nur für lokale Kommunikation in einem Rechner genutzt. 127.0.0.1 wird dabei für localhost, d.h. den eigenen Rechner verwendet.

Netzwerkmasken

Der vordere Teil einer IPv4-Adresse entspricht der Netzwerkadresse. Ähnlich wie bei einer Telefonnummer, bei der der vordere Teil die Stadt ausmacht. Dieser Teil ist insbesondere für das Routing relevant. Mit einer Netz(werk)maske (netmask) werden diese Bits markiert.

Netzwerkmasken dienen insbesondere auch dazu anzugeben, welche IPs über die (konfigurierten) Gateways/Router (typischerweise ein Standardgateway) und welche IPs lokal, d.h. ohne über einen Router, erreichbar sind.

Beispiel für die Netzwerkmaske 255.255.0.0 und einer IP 141.45.0.12:

Netzwerkmaske/IPv4

255       255       000       000

entspricht in Bits

11111111  11111111  00000000  00000000

d.h. die ersten 16 Bits geben das Netzwerk an. Alle IPs mit 142.45.*.* stehen für Adressen im Netzwerk. Bei Anfragen von außen auf eine Adresse 142.45.*.* wird ins Netzwerk geroutet. Interne Adressierungen auf 142.45.*.* bleiben im Netzwerk. Wird versucht eine andere IP zu erreichen, so läuft das (über das Gateway (Router). Das heißt, die Datenpakete werden über das physikalische Netz an das Gateway gesendet (zusammen mit weiteren Informationen, wie der gewünschten Ziel-IP-Adresse).

Früher (vor 1993) waren die einzelnen Byte-Blöcke der Netzmaske entweder 255 oder 0. Dabei wurden verschiedene Netzklassen definiert. Seit 1993 gibt es CIDR (Classless Inter-Domain Routing). Die Netzwerkmaske lässt sich auch kurz schreiben, hier 141.45.0.12/16. Die 16 ist das Suffix, welches hier angibt, dass die ersten 16 Bits der Netzwerkmaske den Wert 1 haben. Der Rest (hinteren Bits) ist 0.

Hinweis: CIDR gibt es analog auch für IPv6.

Aufgabe

Machen Sie sich die CIDR Notation klar. Sehen Sie sich hierzu auch das Beispiel "10.10.1.32/27" an.

Aufgabe

Was wäre wenn das Suffix 22 wäre (Hinweis: Dies ist fiktiv). Welche IPs sind für 141.45.45.12/22 im gleichen Netzwerk?

  • 141.45.33.21
  • 141.45.28.250
  • 141.45.51.32
  • 141.45.210.230
  • 141.45.93.83
  • 141.45.4.34
  • 141.45.40.231

Recherche-Aufgabe

Informieren Sie sich zu DHCP. Was ist das? Wozu dient es?

Linux Networking Packages

Unter Linux gibt es zwei Packages, die Kommandozeilenwerkzeuge zum Verwalten, Konfigurieren etc. der Netzwerkfunktionalitäten beeinhalten

  • Das neuere iproute2util-Package mit den Kommandozeilenwerkzeugen: arpd, bridge, ctstat, dcb, devlink, ip, lnstat, nstat, rdma, routef, routel, rtacct, rtmon, rtstat, ss, tc und tipc
  • Das ältere net-tools-Package
    • Kommandozeilenwerkzeuge: ifconfig, route, nameif, iwconfig, iptunnel, netstat, arp

Tipp: Sie sollten die Befehle des moderneren iproute2util-Package verwenden.

Hinweis: Zur Konfiguration von Netzwerkfunktionalität gibt es prinzipielle unter Linux verschiedene Möglichkeiten, siehe z.B. den Artikel aus LinuxUser 7/2019.

ip: show / manipulate routing, network devices, interfaces

Da das Kommando ip so umfangreich ist, gibt es zu den einzelnen Aufgaben eigene Manpages, z.B. zu ip address kann man sich mittels man ip-address die entsprechende Manpage ansehen.

  • man ip-address protocol address management
  • man ip-route routing table management
  • man ip-link network device configuration

  • etc.

Tipp: Drücken Sie nach der Eingabe von man ip- in der bash die Tab-Taste, um die weitern Manpages zu sehen.

Welche Parameter es zu einem Kommando gibt sehen Sie auch z.B. mit ip address help.

In [106]:
whatis ip
ip (8)               - show / manipulate routing, network devices, interfaces...
ip (7)               - Linux IPv4 protocol implementation

Netzwerkgeräte anzeigen

Mit ip addr show kann man die die Netzwerkgeräte (devices) des Rechners anzeigen. Dabei werden die physikalischen Netzwerkgeräte angezeigt, aber auch logische Repräsentationen der Netzwerkgeräte von virtuellen Maschinen, Containern und VPN etc.:

In [12]:
# korrepondierendes legacy command des net-tools-package: 
#ifconfig

ip address show
# ip addr show # address lässt sich auch abkürzen mit addr  
# oder noch kürzer: ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: wlp59s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether cc:f9:e4:c2:cc:4d brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.22/24 brd 192.168.178.255 scope global dynamic noprefixroute wlp59s0
       valid_lft 858784sec preferred_lft 858784sec
    inet6 2a02:8109:a0c0:4694:7003:7dda:888f:6316/64 scope global temporary dynamic 
       valid_lft 6914sec preferred_lft 3314sec
    inet6 2a02:8109:a0c0:4694:3561:d126:a69f:4ac8/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 6914sec preferred_lft 3314sec
    inet6 fe80::4377:f5d1:e295:73fb/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
9: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
10: vboxnet1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 0a:00:27:00:00:01 brd ff:ff:ff:ff:ff:ff
11: vboxnet2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 0a:00:27:00:00:02 brd ff:ff:ff:ff:ff:ff
12: vboxnet3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 0a:00:27:00:00:03 brd ff:ff:ff:ff:ff:ff
28: cscotun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1300 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 141.45.243.131/22 brd 141.45.243.255 scope global cscotun0
       valid_lft forever preferred_lft forever
    inet6 fe80::4cc2:4627:d1c8:4232/126 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::b63b:ce93:42b:6cf4/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

Hier sieht man, dass IP-Addressen den Netzwerkgeräten (wie Netzkarten) zugeordnet sind.

  • lo steht dabei für das Loopback-Device (wird gleich behandelt).
  • wlp59s0 ist die WLAN-Schnittstelle
  • vboxnetX sind die Netzwerke virtuelle Maschinen (virtuellBox).

Außerdem stehen zu den einzelnen Netzwerkgeräten verschiedene Informationen. Beispiel:

2: wlp59s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether cc:f9:e4:c2:cc:4d brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.22/24 brd 192.168.178.255 scope global dynamic noprefixroute wlp59s0
       valid_lft 858504sec preferred_lft 858504sec
    inet6 2a02:8109:a0c0:4694:7003:7dda:888f:6316/64 scope global temporary dynamic 
       valid_lft 7191sec preferred_lft 3591sec
    inet6 2a02:8109:a0c0:4694:3561:d126:a69f:4ac8/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 7191sec preferred_lft 3591sec
    inet6 fe80::4377:f5d1:e295:73fb/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Hier bedeutet:

  • BROADCAST und MULTICAST: Die Karte unterstützt Broadcast und Multicast.
  • UP: Die Schnittstelle ist aktiviert.
  • mtu 1500: maximal transmission unit 1500, d.h. maximale Größe eines Pakets ist 1500 Byte.
  • cc:f9:e4:c2:cc:4d MAC-Adresse der Schnittstelle (siehe unten)

So kann man z.B. die verwendete IPv4 extrahieren:
ip -o -4 add show scope global | awk '{ print $4 }'

192.168.178.22/24

ip neighbour echo echo -n "IP and Hardware address (MAC Address) of a neighbour are " echo -n $(ip neighbour | grep REACHABLE | head -1| awk '{print $1 " and " $5 "."}')

192.168.178.1 dev wlp59s0 lladdr c8:0e:14:97:fc:c8 REACHABLE
fe80::ca0e:14ff:fe97:fcc8 dev wlp59s0 lladdr c8:0e:14:97:fc:c8 router DELAY
2a02:8109:a0c0:4694:ca0e:14ff:fe97:fcc8 dev wlp59s0 lladdr c8:0e:14:97:fc:c8 router STALE

IP and Hardware address (MAC Address) of a neighbour are 192.168.178.1 and c8:0e:14:97:fc:c8.


Korrepondierendes Kommando des net-tools-package:
arp -a

fritz.box (192.168.178.1) at c8:0e:14:97:fc:c8 [ether] on wlp59s0

Aufgabe

Wie erhalten Sie die physikalische Adresse ihrer Graphikarte bzw. ihres WLANs?

Aufgabe

Speichern Sie nur die IPv4 Adresse in einer Variablen:

In [55]:
my_ip= 
# Hinweis: Sie haben bereits gelernt, die Ausgabe 
#  eines Befehls in einer Variablen zu speichern
In [57]:
# So wird neben anderen Informationen das Suffix (Netzwerkmaske) angezeigt 
ip -o -f inet addr show scope global
2: wlp59s0    inet 192.168.178.22/24 brd 192.168.178.255 scope global dynamic noprefixroute wlp59s0\       valid_lft 849697sec preferred_lft 849697sec

Aufgabe

Weisen Sie der Variable my_netsuffix über den Befehl ip und Extraktion das Netsuffix zu:

In [58]:
my_netsuffix=

ip route

Die Routingtabelle kann mit dem Befehl ip route angezeigt bzw. manipuliert werden.

In [71]:
whatis ip-route
ip-route (8)         - routing table management
In [10]:
ip route show match default
default via 192.168.178.1 dev wlp59s0 proto dhcp metric 600 

Anzeigen der vollen Routing Tabelle mit

ip route

default via 192.168.178.1 dev wlp59s0 proto dhcp metric 600 
169.254.0.0/16 dev wlp59s0 scope link metric 1000 
192.168.178.0/24 dev wlp59s0 proto kernel scope link src 192.168.178.22 metric 600 


Hier ist sind die Rechner in 92.168.178.0/24 direkt erreichbar, genauer

  • 92.168.178.0 steht für die Netzwerkadresse
  • 92.168.178.1 - 92.168.178.254 sind mögliche IPs für Computer
  • 92.168.178.255 ist die Broadcast-Adresse

169.254.0.0/16 steht für Link-Lokal, aus RFC 5735:

169.254.0.0/16 - This is the "link local" block.  As described in
[RFC3927], it is allocated for communication between hosts on a
single link.  Hosts obtain these addresses by auto-configuration,
such as when a DHCP server cannot be found.

Mit ip route kann man auch neue Einträge in der Routing Tabelle erstellen bzw. Einträge löschen.

Domainnamen

Da IP-Adressen für Menschen schwer zu merken sind, gibt es eine Möglichkeit die IP-Adressen über Namen (Domains) zu erhalten, die von dem hierachisch organisierten Verzeichnisdienst DNS bereitgestellt werden. DNS steht dabei für Domain Name System. Eine kurze Erklärung finden Sie in

Beispiel für einen Domainnamen: rc.f4.htw-berlin.de

  • de: Top-Level Domain (first-level). Diese bestimmt wer in dieser Zone die Verwatung übernimmt. Für deutschland ist es DENIC.
  • htw-berlin: second-level
  • f4: third-level
  • rc: fourth-level

Der vollständige Name einer Domain heißt Fully Qualified Domain Name (FQDN).

Mit Hilfe von nslookup oder dig (beide aus dem package dnsutils) bekommt man eine Namensauflösung und weitere Informationen (siehe man-Pages), z.B.:

In [65]:
nslookup htw-berlin.de
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	htw-berlin.de
Address: 141.45.66.214

In [73]:
whatis host
host htw-berlin.de
host (1)             - DNS lookup utility
htw-berlin.de has address 141.45.66.214
htw-berlin.de mail is handled by 50 mail1.rz.htw-berlin.de.
In [74]:
# andersrum:
host 141.45.66.214
214.66.45.141.in-addr.arpa domain name pointer htwb.de.
214.66.45.141.in-addr.arpa domain name pointer s.htw-berlin.de.

Nameserver

Die Auflösung von Domain-Namen zu IP-Adressen wird von sogenannten Nameservern geleistet.

Loopback Device lo - localhost

Das Loopback-Device lo dient dazu, dass (Netzwerk-)Dienste lokal auf dem Rechner verfügbar sind, auch wenn kein Netzwerkgerät angeschlossen ist. D.h. auch ohne Netzwerk können lokale Programme über das Netzwerkprotokolle kommunizieren (eine Form der Interprozesskommunikation). Dies kann auch zu Diagnosezwecken genutzt werden.

Ein Beispiel kennen Sie schon jupyter notebook. Hier wird beim Start ein Webserver auf dem lokalen Rechner gestartet, um jupyter notebooks über den Webbrowser zu bearbeiten und auszuführen.

localhost ist die korrespondierende Top-Level-Domain, die für Dokumentations- und Testzwecke reserviert ist. Das Loopback-Device (localhost) hat per Standard die IP-Adresse 127.0.0.1 (::1 bei IPv6).

In [50]:
nslookup localhost
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	localhost
Address: 127.0.0.1
Name:	localhost
Address: ::1

In [51]:
host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1

Kommando ping

Das Kommando ping dient zur Netzwerkdiagnose. So kann man z.B. überprüfen, ob Rechner über das Netzwerk zu erreichen sind. Dazu antworten typischerweise alle Netzwerkschnittstellen auf das entsprechende ICMP-Paket.

In [17]:
whatis ping
ping (8)             - send ICMP ECHO_REQUEST to network hosts
In [78]:
# Überprüfen, ob das loopbackdevice funktioniert:
ping localhost -c 2
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.068 ms

--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1017ms
rtt min/avg/max/mdev = 0.068/0.069/0.070/0.001 ms
In [77]:
# Ist z.B. das Internet erreichbar 
# und kann ich Namen verwenden (Nameserver)
ping christianherta.de -c 1
PING christianherta.de (217.160.0.91) 56(84) bytes of data.
64 bytes from 217-160-0-91.elastic-ssl.ui-r.com (217.160.0.91): icmp_seq=1 ttl=55 time=25.1 ms

--- christianherta.de ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 25.132/25.132/25.132/0.000 ms

Aufgabe (Schreiben eines bash-Skriptes): Einfacher Netzwerk-Scan mit ping

Nutzen Sie ping um alle erreichbaren Rechner im lokalen Netz auszugeben.

Machen Sie folgende vereinfachte Annahmen:

  • IPv4 mit Netzmaske 255.255.255.0, d.h. nur das letzte Byte variieren (fix.fix.fix.*)

Network Scan mit anderen Tool

Es gibt eine Reihe von Netzwerktools, wie z.B. nmap, mit denen man Netzwerke untersuchen und scannen kann, siehe z.B. https://www.elektronik-kompendium.de/sites/net/1910051.htm.

Hinweis: Scannen Sie nicht einfach fremde Computernetze (auf Schwachstellen) aus juristischen Gründen.

traceroute

Mit Hilfe des Programms traceroute lässt sich eine Route eines Datenpakets aufzeigen, mehr siehe z.B. auch. https://de.wikipedia.org/wiki/Traceroute

In [69]:
traceroute --resolve-hostnames christianherta.de
traceroute to christianherta.de (217.160.223.1), 64 hops max
  1   192.168.178.1 (fritz.box)  5,961ms  3,904ms  5,217ms 
  2   62.155.240.135 (p3e9bf087.dip0.t-ipconnect.de)  14,357ms  12,660ms  10,989ms 
  3   217.5.109.14 (217.5.109.14)  142,040ms  24,808ms  125,573ms 
  4   80.157.131.194 (80.157.131.194)  36,681ms  142,036ms  22,915ms 
  5   212.227.120.168 (ae-9.bb-b.bs.kae.de.oneandone.net)  30,113ms  27,467ms  38,300ms 
  6   212.227.121.222 (port-channel-3.gw-distd-sh-2.bs.kae.de.oneandone.net)  145,139ms  27,686ms  26,885ms 
  7   *  *  * 
  8   *  * 
In [16]:
whatis mtr

# mrt network diagnostic tool
mtr -c 10 -r christianherta.de
mtr (8)              - a network diagnostic tool
Start: 2021-04-08T09:09:14+0200
HOST: platon                      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- _gateway                   0.0%    10    1.4   2.7   1.4   7.5   1.8
  2.|-- ip5b4162fe.dynamic.kabel-  0.0%    10    7.8  11.4   7.3  32.5   7.5
  3.|-- 83-169-180-166-isp.superk  0.0%    10    8.6  14.1   7.3  52.9  14.1
  4.|-- ip5886bb8c.dynamic.kabel-  0.0%    10    8.9  12.1   8.5  22.7   4.2
  5.|-- 145.254.3.66               0.0%    10   10.1  11.4   9.6  16.1   1.9
  6.|-- 145.254.2.179              0.0%    10   17.5  19.6  16.8  28.3   3.8
  7.|-- 145.254.2.179              0.0%    10   27.3  20.4  16.8  27.3   3.7
  8.|-- ae-18.bb-b.fr7.fra.de.one  0.0%    10   18.0  18.6  16.1  20.8   1.7
  9.|-- ae-9.bb-b.bs.kae.de.onean  0.0%    10   21.3  23.0  18.7  47.6   8.7
 10.|-- port-channel-3.gw-distd-s  0.0%    10   22.5  21.8  20.6  24.7   1.2
 11.|-- clienthosting.eu           0.0%    10   19.6  19.9  18.3  21.3   0.8

Socket-basierte Kommunikation

Ports

Da auf jedem Rechner mehrere Prozesse laufen können, müssen zu den Prozessen korrespondierende Netzwerkverbindungen zusätzlich zur IP-Adresse adressiert werden können. Jede TCP- und UDP-Verbindung der Transportschicht wird daher zusätzlich mit einer Portnummer versehen. Ein Port ist eine 16 Bitzahl, somit stehen 65.536 unterschiedliche Ports zur Verfügung.

Sockets

Sockets) dienen zur Kommunikation zwischen Prozessen (auch Rechnerübergreifend).[

Ein Socket wird durch ein Triple adressiert (Protokoll ist entweder TCP oder UDP):

  • (Protokoll, lokale Adresse, lokaler Port).

Da zwei Rechner kommunizieren ergibt dies ein 5-Tupel , da das Protokoll identisch sein muss:

  • (Protokoll, lokale Adresse, lokaler Port, romote Adresse, remote Port)

Für gewisse Standard-Dienste der Anwendungsschicht sind TCP und UDP Portnummern (0-1023) reserviert, d.h. diese Nummern können nicht frei gewählt werden, z.B.: HTTP (TCP-80), SSH (TCP-22), HTTPS(TCP-443) (mehr siehe hier).

Diese Zuordnung ist in Linux in der Datei /etc/services konfiguriert:

In [105]:
cat /etc/services | grep http | grep tcp
http		80/tcp		www		# WorldWideWeb HTTP
https		443/tcp				# http protocol over TLS/SSL
http-alt	8080/tcp	webcache	# WWW caching service

netcat nc

Mit netcat lässt sich eine socketbasierte TCP oder UDP Kommunikation zum Datenaustausch realisieren. Auf Grund seiner Vielseitigkeit wird es auch als "Schweizer Taschenmesser für TCP/IP" bezeichnet. netcat kann sowohl im Client- als auch Server-Mode agieren.

In [41]:
whatis nc
nc (1)               - arbitrary TCP and UDP connections and listens

Beispiel: TCP-Connection zum Server christianherta.de auf Port 80 (Standardport für HTTP-Server). Die Nachricht, die gesendet wird, entspricht einem HTTP-Header (siehe Felder). Zurückgesendet wird eine HTTP-Response mit Header und Content.

In [77]:
echo "GET /index.html HTTP/1.1 
Accept: text/html 
Accept Language: en-US,en;q=0.9,de;q=0.8
Accept-Charset: utf-8
Accept-Language: de-DE
Host: christianherta.de
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
" | nc christianherta.de 80
HTTP/1.1 302 Found
Content-Type: text/html; charset=iso-8859-1
Content-Length: 218
Connection: keep-alive
Keep-Alive: timeout=15
Date: Fri, 19 Nov 2021 15:35:00 GMT
Server: Apache
Location: http://christianherta.de/index.php

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://christianherta.de/index.php">here</a>.</p>
</body></html>

Aufgabe

Benutzen Sie das Programm netcat nc, um eine socketbasierte Server- und Client-Kommunikation aufbauen. Informaieren Sie sich hierzu über die Funktionalität von nc (Recherche). Lesen Sie auch die man-Page (man nc), insbesondere Punkt CLIENT/SERVER MODEL und gehen Sie vor, wie dort beschrieben. Öffnen Sie hierzu zwei Terminal(emulatoren) für nc.

Hinweis: Beide Server und Client lesen und schreiben via stdin bzw. stdout.

Socket-Monitoring mit ss

Mit dem Werkzeug sslassen sich die Sockets untersuchen. ss entspricht dem alten net-tools-Package netstat:

ss  is used to dump socket statistics. It allows showing information similar to netstat.  It can display more TCP and state informations than other tools.

ss -a

-a, --all
          Display both listening and non-listening (for TCP this means established connections) sockets.

Aufgabe

Nutzen Sie ss, um den Port des Client zu finden der obigen Server-Client Verbindung (vorherige Aufgabe) per netcat. Nutzen Sie das Werkzeug ss in einer weiteren Konsole. Hiermit können Sie sehen, ob die entsprechenden Prozesse sich mit den Port verbunden haben etc. Filtern Sie die lange Ausgabe von ss. Sie sollten wissen wie das geht. Informieren Sie sich zudem weiter über ss, z.B. hier https://www.linux.com/topic/networking/introduction-ss-command/.

Unix-Sockets

Nebenbemerkung: Neben den Netzwerk-Sockets gibt es unter Linux auch noch Unix-Sockets zur Interprozesskommunikation, siehe man unix.

Bashs /dev/tcp/host/port Funktionalität

Wenn ein Kommando auf /dev/tcp/host/port ausgeführt wird, öffnet die Bash eine entsprechende TCP/IP Verbindung, siehe https://tldp.org/LDP/abs/html/devref1.html.

>From the bash reference: /dev/tcp/host/port If host is a valid hostname or Internet address, and port is an integer port number or service name, Bash attempts to open a TCP connection to the corresponding socket.

Beispiel Anfrage auf Port 13 (Daytime) von time.nist.gov um die Uhrzeit zu erfragen:

In [60]:
cat </dev/tcp/time.nist.gov/13
59313 21-04-09 10:06:53 50 0 0 239.1 UTC(NIST) * 

Ein HTTP-request:

In [84]:
# see https://www.linuxjournal.com/content/more-using-bashs-built-devtcp-file-tcpip
TCP_HOST=christianherta.de       
TCP_PORT=80 # Port 80 entspricht http
exec 5<>/dev/tcp/${TCP_HOST}/${TCP_PORT} # fd 5 für /dev/tcp...

# Schreiben in den Filedeskriptor sendet die Daten per TCP/IP 
echo -e "GET /index.html HTTP/1.1 \nhost: christianherta.de\n" >&5

# Ausgabe der empfangenen Daten mittels Lesen aus dem Filedeskriptor 
cat <&5
HTTP/1.1 302 Found
Content-Type: text/html; charset=iso-8859-1
Content-Length: 218
Connection: keep-alive
Keep-Alive: timeout=15
Date: Sat, 20 Nov 2021 10:38:38 GMT
Server: Apache
Location: http://christianherta.de/index.php

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://christianherta.de/index.php">here</a>.</p>
</body></html>

Hier wird exec verwendet:

exec — execute commands and open, close, or copy file descriptors

exec 5<>/dev/TCP/..: Öffnet Dateideskriptor 5 zum Lesen und Schreiben auf dem entsprechenden TCP/IP Socket. Hier wird exec kein Kommando übergeben, d.h. die Dateiweiterleitungen über den Filedeskriptor können in der laufenden Shell verwendet werden.

If command is not specified, any redirections take effect in the current shell, and the return status is 0.

Nebenbemerkung: exec ersetzt bei Übergabe eines Kommandos den laufenden Prozess mit den neuen Kommando-Prozess.

Anwendungsbeispiel: Port Scanner

In [95]:
# Port Scanner : which ports are open on a host
# see Book "Cybersecurity Ops with bash"
#
function scan(){
  host=$1
  from=$2
  to=$3
  printf '%s' "$host" 
  for ((port=from;port<to;port++)) # in arithmetischer Umgebung kein $
  do 
    # don't response trick from https://catonmat.net/tcp-port-scanner-in-bash
    timeout 1s bash -c "echo >/dev/null 2>&1 < /dev/tcp/${host}/${port}" 
    if (($?==0)) ; then 
      printf ' %d' "${port}"
    fi
  done
  echo
}
In [101]:
scan christianherta.de 20 24
scan christianherta.de 75 85
christianherta.de 21 22
christianherta.de 80 81

Weitere Netzwerk-Tools

  • telnet: Auf entferneten Rechnern einloggen - Die Kommunikation ist aber unverschlüsselt. Daher ist unbedingt ssh (wird noch behandelt) vorzuziehen.
  • ftp: Filetransfer zwischen Rechnern - Die Kommunikation ist aber unverschlüsselt. Daher ist unbedingt sftp (wird noch behandelt) vorzuziehen.

telnet kann man aber auch für TCP-IP Socket Kommunikation verwenden:

In [97]:
# HTTP-Request mit telnet
# https://stackoverflow.com/questions/7013137/automating-telnet-session-using-bash-scripts/7021653#7021653
{ echo -e "GET /index.html HTTP/1.1 \nhost: christianherta.de\n"; sleep 1; } | telnet christianherta.de 80
Trying 217.160.0.91...
Connected to christianherta.de.
Escape character is '^]'.
HTTP/1.1 302 Found
Content-Type: text/html; charset=iso-8859-1
Content-Length: 218
Connection: keep-alive
Keep-Alive: timeout=15
Date: Sat, 20 Nov 2021 11:06:35 GMT
Server: Apache
Location: http://christianherta.de/index.php

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://christianherta.de/index.php">here</a>.</p>
</body></html>
Connection closed by foreign host.

Aufgabe (optional): NFS und NIS

Lesen Sie die kurze Beschreibung zu NFS und NIS: https://www.linux-praxis.de/nfs-und-nis

Weitere Netzwerk- und Securitytools

Hinweis: Unter SecTools.Org: Top 125 Network Security Tools finden Sie eine Liste mit 125 weiteren Netzwerk- und Security-Werkzeugen. Erwähnenswert sind hier Sniffer-Programme, tcpdump bzw. wireshark, mit denen sich Netzwerkverkehr überwachen lässt. Beachten Sie aber, dass Sie aus juristischen Gründen keine fremden Daten mitlesen dürfen. Beachten Sie zudem, dass das Starten mit root-Rechten aus sicherheitsgründen problematisch ist, siehe z.B. https://blog.packet-foo.com/2018/09/attacking-wireshark/.

Umfangreiches Standardlehrbuch zu Computernetzwerken:

  • Andrew S. Tanenbaum / Prof. David J. Wetherall: Computernetzwerke, 5., aktualisierte Auflage, Pearson Studium 2012