# Computersystemen/Netwerkdiagnose

Stel dat het ergens fout loopt op jouw netwerk. Hoe kan je tot een goede netwerkdiagnose komen? Hoe pak je het aan om de oorzaak te vinden, zodat je een oplossing kan zoeken?
De tools hieronder kan je uitproberen om de oorzaak van een netwerkprobleem vast te pinnen. Het is enkel bedoeld als inleiding op netwerkdiagnose en niet als diepgaande materie. Er wordt voorkeur gegeven aan programma's die vaak standaard aanwezig zijn op het besturingssysteem of die multiplatform zijn.
Sowieso is kennis van o.a. Netwerkprotocollen en Netwerkstappen heel belangrijk! Enkel zo kan je tools gericht inzetten én interpreteren.

## Shellkennis

Een cli (Command-line-interface) via een shell of terminal is vaak handiger dan een gui, omdat dit doorheen de verschillende versies van besturingssystemen bijna ongewijzigd is. Soms moet je een lopend commando onderbreken. Onderstaande tabel zal dus zeker van pas komen.
| | Windows | Linux |
| Terminal | Windows-vlag + r > cmd of powershell | ctrl + alt + t |
| Help | commando /? | man commando (man, van manual) |
| Onderbreken | ctrl + c | ctrl + c |
| Tab completion | ja | ja |
| Toetsenbordlay-out | | setxkbmap be of setkmap |
Met het Linux-commando setxkbmap be zet (set) je de lay-out (map) van het toetsenbord (kb, keyboard) op azerty (be) i.p.v. qwerty. Het stukje x uit het commando komt van de Linux window manager X.org die o.a. de vensters tekent.

## Netwerkinfo

Voor het achterhalen van het publiek IP:
* Surf naar ipecho.net.
* nslookup myip.opendns.com resolver1.opendns.com. Hiermee doe je vanaf jouw host een DNS-aanvraag (nslookup) aan de DNS-server resolver1.opendns.com, waarbij je eigen publiek IP-adres als verzender IP-adres wordt meegestuurd. Bij de domeinnaam myip.opendns.com zal deze DNS-server altijd jouw eigen publieke IP-adres als antwoord meegeven.
* curl ipecho.net/plain. Met het cli-programma cURL kan je o.a. de inhoud van een webpagina opvragen, waarbij de /plain op het einde van ipecho.net/plain toegevoegd is, zodat enkel een IP-adres wordt weergegeven en geen html-code. Zo kan je dit gebruiken in scripts. Dit commando werkt onder Windows enkel in PowerShell en niet in cmd.
Om andere belangrijke netwerkinstellingen te weten te komen kan je onderstaande commando's gebruiken. Gebruik tab completion waar mogelijk. Bij Linux is er een retro-manier (via net-tools), maar deze is eigenlijk deprecated. Het is aanbevolen om de next generation manier te gebruiken (via iproute2), die meer mogelijkheden biedt.
| | Windows | Linux (retro) | Linux (ng) |
| Privaat ip | ipconfig | ifconfig | ip a (ip address) |
| Subnetmask | ipconfig | ifconfig | ip a |
| Mac-adres | ipconfig /all | ifconfig | ip a of ip l (ip link) |
| DHCP-Server | ipconfig /all | Zie onder deze tabel | Zie onder deze tabel |
| DNS-Server | nslookup x.org | nslookup x.org | nslookup x.org |
| DNS-Servers | ipconfig /all | grep nameserver /etc/resolv.conf | grep nameserver /etc/resolv.conf |
| Default Gateway | netstat -nr | netstat -nr | ip r (ip route) |
| ARP cache | arp -a | arp -n | ip n (ip neigh) |
| | Windows | Linux (retro) | Linux (ng) |
Het cli-gewijs achterhalen van het IP-adres van de DHCP-server hangt in Linux af van de gebruikte distributie:
* dhclient -d -nw, of als je weet dat de NIC eth0 is:dhclient -d -nw eth0
* grep DHCPOFFER /var/log/messages
* grep dhcp-server /var/lib/dhcp/dhclient.leases.
Stel dat je in de logs van jouw firewall een IP-adres vindt, waarvan je zoveel mogelijk informatie wenst te verzamelen, zoals locatie of de ISP waartoe dit IP-adres behoort. Hiervoor bestaan verschillende websites zoals iplocation.net of whatismyip.com. Belangrijk is echter ook om te beseffen dat d.m.v. een gehackte pc, Tor en/of VPN behoorlijk wat van die info onbetrouwbaar kan zijn. Zo zou je kunnen denken dat die hacker in Amsterdam zit, terwijl die eigenlijk in Johannesburg zit.

## Ping

Met het ping-commando test je de bereikbaarheid van apparatuur. Het stuurt een ICMP ECHO_REQUEST pakket naar host of gateway in afwachting van een reactie met een ICMP ECHO_RESPONSE pakket. De reactietijd tussen het versturen en het ontvangen van de bevestiging wordt aangegeven als de round-trip time in milliseconden. Hierdoor weet je of een verbinding al of niet werkt, en krijg je een indicatie over de snelheid en de kwaliteit van de verbinding.
Ping kent implementatieverschillen:
* Windows verstuurt standaard 4 pakketjes, maar met ping -t (zie ping /?) kan je blijven sturen (totdat je onderbreekt met ctrl + c).
* Linux werkt standaard zoals ping -t onder Windows. Met ping -c 4 krijg je hetzelfde zoals het standaardgedrag onder Windows (zie man ping).
Een onbereikbare host:
Een slechte verbinding, waarbij er 27 requests zijn verstuurd, maar er slechts 23 responses zijn ontvangen (en dus een pakket verlies van (27-23)/27=14%):
Je kan ook pingen naar een domeinnaam, bv. ping nl.wikibooks.org. Als er echter iets fout is met je DNS-instellingen, zal dit niet werken. De vertaling van de domeinnaam naar het IP-adres kan dan namelijk niet gebeuren, waardoor ook het pingen niet zal lukken.
De stappen die je zou kunnen ondernemen:
* Ping naar je loopback adres (127.0.0.1). Als het daar al foutloopt kan je in Windows een herstel van de TCP/IP stack proberen via netsh. Als dat niet werkt kan ook je driver of netwerkkaart zelf de oorzaak zijn.
* Als dit niet het probleem is, ping dan naar je eigen IP adres. Indien dit niet werkt, dan is er waarschijnlijk iets mis met één of meerdere instellingen.
* Is dit ook niet het probleem, dan ping eens naar een andere computer op hetzelfde subnet. Werkt dit niet dan zou het de kabel kunnen zijn of de instellingen.
* Pingen naar een domeinnaam.
Blijf echter kritisch. Soms lijkt een ping te lukken, terwijl er toch problemen zijn:
Er is weliswaar 0% packet loss, maar:
* De gateway.home antwoordt i.p.v. google.be
* Het daaraan gekoppelde IP-adres (nl. 192.168.1.1) is duidelijk privaat i.p.v. publiek (bv. 194.78.0.173)
* De time ligt heel laag, typisch voor een LAN verbinding. Bij een WAN-verbinding ligt dit meestal een stuk boven 1 ms (bv. 22 ms).

## nslookup

Als er iets foutloopt met de omzetting van domeinnamen naar IP-adressen, kan nslookup van pas komen.
Het antwoord komt hier van de eigen pc (127.0.1.1), die voor deze DNS-aanvraag luistert op poort 53. Blijkbaar is de domeinnaam nl.wikibooks.org gekoppeld aan het IP-adres 91.198.174.192. Merk op dat de eigen pc onmogelijk alle koppelingen domeinnaam en IP-adres kan weten. "Achter de schermen" vraagt hij dit bijna altijd aan een andere DNS-server. Die het op zijn beurt mogelijks weer aan een andere vraagt. Zo ontstaat een ketting van DNS-aanvragen.
Als een domeinnaam niet te vinden is, krijg je een foutmelding:
I.p.v. de standaard ingestelde DNS-server te gebruiken, kan je er ook zelf één opgeven. Bv. deze van Google, waarbij het logisch is dat je hetzelfde antwoord als daarnet komt:

## netsh

Met het cli-commando netsh (van network shell) kan je in Windows lokale of remote configuratie doen van netwerkapparaten. Als het netwerk vreemd doet (je krijgt bv. onverwacht een link-local adres), dan kan het handig zijn om TCP/IP volledig te resetten met:
Een overzicht van álle DHCP-servers in het netwerk:
Voor de draadloze interfaces kan je met onderstaande commando's ook veel te weten komen. Het eerste is om een html-rapport te genereren (mogelijks moet je de verborgen mappen aanzetten om het te kunnen bekijken). Je vindt er oa. een diagram met de recente Wi-Fi-sessies, algemene systeeminformatie, een lijst met (al of niet verborgen) netwerkadapters, bestaande wifi-profielen, een overzicht van succesvolle en mislukte Wi-Fi-verbingen. Met netsh wlan kan je ook de profielen zien en wissen.
Wil je de ondersteunde WiFi-versies zien (bv. 802.11ax = Wi-Fi 6) en welke veiligheid er kan worden toegepast (bv. WPA3), dan kan je onderstaand commando uitvoeren.
Als je extra uitleg wilt zet je er gewoon help achter. Zo leer je met o.a. onderstaande hoe je van een specifieke opgeslagen SSID het wachtwoord kan weergeven.

## ARP

Het Address Resolution Protocol heeft als voornaamste doel het MAC-adres of hardwareadres te achterhalen van een bepaald IP-adres. Dit proces wordt ook wel IP-adresomzetting genoemd.
Om het gebruik van broadcasts te verminderen worden eenmaal geleerde netwerkverwijzingen meestal tijdelijk lokaal gecachet. In Windows kan je de cache weergeven via het commando arp -a, in Linux is dit arp -n. Een voorbeeld van een arp-cachetabel in Windows, waaruit je bv. kan afleiden dat de computer met IP-adres 10.10.1.4 als MAC-adres 00-15-5d-00-09-04 heeft:

## Traceroute

Als je merkt dat er iets foutloopt, weet je daarom nog niet waar het foutloopt. Gelukkig bestaan er commando's die je de gevolgde route tonen. Zo weet je welke 'hop' het volledig laat afweten of op welke hop er een vertraging blijkt te zitten. Hiervoor kan je traceroute, tracert (op Windows-computers) of tracepath (op enkele Linuxdistributies) gebruiken.

## MTR en PathPing
### MTR

Het cli-programma mtr (My TraceRoute) is een *nix-programma dat de mogelijkheden van traceroute en ping combineert. Bij Windows is er een gui-variant WinMTR, maar deze moet je apart installeren of als PortableApp gebruiken.
Onderstaand voorbeeld toont MTR op Linux die een route analyseert van de host machine (example.lan) naar een webserver bij Yahoo! (p25.www.re2.yahoo.com):

### PathPing

Net als mtr combineert Pathping de mogelijkheden van traceroute en ping, maar het is een Windows cli-programma.

## Netstat

Het cli-programma netstat gebruik je om oa. routingtabellen (netstat -r) en netwerkconnecties te zien. Het laat je ook enkele netwerkstatistieken zien.
Stel dat je bv. malware hebt, waarvan je vermoedt dat deze netwerkconnecties aanmaakt met de buitenwereld, dan zou je netstat -b kunnen gebruiken. Met het commando netstat -s -p tcp -f vraag je statistieken (-s) op van het protocol (-p) tcp, waarbij alle externe adressen als fully qualified domain name worden weergegeven. Zoals je merkt biedt netstat heel wat mogelijkheden, maar de details vallen buiten het kader van deze cursus.

## Routering

Als een pakketje niet op zijn bestemming geraakt, dan kan er iets verkeerd zijn met de routering van dit pakketje. Het opvragen van een routeringstabel kan met netstat -r.
Een voorbeeld op Linux met netstat -rn (de -n schakeloptie wordt gebruikt om IP-adressen i.p.v. eventuele domeinnamen te zien):

## Portscanners

Een portscanner is een computerprogramma dat op verschillende manieren probeert te achterhalen welke TCP- en UDP-poorten op een computer bereikbaar zijn. Kleine tooltjes die dat kunnen zijn bv.:
* Angry IP Scanner: Windows - Linux - Mac
* Advanced IP Scanner: Windows

## Zenmap

Nmap is een cli-programma dat veelal wordt gebruikt voor het inventariseren van computersystemen en netwerken en het testen van de beveiliging daarvan. Het programma duikt nu en dan op in films, bv. Matrix Reloaded, Dredd, Bourne Ultimatum en Elysium.
Zenmap, het GUI-deel, kan als instap een goede inkijk geven in je eigen netwerk. Hiervoor geef je bij 'Target' jouw eigen netwerk op, bv. 192.168.1.0/24 en je duwt op scan. Na een tijdje krijg je enkele hosts en kan je per host details te weten komen, zoals openstaande poorten en gebruikt OS. Je krijgt ook informatie over de topologie van jouw netwerk.

## Wireshark

Met het programma Wireshark kan je zien welke data via jouw NIC wordt verstuurd en ontvangen. Wireshark beeldt niet zomaar het netwerkverkeer af, maar "begrijpt" de structuur van de talrijke netwerkprotocollen. Op deze manier kan de software de verschillende geneste protocollen weergeven en de inhoud van elk veld tonen. Zo kan je Wireshark bv. gebruiken om te weten in welke stap van een netwerkprotocol het foutloopt, maar ook als educatieve tool is het handig.

## Wi-Fi

Bij Wi-Fi-netwerken kan je bovenstaande programma's blijven gebruiken. Het kan ook interessant zijn om specifieke Wi-Fi analyseer programma's te testen. Zo is inSSIDer een Wi-Fi netwerk scanner voor Microsoft Windows and Apple OS X. Het geeft je bv. informatie over de signaalsterkte en of je geen kanalen hebt die overlappen. Er bestaan ook apps voor op de smartphone, zoals Wifi Analyzer op Android.
* ↑ Strikt gezien is X.Org geen window manager, maar het verschil zou ons te ver leiden.
* ↑ Meer info op Deprecated Linux networking commands and their replacements.
* ↑ Onder Windows kan je de default gateway ook vinden bij ipconfig.
* ↑ How can I find my DHCP server?
* ↑ Putorius.net: Find DHCP Server IP Address on Linux Command Line
* ↑ Support.microsoft.com: Snellere en veiligere Wi-Fi in Windows
* ↑ Meer informatie op nmap.org > movies