commit 538645ba15b66231cdc9b2403785cde2f6da467f Author: Carl Kittelberger Date: Thu Mar 1 00:56:15 2018 +0100 Initial commit. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..33c28e3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,96 @@ +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc + +## Intermediate documents: +*.dvi +/*.ps +/*.eps +/*.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Auxiliary and intermediate files from other packages: + +# algorithms +*.alg +*.loa + +# amsthm +*.thm + +# beamer +*.nav +*.snm +*.vrb + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls + +# hyperref +*.brf + +# listings +*.lol + +# makeidx +*.idx +*.ilg +*.ind +*.ist + +# minitoc +*.maf +*.mtc +*.mtc0 + +# minted +*.pyg + +# nomencl +*.nlo + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# todonotes +*.tdo + +# xindy +*.xdy + +# Pandoc output +/*.tex +/*.odt +/*.docx + +# Aufgabenblatt +!AA_*.pdf diff --git a/AA_protokollanalyse_IP.pdf b/AA_protokollanalyse_IP.pdf new file mode 100644 index 0000000..a48bde0 Binary files /dev/null and b/AA_protokollanalyse_IP.pdf differ diff --git a/Kittelberger_Carl_IP.md b/Kittelberger_Carl_IP.md new file mode 100644 index 0000000..25b26a5 --- /dev/null +++ b/Kittelberger_Carl_IP.md @@ -0,0 +1,187 @@ +--- +author: Carl Kittelberger +title: "ITS: \\ IP und ICMP" +date: 2018-03-01 + +papersize: a4 +documentclass: report +classoption: oneside +#classoption: draft +mainfont: Arial +sansfont: Arial +fontsize: 12pt + +toc: true + +header-includes: + + # For \textcolor + - \usepackage{xcolor} + + # Long tables (used by pandoc latex template itself) + - \usepackage{longtable} + + # Localization to German for all package injections + - \usepackage[ngerman]{babel} + + + # Fancy header! + - \usepackage{fancyhdr} + - \usepackage{graphicx} + - \pagestyle{fancy} + - \fancyhf{} + - \fancyhead[L]{\large{\textit{\textbf{ITS} \\ IP und ICMP}}} + - \fancyhead[R]{\raisebox{-0.1\height}{\includegraphics[height=32pt]{img/steinbeis.png}}} + - \fancyfoot[L]{\textcolor{gray}{Carl Kittelberger}} + - \fancyfoot[R]{\textcolor{gray}{\bfseries{Seite \thepage}}} + - \renewcommand{\headrulewidth}{0.4pt} + - \renewcommand{\footrulewidth}{0.4pt} + - \setlength\headheight{36pt} + - \fancypagestyle{plain}{} + + # monospace + - \lstset{basicstyle=\footnotesize\ttfamily,breaklines=true} + - \lstset{framextopmargin=50pt} +--- + +\newpage + +# Analyse eines Pings + +Im Folgenden wurde die IP-Adresse `8.8.8.8` als Ziel für die Pinganfragen verwendet, +die untersucht werden. Die Pinganfragen wurden von einer VM mit Netzwerkbrücke +auf einem Ethernetadapter durchgeführt und Wireshark wurde zur Aufzeichnung +innerhalb der VM verwendet. + +![](img/cmd_ping.png) + +![](img/wireshark_ping.png) + +![](img/wireshark_ping_reply.png) + +Im ersten Screenshot lässt sich ablesen, dass die *IP-Adresse des Computers* von +dem die Pinganfrage verschickt wurde **`192.168.188.52`** lautet. + +Der *Typ* des IP-Pakets ist als Wert **`1` (`ICMP`)** angegeben. + +Im IP-Paket sind insgesamt laut Wireshark **84 Bytes** enthalten, davon belegt der +*IP-Header* **20 Bytes**, die restlichen **64 Bytes** sind die tatsächliche +*Nutzlast* des IP-Pakets, die aus der ICMP-Nachricht besteht. + +Die *Roundtrip Time (RTT)* ist der Zeitabstand zwischen Versand des Anfragepakets +und Erhalten des Antwortpakets. Im Screenshot sieht man als Interval für die +erste Anfrage (Pakete 1 und 2) **etwa 15,05 Millisekunden**. + +Die *Identifikationsnummern* lauten laut Wireshark für das IP-Paket selbst +`0x7566 (30054)` und das ICMP-Paket selbst hat die Identifikationsnummern +im *Big-Endian-Format (BE)* `3533` oder `0x0dcd` bzw. im *Little-Endian-Format (LE)* +`52493` oder `0xcd0d`. Im zweiten Screenshot sieht man, dass die Identifikationsnummern +für das Antwortpaket genau gleich sind. Wären diese Nummern verschieden, könnte +die Antwort der Anfrage nicht mehr zugeordnet werden. + +Das IP-Paket der Anfrage wurde nicht fragmentiert. Fragmentiert ist ein Paket erst dann, +wenn es beim Versenden in mehrere Teile aufgespalten wurde und der entsprechende +Flag für die Fragmentierung im IP-Header gesetzt wurde, was hier nicht der Fall ist +(der Flag ist `0x4000` was Wireshark entsprechend als `Don't fragment` anzeigt). + +## Analyse eines fragmentierten Pings + +### Ping mit 2000 Bytes Inhalt + +![](img/wireshark_ping_2000.png) + +Die *IP-Adressen* haben sich nicht geändert. + +Der IP-Header enthält als *Typ* ebenso noch den gleichen Wert. + +Die Headergröße hat sich ebenfalls nicht verändert, aber die Größe der *Nutzlast* +ist jetzt auf **1500 Bytes** angewachsen. Die restlichen **500 Bytes** finden +sich in einem Folgepaket das aufgrund der Fragmentierung mitgeschickt wurde. + +Die *Roundtrip Time* beträgt jetzt **16,93 Millisekunden** (Unterschied Paket 1 zu 3). + +### Ping mit 3500 Bytes Inhalt + +![](img/cmd_ping_3500.png) + +![](img/wireshark_ping_3500.png) + +Die Änderungen sind ähnlich wie oben, außer dass die *Nutzlast* des ersten Pakets +sich nicht mehr ändert und **1500 Bytes** beträgt. Dafür ist ein weiteres Teilpaket +dazugekommen, bei dem der zusätzliche Inhalt angehängt wurde. + +Die *Roundtrip Time* beträgt jetzt **15,80 Millisekunden** (Unterschied Paket 1 zu 4). + +\clearpage + +# Analyse der Fragmentierung + +In dieser Analyse scheinen Daten über 1500 Bytes fragmentiert zu werden. Beide +Pakete (2000 Bytes und 3500 Bytes) wurden in max. 1500 Bytes große Datenteile +aufgespalten und dann nacheinander verschickt. + +Die wichtige Identifikationsnummer für fragmentierte Pakete ist die `Identification` +im IP-Header, nicht die `Identifier`-Felder im ICMP-Paket, denn dieses wurde +in mehrere Teile zerspaltet und um das Paket zusammensetzen zu können muss stattdessen +die Quelle mehrere Pakete mit dem gleichen Identifizierer verschicken. Entsprechend sehen wir im obigen Screenshot, dass die IP-ID der Folgepakete in der Übersicht die gleiche ID haben wir der IP-Header des ersten Pakets. + +Während der Analyse konnten wir kaum wertvolle Informationen zur Änderung der +*Roundtrip Time* abhängig von der Fragmentierung gewinnen. In der Theorie braucht +es länger, größere Datenmengen zu verschicken, vor allem wenn diese vorher in mehrere +Teile aufgespalten wurden und für jeden Teil ein weiterer Header mitverschickt wird. +Die Übertragung läuft jedoch hier in der Praxis so schnell ab, dass andere Abweichungen +in der Übertragung sich stärker in der RTT abbilden. + +\clearpage + +# Analyse einer Routenverfolgung + +Im Folgenden wurde `reutlingen.de` explizit über IPv4 als Ziel für die Routenverfolgung +verwendet. Das Tool das eingesetzt wurde ist `tracepath` (mit entsprechendem `-4` Flag). + +![](img/tracepath_reutlingen.png) + +![](img/wireshark_tracepath_1.png) + +![](img/wireshark_tracepath_2.png) + +Wireshark registriert eine Sequenz von Paketen vom Typ DNS, UDP und meistens ICMP als Antwort. +Die Pakete der eigentlichen Anfragen zur Routenverfolgung werden über **UDP** versendet. +Dabei fällt auf, dass die UDP-Pakete von oben nach unten beginnend von einer *Time-To-Live (TTL)* +**von `1` inkrementierend größere Werte** (`2`, dann `3`, usw.) zugewiesen bekommen. + +Die *Antwort* auf alle Pakete ist immer ein **ICMP**-Paket. Alle Antworten bis auf +das letzte Paket sind ein **ICMP-Paket mit der Nachricht "Time-to-live exceeded"**. +Diese Antwort wird von dem jeweiligen routenden Knotenserver selbst verschickt +und daran misst `tracepath` die Zeit und die Reaktionsfähigkeit des jeweiligen +Knotens. + +Die *ersten beiden Knotenpunkte* in diesem Fall sind: + +- `192.168.188.1` (`fritz.box`) - der Router im lokalen Netzwerk. +- `62.214.63.94` (`i59F4DCE4.versanet.de`) - der erste externe Router aus dem ISP-Netzwerk. + +\clearpage + +# ICMP + +![](img/wireshark_icmp.png) + +Ein ICMP-Paket ist wie folgt aufgebaut: + +- **`Type`** - ein Wert der die Art der ICMP-Nachricht angibt, z. B. `8` für eine Echo-Anfrage oder `11` für *Time-to-live exceeded*. **Weitere Typen** wären: + - `0` - Echo Reply + - `3` - Destination Unreachable + - `5` - Redirect (IP-Umleitung) + - `9` - Router Advertisement (wird benutzt um einem Rechner den Router bekannt zu machen zur IP-Vergabe). Gegenstück dazu: `10` (Router Solicitation) + - `12` - Parameter Problem (bei ungültigen Inhalten in einer ICMP-Anfrage) + - `13` - Timestamp. Gegenstück: `14` (Timestamp Reply) +- **`Code`** - ein separater Code zur Angabe einer Fehlerursache oder eines anderen Details +- **`Checksum`** - ein Hash des Pakets zum Sicherstellen einer korrekten Übertragung +- **Informationen zu ursprünglichen Anfragepaketen**, meisten IP-Paket und dessen Inhalt. Aufgrund der Informationen die hier enthalten sind (wie der Identifizierer) weiß der Empfänger der Nachricht **basiend auf diesen Informationen auf welche ursprünglich gesendeten Pakete sich diese ICMP-Meldung bezieht.** + +\clearpage + +# Quellenangaben + +- https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml#icmp-parameters-types diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fc31732 --- /dev/null +++ b/Makefile @@ -0,0 +1,73 @@ +PANDOC = pandoc +LATEX = lualatex +LATEX_FLAGS = \ + -file-line-error \ + -recorder \ + -interaction=nonstopmode \ + -halt-on-error \ + --shell-escape +PANDOC_FLAGS = --top-level-division=section +PANDOC_DOCX_FLAGS = --reference-doc=pandoc/reference.docx +PANDOC_ODT_FLAGS = --reference-doc=pandoc/reference.odt +SOFFICE = soffice +SOFFICE_FLAGS = --headless + +MARKDOWN_INPUTS = $(wildcard *.md) + +.PHONY: all build clean clean-pdf clean-tex clean-odt clean-docx default + +TEXINPUTS := .:./pkg/:$(TEXINPUTS) +export TEXINPUTS + +default: all + +all: all-docx all-odt all-pdf all-tex + +all-tex: $(addsuffix .tex,$(basename $(MARKDOWN_INPUTS))) + +all-docx: $(addsuffix .docx,$(basename $(MARKDOWN_INPUTS))) + +all-odt: $(addsuffix .odt,$(basename $(MARKDOWN_INPUTS))) + +all-pdf: $(addsuffix .pdf,$(basename $(MARKDOWN_INPUTS))) + +clean: clean-docx clean-odt clean-pdf clean-tex + +clean-docx: + rm -f $(addsuffix .docx,$(basename $(MARKDOWN_INPUTS))) + +clean-tex: + rm -f $(addsuffix .tex,$(basename $(MARKDOWN_INPUTS))) + +clean-pdf: + rm -f \ + $(addsuffix .aux,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .pdf,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .out,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .fls,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .log,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .toc,$(basename $(MARKDOWN_INPUTS))) \ + missfont.log + +clean-odt: + rm -f $(addsuffix .odt,$(basename $(MARKDOWN_INPUTS))) + +%.docx: %.odt + $(SOFFICE) $(SOFFICE_FLAGS) --convert-to docx $< + +%.odt: %.md + @echo $< "->" $@ + tmpname=$(shell mktemp ~.tmp_XXXXXX.odtpandoc) &&\ + $(PANDOC) $(PANDOC_FLAGS) $(PANDOC_ODT_FLAGS) $< -o "$$tmpname" &&\ + $(SOFFICE) $(SOFFICE_FLAGS) --convert-to odt "$$tmpname" &&\ + rm -f "$$tmpname" &&\ + mv "$$(basename "$$tmpname" .odtpandoc).odt" $@ + +%.pdf: %.tex + @echo $< "->" $@ + $(LATEX) $(LATEX_FLAGS) $(LATEX_PDF_FLAGS) $< 1>/dev/null + $(LATEX) $(LATEX_FLAGS) $(LATEX_PDF_FLAGS) $< 1>/dev/null + +%.tex: %.md + @echo $< "->" $@ + $(PANDOC) $(PANDOC_FLAGS) $(PANDOC_TEX_FLAGS) --listings -s $< -o $@ diff --git a/img/cmd_ping.png b/img/cmd_ping.png new file mode 100644 index 0000000..052a50c Binary files /dev/null and b/img/cmd_ping.png differ diff --git a/img/cmd_ping_2000.png b/img/cmd_ping_2000.png new file mode 100644 index 0000000..b7be132 Binary files /dev/null and b/img/cmd_ping_2000.png differ diff --git a/img/cmd_ping_3500.png b/img/cmd_ping_3500.png new file mode 100644 index 0000000..ba93951 Binary files /dev/null and b/img/cmd_ping_3500.png differ diff --git a/img/steinbeis.png b/img/steinbeis.png new file mode 100644 index 0000000..bd9a2df Binary files /dev/null and b/img/steinbeis.png differ diff --git a/img/tracepath_reutlingen.png b/img/tracepath_reutlingen.png new file mode 100644 index 0000000..90463ca Binary files /dev/null and b/img/tracepath_reutlingen.png differ diff --git a/img/wireshark_icmp.png b/img/wireshark_icmp.png new file mode 100644 index 0000000..6dd8d34 Binary files /dev/null and b/img/wireshark_icmp.png differ diff --git a/img/wireshark_ping.png b/img/wireshark_ping.png new file mode 100644 index 0000000..f14c27b Binary files /dev/null and b/img/wireshark_ping.png differ diff --git a/img/wireshark_ping_2000.png b/img/wireshark_ping_2000.png new file mode 100644 index 0000000..6ff6c63 Binary files /dev/null and b/img/wireshark_ping_2000.png differ diff --git a/img/wireshark_ping_3500.png b/img/wireshark_ping_3500.png new file mode 100644 index 0000000..64830ae Binary files /dev/null and b/img/wireshark_ping_3500.png differ diff --git a/img/wireshark_ping_reply.png b/img/wireshark_ping_reply.png new file mode 100644 index 0000000..9343b60 Binary files /dev/null and b/img/wireshark_ping_reply.png differ diff --git a/img/wireshark_tracepath_1.png b/img/wireshark_tracepath_1.png new file mode 100644 index 0000000..38eed92 Binary files /dev/null and b/img/wireshark_tracepath_1.png differ diff --git a/img/wireshark_tracepath_2.png b/img/wireshark_tracepath_2.png new file mode 100644 index 0000000..dd2ee55 Binary files /dev/null and b/img/wireshark_tracepath_2.png differ diff --git a/pandoc/reference.docx b/pandoc/reference.docx new file mode 100644 index 0000000..5983a92 Binary files /dev/null and b/pandoc/reference.docx differ diff --git a/pandoc/reference.odt b/pandoc/reference.odt new file mode 100644 index 0000000..b260f98 Binary files /dev/null and b/pandoc/reference.odt differ