Ongetwijfeld heb je al eens gehoord van tcpdump of Wireshark. Met deze tools dump je al het verkeer op de netwerkkaart van jouw computer in een bestand voor latere analyse. Klinkt ingewikkeld? Dat valt eigenlijk best mee!

Linux-software geeft over het algemeen erg veel informatie wanneer iets misloopt. De meeste commandline-tools kennen wel een verbose- of debug-optie. Zo ontdek je vrij snel waar het precies misloopt. Grafische programma’s tonen dan weer massa’s informatie wanneer je ze opstart vanuit een terminalvenster. Maar soms schiet zelfs die informatie te kort. Heeft het probleem op de één andere manier te maken met het netwerk? Dan kan een dump van het netwerkverkeer je erg veel informatie verschaffen. Zo’n dump bevat de low-level netwerkcommunicatie tussen verschillende systemen, zoals een mailclient op jouw computer en een mailserver op het internet. Wireshark is de bekendste tool om netwerkdumps te maken, maar wij gaan aan de slag met tcpdump. Die tool start je gewoon vanaf de commandline, wat handig is op servers. Daarna kan je de dump nog steeds in de Wireshark analyseren, want dat werkt toch nét iets prettiger.

De grootste uitdaging bij het maken van een netwerkdump is om ervoor te zorgen dat je niet te véél netwerkverkeer dumpt. Start maar eens het commando:

‘tcpdump -v -i eth0’ (of ‘tcpdump -v -i wlan0’ bij een draadloze verbinding).

Dit werkt alleen als je als root-gebruiker bent ingelogd. De output scrollt dan zo snel voorbij dat je de netwerkpakketten nauwelijks kan volgen. Uiteraard bevat Wireshark de benodigde opties om ongewenste pakketten eruit te filteren, maar waarom zou je dat pas nadien doen? Meestal weet je vrij goed waarnaar je op zoek bent, bijvoorbeeld de communicatie tussen twee specifieke machines. Gelukkig bevat tcpdump verschillende opties om aan te geven in welke informatie je geïnteresseerd bent. Vervang om te beginnen de -v-optie door -w, gevolgd door een bestandsnaam. De output verschijnt nu niet meer in je terminal, maar wordt bewaard in een .pcap-bestand. Dat bestand open je nadien in Wireshark voor verdere analyse.

Extra filters bij tcpdump geef je in het zogenaamde bpf-formaat (Berkeley Packet Filter). Op Linux-systemen is dat formaat gedocumenteerd via de pcap-filter-manpage. Ook de manpage van tcpdump zelf bevat al enkele voorbeelden. We zagen reeds dat tcpdump zonder speciale filters gewoon alle netwerkpakketten registreert. Ben je bijvoorbeeld enkel geïnteresseerd in de communicatie tussen jouw machine en een server met IP-adres 192.168.1.8, gebruik dan volgend commando:

$ tcpdump -i wlan0 -w dump.pcap host 192.168.1.8

Biedt die server veel services aan, dan zie je misschien nog steeds té veel pakketten in het .pcap-bestand. Stel dat dit een fileserver is en dat we niet geïnteresseerd zijn in het netwerkverkeer van Samba-filesharing. De filter ziet er dan als volgt uit:

host 192.168.1.8 and not (tcp port 137 or 139 or 445)

Let ook op dat je de volledige filter tussen enkele aanhalingstekens plaatst zodra je speciale tekens (zoals haakjes) gebruikt. Doe je dat niet, dan zal je shell in de war raken en het commando niet correct uitvoeren.

Wil je enkel het netwerkverkeer zien van of naar de server? Gebruik dan ‘src’ respectievelijk ‘dst’ in plaats van ‘host’. Op dezelfde wijze kan je ook filteren op het poortnummer aan beide kanten van de verbinding met ‘src port’ en ‘dst port’. Bijvoorbeeld om enkel pakketten naar 192.168.1.5 op poort 10001 te zien:

dst 192.168.1.5 and dst port 10001

Uiteraard zijn dit maar erg eenvoudige voorbeelden: raadpleeg zeker de manpages voor een volledig overzicht van de beschikbare filters. Zodra je tcpdump onder de knie krijgt, vraag je je al snel af hoe je het ooit zonder hebt gedaan!