## Setup Du skal som minimum til denne øvelse have adgang til to maskiner gerne i et virtualisert miljø. Det kunne for eksempel være 2 Linux server maskiner. Har du mulighed og ressourcer nok på din host maskine, kan det også være versioner med en grafisk brugergrænseflade (GUI). Jeg bruger to Linux Mint 20.03 maskiner med GUI. De to maskiner skal som minimum have adgang til et netværk hvor de kan kontakte hinanden via fx ICMP samt adgang til internettet for at installere Scapy. Efter installation af Scapy kan maskinerne med fordel isoleres i et lukket miljø. Følgende er lavet med stor inspiration fra Scapy’s egen interactive tutorial [1] og jeg vil klart anbefale at anvende Scapy’s dokumentation Vi skal bruge tcpdump på minimum én af maskinerne, test om du har tcpdump installeret ved følgende kommando: ```bash hans@linux-01:~$ tcpdump --version tcpdump version 4.9.3 libpcap version 1.9.1 (with TPACKET_V3) OpenSSL 1.1.1f  31 Mar 2020 ``` Vi skal ligeledes bruge pip packet manager under Python 3: ```bash hans@linux-01:~$ pip3 --version Command 'pip3' not found, but can be installed with: sudo apt install python3-pip ``` I mit tilfælde er den ikke installeret så jeg gør det følgende: ```bash sudo apt update sudo apt install libpcap-dev sudo apt install python3-scapy ``` Du kan også gøre brug af Python virtuel miljø som beskrevet i [[Scapy - intro]] Vi kan teste om installationen er gennemført ved at starte Scapy: ![[Pasted image 20231001234950.png]] ## Første test optagelse af data Lad os starte med at optage data pakker på en maskine. Start Scapy op med super user adgang. Skriv kommandoen i den interaktive prompt: ```python >>> sniff(iface="enp0s8", count=5) ``` Husk at udskifte `iface=”enp0s8”` med det interface du ønsker at optage data på. Skift til den anden virtuelle maskine og ping nu IP-adressen på den maskine som du har sat til at optage på (og det netværkskort du optager på) fra denne maskine. Efter kort tid skulle du gerne se følgende besked: ```python >>> sniff(iface="enp0s8", count=5) <Sniffed: TCP:0 UDP:0 ICMP:5 Other:0> ``` Dette er tegn på at der er optaget de ønskede 5 pakker, vi får også et hurtigt overblik over antal og kategori, i dette tilfælde 5 ICMP (internet control message protocol). Ønsker vi at kigge lidt nærmere på disse pakker kan vi gøre følgende: ```python >>> data = _ >>> data.summary() Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw Ether / IP / ICMP 10.1.1.11 > 10.1.1.12 echo-reply 0 / Raw Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw Ether / IP / ICMP 10.1.1.11 > 10.1.1.12 echo-reply 0 / Raw Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw ``` Vi kan bruge at etablere en variabel fra starten: ```python >>> ICMP_data = sniff(iface="enp0s8", count=5) >>> ICMP_data.summary() Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw Ether / IP / ICMP 10.1.1.11 > 10.1.1.12 echo-reply 0 / Raw Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw Ether / IP / ICMP 10.1.1.11 > 10.1.1.12 echo-reply 0 / Raw Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw >>> ``` Nu har vi muligheden for at anvende andre funktioner som fx show() ```python >>> ICMP_data.show() 0000 Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw 0001 Ether / IP / ICMP 10.1.1.11 > 10.1.1.12 echo-reply 0 / Raw 0002 Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw 0003 Ether / IP / ICMP 10.1.1.11 > 10.1.1.12 echo-reply 0 / Raw 0004 Ether / IP / ICMP 10.1.1.12 > 10.1.1.11 echo-request 0 / Raw >>> ``` Nu kan vi kigge nærmere på den første echo-request pakke: ```python >>> ICMP_data[0].show() ###[ Ethernet ]###   dst       = 08:00:27:ad:4c:d7   src       = 08:00:27:22:d9:41   type      = IPv4 ###[ IP ]###      version   = 4      ihl       = 5      tos       = 0x0      len       = 84      id        = 49783      flags     = DF      frag      = 0      ttl       = 64      proto     = icmp      chksum    = 0x6219      src       = 10.1.1.12      dst       = 10.1.1.11      \options   \ ###[ ICMP ]###         type      = echo-request         code      = 0         chksum    = 0x2a90         id        = 0x9         seq       = 0x1         unused    = '' ###[ Raw ]###         load      = 'abcdefghijklmnopqrstuvwabcdefghi' >>> ``` Det giver os jo mange spændende oplysninger som for eksempel Ethernet MAC adresser destination og source, IP src og dst plus protokol. Ligeledes kan vi læse raw-data. >[!Success]- Spørgsmål >Hvilket operativsystem er der formodentlig installeret på den maskine, som har afsendt ovenstående ICMP echo-request? Forklar og uddyb dit svar. > Har du mulighed for at eftervise din påstand? ## Litteraturliste [1] “Usage — Scapy 2.5.0 documentation.” https://scapy.readthedocs.io/en/latest/usage.html#interactive-tutorial (accessed Oct. 03, 2022).