Contribuez à SecuObs en envoyant des bitcoins ou des dogecoins.
Nouveaux articles (fr): 1pwnthhW21zdnQ5WucjmnF3pk9puT5fDF
Amélioration du site: 1hckU85orcGCm8A9hk67391LCy4ECGJca

Contribute to SecuObs by sending bitcoins or dogecoins.



[Trames et paquets de données avec Scapy – Partie 2] Installation et configuration

Par Rédaction, secuobs.com
Le 01/10/2007


Résumé : Cette partie concerne l'installation de Scapy ainsi que de l'ensemble des éléments nécessaires à son bon fonctionnement sur un système de type GNU/LINUX. On peut y retrouver également le système de configuration interne à Scapy comme première approche de l'utilitaire ainsi que les différentes configurations réseaux nécessaires à son utilisation pour la suite de ce dossier.



On réalise maintenant l'installation préalable nécessaire à l'utilisation de Scapy sur un système d'exploitation Linux de type Debian/Ubuntu like :

root@casper:~# uname -a
Linux casper 2.6.20-15-generic #2 SMP Sun Apr 15 07:36:31 UTC 2007 i686 GNU/Linux

root@casper:~ # apt-get install python python-gnuplot python-pyx python-crypto graphviz imagemagick python-visual



On teste dans un premier temps le fait que l'interpréteur Python soit bien fonctionnel :

root@casper:~# python
Python 2.5.1 (r251:54863, May 2 2007, 16:56:35)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>



Tapez "ctrl D" pour sortir de Python.


On accéde au répertoire /etc sur notre système :

root@casper:~ # cd /etc/


On récupérer ensuite le fichier ethertypes ( lien ) :

root@casper:/etc # wget www.secdev.org/projects/scapy/files/ethertypes
02:41:59 (936.05 KB/s) - `ethertypes' saved [1,317/1,317]



On accéde alors au répertoire personnel de l'utilisateur en cours de session (ici l'utilisateur root avec /root en répertoire personnel ~) :

root@casper:/etc # cd ~


On configure maintenant les interfaces réseau présentes sur le système d'exploitation de la machine que l'on utilise pour l'ensemble des tests de ce document ; ces informations permettant de mieux comprendre les différents tests que l'on va effectuer :

root@casper:~# lspci | grep 802.11
08:00.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)

root@casper:~# wlanconfig ath0 destroy

root@casper:~# wlanconfig ath0 create wlandev wifi0 wlanmode adhoc

root@casper:~# iwconfig ath0 essid nat

root@casper:~# ifconfig ath0 192.168.0.2

root@casper:~# route add default gw 192.168.0.1

root@casper:~# ifconfig
ath0 Link encap:Ethernet HWaddr 00:15:6D:53:1E:87
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::215:6dff:fe53:1e87/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3867 errors:0 dropped:0 overruns:0 frame:0
TX packets:3719 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3782362 (3.6 MiB) TX bytes:520446 (508.2 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:50 errors:0 dropped:0 overruns:0 frame:0
TX packets:50 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4307 (4.2 KiB) TX bytes:4307 (4.2 KiB)

wifi0 Link encap:UNSPEC HWaddr 00-15-6D-53-1E-87-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:179191 errors:0 dropped:0 overruns:0 frame:7162
TX packets:4355 errors:147 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:199
RX bytes:8345718 (7.9 MiB) TX bytes:668330 (652.6 KiB)
Interrupt:18


root@casper:~# iwconfig
lo no wireless extensions.

eth0 no wireless extensions.

wifi0 no wireless extensions.

ath0 IEEE 802.11g ESSID:"nat" Nickname:""
Mode:Ad-Hoc Frequency:2.462 GHz Cell: 02:15:6D:53:1E:87
Bit Rate:0 kb/s Tx-Power:16 dBm Sensitivity=1/1
Retry:off RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=26/70 Signal level=-70 dBm Noise level=-96 dBm
Rx invalid nwid:1181 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0



La partie ci-dessus étant à adapter à chaque configuration de machine en fonction des interfaces réseaux qui y sont présentes ; pour la suite on teste que la connectivité réseau est bien fonctionnelle :

root@casper:~# ping -c 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=128 time=1.40 ms

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.409/1.409/1.409/0.000 ms



C'est le cas, notre machine dont l'adresse IP est 192.168.0.2 est bien capable d'effectuer un ping vers la machine dont l'adresse IP est 192.168.0.1 ; on peut alors passer à l'installation de Scapy en le récupérant dans un premier temps :

root@casper:~ # wget www.secuobs.com/scapy.py
01:44:27 (61.29 KB/s) - `scapy.py' saved [364,749/364,749]



Il suffit alors de lancer Scapy à l'aide de l'interpréteur Python de la façon suivante :

root@casper:/trash# python scapy.py
Welcome to Scapy (v1.1.1 / -)
>>>



Si l'on souhaite récupérer des informations sur la configuration de la version de Scapy que l'on utilise, il suffit de taper conf puis de taper sur Entrée afin de valider et exécuter la commande :

>>> conf
Version = v1.1.1 / -
ASN1_default_codec =
AS_resolver = <__main__.AS_resolver_multi instance at 0x87f612c>
BTsocket =
IPCountry_base = 'GeoIPCountry4Scapy.gz'
L2listen =
L2socket =
L3socket =
auto_fragment = 1
checkIPID = 0
checkIPaddr = 1
checkIPsrc = 1
check_TCPerror_seqack = 0
color_theme =
countryLoc_base = 'countryLoc.csv'
debug_dissector = 0
debug_match = 0
ethertypes =
except_filter = ''
gnuplot_world = 'world.dat'
histfile = '/root/.scapy_history'
iface = 'ath0'
manufdb =
mib =
nmap_base = '/usr/share/nmap/nmap-os-fingerprints'
noenum =
p0f_base = '/etc/p0f/p0f.fp'
padding = 1
prog = Version = v1.1.1 / -
display = 'display'
dot = 'dot'
hexedit = 'hexer'
pdfreader = 'acroread'
psreader = 'gv'
tcpdump = 'tcpdump'
tcpreplay = 'tcpreplay'
wireshark = 'wireshark'
promisc = 1
prompt = '>>> '
protocols =
queso_base = '/etc/queso.conf'
resolve =
route = Network Netmask Gateway Iface Output IP
127.0.0.0 255.0.0.0 0.0.0.0 lo 127.0.0.1
192.168.0.0 255.255.255.0 0.0.0.0 ath0 192.168.0.2
0.0.0.0 0.0.0.0 192.168.0.1 ath0 192.168.0.2

services_tcp =

services_udp =

session = ''
sniff_promisc = 1
stealth = 'not implemented'
verb = 2
warning_threshold = 5
wepkey = ''



L'utilitaire Scapy nous permet également de choisir de ne visualiser qu'une partie de la configuration si on le désire, ici on souhaite n'afficher que les informations relatives à la table de routage à l'aide de la commande conf.route :

>>> conf.route
Network Netmask Gateway Iface Output IP
127.0.0.0 255.0.0.0 0.0.0.0 lo 127.0.0.1
192.168.0.0 255.255.255.0 0.0.0.0 ath0 192.168.0.2
0.0.0.0 0.0.0.0 192.168.0.1 ath0 192.168.0.2



Par défaut ces informations sont bien équivalentes aux informations de routage délivrées par la commande système route :

root@casper:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 ath0
default 192.168.0.1 0.0.0.0 UG 0 0 0 ath0



Pour ajouter une entrée à la table de routage que l'on vient de visualiser on utilise la commande conf.route.add :

>>> conf.route.add(net="192.168.1.0/24",gw="192.168.0.1")


On vérifie que l'entrée de routage a bien été ajoutée pour le réseau 192.168.1.0/24 avec pour passerelle la machine dont l'adresse IP est 192.168.0.1 :

>>> conf.route
Network Netmask Gateway Iface Output IP
127.0.0.0 255.0.0.0 0.0.0.0 lo 127.0.0.1
192.168.0.0 255.255.255.0 0.0.0.0 ath0 192.168.0.2
0.0.0.0 0.0.0.0 192.168.0.1 ath0 192.168.0.2
192.168.1.0 255.255.255.0 192.168.0.1 ath0 192.168.0.2



On vérifie maintenant la table de routage système et cela pour la seconde fois :

root@casper:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 ath0
default 192.168.0.1 0.0.0.0 UG 0 0 0 ath0



Les tables de routage entre le système et Scapy sont différentes de par le fait que Scapy possède sa propre table de routage interne.

On supprime cette entrée avec la commande conf.route.delt, toujours pour le réseau 192.168.1.0/24 avec une machine faisant office de passerelle et dont l'adresse IP est 192.168.0.1 :

>>> conf.route.delt(net="192.168.1.0/24",gw="192.168.0.1")


On vérifie que l'entrée de routage correspondante a bien été supprimée au niveau de la table de routage interne à Scapy :

>>> conf.route
Network Netmask Gateway Iface Output IP
127.0.0.0 255.0.0.0 0.0.0.0 lo 127.0.0.1
192.168.0.0 255.255.255.0 0.0.0.0 ath0 192.168.0.2
0.0.0.0 0.0.0.0 192.168.0.1 ath0 192.168.0.2



C'est bien le cas l'entrée n'est plus présente dans la table de routage interne ; si l'on avait souhaité ajouter une route uniquement vers une machine en particulier on aurait pu utiliser la syntaxe suivante (host= à la place de net=) pour spécifier que les paquets/trames à destination de la machine dont l'adresse IP est 192.168.1.3 doivent être routés vers la machine dont l'adresse IP 192.168.0.1qui fait donc office de passerelle pour y accèder :

>>> conf.route.add(host="192.168.1.3",gw="192.168.0.1")


On peut également modifier l'interface réseau avec laquelle on souhaite travailler par défaut et cela à l'aide de la commande conf.iface :

>>> conf.iface='eth0'

>>> conf.iface
'eth0'

>>> conf.iface='ath0'

>>> conf.iface
'ath0'



Le système est maintenant entièrement fonctionnel et on peut passer aux fonctions de manipulation de paquets/trames de données qu'offre Scapy.


Autres ressources dans ce dossier :

[Trames et paquets de données avec Scapy – Partie 1] Présentation – lien

[Trames et paquets de données avec Scapy – Partie 3] Utilisation basique – lien

[Trames et paquets de données avec Scapy – Partie 4] Captures de données – lien

[Trames et paquets de données avec Scapy – Partie 5] Traceroute et visualisation 2D/3D – lien

[Trames et paquets de données avec Scapy – Partie 6] Manipulations de paquets et de trames – lien

[Trames et paquets de données avec Scapy – Partie 7] Orientation et représentation objet – lien

[Trames et paquets de données avec Scapy – Partie 8] Compléments et webographie – lien