## 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).