[Table des matières] - [précédent] - [suivant]
Titre : Effectuer un traceroute
Option : Sortie graphique 2D et 3D
Paquets utiles : graphviz, imagemagick, visual
Une commande traceroute est directement implémentée au sein de scapy. Elle permet d'effectuer des requêtes au format TCP, ce qui permet éventuellement de passer des pare-feu présents sur votre chemin.
Voyons les paramètres de la commande (on utilise le listing des commandes) :
>>> lsc(traceroute)
Les paramètres de la fonction nous sont retournés :
Instant TCP traceroute traceroute(target, [maxttl=30,] [dport=80,] [sport=80,] [verbose=conf.verb]) -> None
La cible peut être seule ou multiple. Quelques exemples :
["www.eof.eu.org"] ["www.google.com", "www.yahoo.fr", "www.microsoft.com"]
Le maxttl correspond au nombre maximum de sauts que l'on souhaite faire lors de notre requête. Ici, il est à 30 par défaut.
Le dport est le port de destination. Bien choisi, il permettra de passer à travers quelques firewalls.
À ce stade, nous pouvons forger une requête et analyser les résultats. Cependant, comme toujours avec scapy, il peut y avoir un intérêt certain à se plonger dans le code de l'application. Dont acte.
Entrons un peu plus en profondeur, dans le code de scapy :
def traceroute(target, dport=80, minttl=1, maxttl=30, sport=RandShort(), l4 = None, filter=None, timeout=2, verbose=None, **kargs):
On s'aperçoit qu'il y a quelques paramètres positionnés par défaut, et surtout quelques quelques arguments non documentés
if verbose is None:
verbose = conf.verb
On positionne un filtre afin de ne récupérer que les paquets qui nous intéressent :
if filter is None:
filter="(icmp and icmp[0]=11) or (tcp and (tcp[13] & 0x16 > 0x10))"
Voici une des options non documentée des plus intéressantes. En effet, elle vous permet de choisir le protocole de niveau 4 que vous souhaitez. Si par exemple vous préférez positionner de l'UDP, il vous suffira de positionner l4="mon protocole de niveau 4". Dans le cas où la variable l4 est laissée par défaut, on fait une interrogation en TCP.
if l4 is None:
a,b = sr(IP(dst=target, id=RandShort(), ttl=(minttl,maxttl))/TCP(seq=RandInt(),sport=sport, dport=dport),
timeout=timeout, filter=filter, verbose=verbose, **kargs)
else:
a,b = sr(IP(dst=target, id=RandShort(), ttl=(minttl,maxttl))/l4,
verbose=verbose, timeout=timeout, **kargs)
Pour finir, la fonction envoie la demande et affiche le résultat :
a = TracerouteResult(a.res)
if verbose:
a.show()
return a,b
La fonction traceroute est un très bon exemple de ce que l'on peut faire avec scapy.
En résumé, voici une commande :
>>> res,unans = traceroute(["www.google.fr","www.yahoo.fr","www.microsoft.com"], dport=80, retry=-2, maxttl=25)
Le retour est affiché à l'écran mais également dans la variable res.
Begin emission: ********************************************************Finished to send 75 packets. *********Begin emission: *Finished to send 10 packets. *Begin emission: **Finished to send 8 packets. Begin emission: *Finished to send 6 packets. Begin emission: Finished to send 5 packets. .Begin emission: Finished to send 5 packets. *Begin emission: Finished to send 4 packets. Begin emission: Finished to send 4 packets. Received 72 packets, got 71 answers, remaining 4 packets 207.46.19.254:tcp80 209.85.129.147:tcp80 217.12.3.11:tcp80 1 192.168.0.254 11 192.168.0.254 11 192.168.0.254 11 2 82.240.204.254 11 82.240.204.254 11 82.240.204.254 11 3 213.228.11.190 11 213.228.11.190 11 213.228.11.190 11 4 212.27.50.141 11 212.27.50.141 11 212.27.50.141 11 6 212.27.57.190 11 212.27.51.10 11 212.27.51.186 11 7 212.27.58.26 11 213.228.3.136 11 212.27.56.42 11 8 212.27.40.22 11 64.233.175.234 11 195.69.145.110 11 9 207.46.47.92 11 72.14.233.105 11 66.196.65.73 11 10 207.46.41.46 11 72.14.232.203 11 66.196.65.67 11 11 207.46.33.213 11 72.14.233.206 11 217.12.0.229 11 12 207.46.34.250 11 209.85.129.147 SA 217.12.0.211 11 13 207.46.44.94 11 209.85.129.147 SA 217.12.3.11 SA 14 207.46.44.37 11 209.85.129.147 SA 217.12.3.11 SA 15 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 16 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 17 - 209.85.129.147 SA 217.12.3.11 SA 18 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 19 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 20 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 21 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 22 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 23 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 24 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA 25 207.46.19.254 SA 209.85.129.147 SA 217.12.3.11 SA
On demande alors une sortie graphique :
>>> res.graph()
[Le lecteur attentif aura constaté que les adresses de retour du traceroute et celles présentes sur le graphique sont différentes ; l'auteur s'en excuse et refera une sortie cohérente dès que possible afin de conserver l'intérêt et le fil pédagogique de la chose :p]
Cette sortie nécessite le logiciel graphviz et utilise imagemagick en éditeur par défaut.
Il est possible de rediriger les graphiques vers des sorties plus "conventionnelles". Nous pouvons par exemple envoyer notre sortie graphique vers une imprimante postscript :
>>> res.graph(type="ps",target="| lp")
On peut également rediriger (indirection unix) la sortie vers un fichier, ici au format svg :
>>> res.graph(target="> /tmp/graph.svg")
Pour finir, ceux qui souhaitent s'offrir une petite animation interactive en 3D, il suffit d'appeler la méthode trace3D :
>>> res.trace3D()
Vous pouvez consulter un aperçu [ici http://secdev.org/projects/scapy/doc/img/trace3d_2.png]
Nous reviendrons plus en détail sur ce module dans le chapitre dédié à ce sujet.
[Table des matières] - [précédent] - [suivant]
Attachments
- wanadoo-yagomi.png (182.1 kB) -
Traceroute depuis un poste wanadoo vers Yahoo, Microsoft et Google
, added by jpgaulier on 04/07/08 22:14:22.
![[SCAPY]](/scapydoc-com/chrome/common/trac_banner.png)
