VoIP and Hacking | Consulenza Documentazione

Geotracerouting con Scapy

by admin on Apr.05, 2009, under Hacking, Networking

Può essere interessante, per chi è attratto dall’argomento internetworking, esaminare il tragitto che i pacchetti percorrono per giungere a destinazione, verificando come tali tragitti possano differire, in relazione al protocollo utilizzato, ed anche ad altri fattori, come indirizzo IP di origine, indirizzo IP di destinazione, porta di origine, porta di destinazione, Type of Service (o TOS), calcolati nel load-balancing dei routers intermedi.
Questo comportamento è facilmente riproducibile facendo ricorso a poche rige di Python, ed ai moduli scapy e ip2country (per la geo-localizzazione dei nodi intermedi), per realizzare un personale traceroute che utilizza il protocollo TCP.

geotrac.py:
#! /usr/bin/env python
import sys
import ip2country
from scapy.all import *


ip2c = ip2country.IP2Country(verbose=0)
ans,unans=sr(IP(dst=sys.argv[1], ttl=(1,25),id=RandShort())/TCP(flags=0×2,dport=80))


for snd,rcv in ans:
a=ip2c.lookup(rcv.src)
print snd.ttl, rcv.src, “t”, a
if isinstance(rcv.payload, TCP):
break


#  python geotrac.py 61.67.192.134 2>/dev/null |tail -n +3 |column -t
1   192.168.1.1     (None, None)
2   151.23.227.33   (’IT’, ‘Italy’)
3   10.0.31.1       (None, None)
4   151.6.225.65    (’IT’, ‘Italy’)
5   151.6.204.41    (’IT’, ‘Italy’)
6   151.6.2.78      (’IT’, ‘Italy’)
7   151.6.6.106     (’IT’, ‘Italy’)
8   80.81.192.64    (’DE’, ‘Germany’)
9   62.216.128.241  (’GB’, ‘United-Kingdom’)
10  62.216.128.45   (’GB’, ‘United-Kingdom’)
11  85.95.25.173    (’GB’, ‘United-Kingdom’)
12  85.95.25.6      (’GB’, ‘United-Kingdom’)
13  85.95.25.201    (’GB’, ‘United-Kingdom’)
14  85.95.25.206    (’GB’, ‘United-Kingdom’)
15  80.77.1.150     (’HK’, ‘Hong-Kong’)
16  203.187.6.37    (’TW’, ‘Taiwan’)
17  203.187.9.204   (’TW’, ‘Taiwan’)
18  58.86.0.189     (’TW’, ‘Taiwan’)
19  58.86.0.22      (’TW’, ‘Taiwan’)
20  58.86.5.98      (’TW’, ‘Taiwan’)
21  61.67.192.134   (’IN’, ‘India’)

Se, per fare un confronto, tracciamo la rotta verso la stessa destinazione utilizzando il normale comando traceroute di Linux, che utilizza invece il protocollo UDP, scopriremo una notevole diversità.

# traceroute -n 61.67.192.134
[...]
1  192.168.1.1
2  151.23.227.33
3  10.0.31.1
4  151.6.225.65
5  151.6.204.41
6  151.6.6.106
7  151.6.2.82
8  80.81.192.64
9  85.95.25.173
10  85.95.25.6
11  62.216.128.210
12  62.216.128.33
13  85.95.25.201
14  85.95.25.206
15  62.216.145.54
16  203.187.6.37
17  203.187.9.204
18  58.86.0.189
19  58.86.0.22
20  58.86.5.98
21  61.67.192.134

Ripetendo più volte le stesse prove, i risultati non cambiano, inducendo a concludere che la variabilità dei percorsi non può dipendere in questo caso, da una scelta temporale.
Per verificare che la differenza sia piuttosto attribuibile al protocollo, ho provato a modificare il programma in Python per utilizzare stavolta UDP, e la porta di destinazione 53.
La rotta evidenziata converge maggiormente co quella del normale traceroute, ma restano significative differenze.
Per fare una ulteriore verifica ho implementino un meccanismo più simile al traceroute standard, cioè utilizzando UDP, la stessa porta sorgente (42833) ed una porta di destinazione casuale:

geotrac2.py:
#! /usr/bin/env python
import sys
import ip2country
from scapy.all import *


ip2c = ip2country.IP2Country(verbose=0)
ans,unans=sr(IP(dst=sys.argv[1], ttl=(1,25),id=RandShort())/UDP(sport=42833,dport=RandShort()),timeout=4)


for snd,rcv in ans:
a=ip2c.lookup(rcv.src)
print snd.ttl, rcv.src, “t”, a
if rcv.src == sys.argv[1]:
break


# python geotrac2.py 61.67.192.134 2>/dev/null |tail -n +3 |column -t
1  192.168.1.1    (None, None)
2  151.23.227.33  (’IT’, ‘Italy’)
4  151.6.225.65   (’IT’, ‘Italy’)
5  151.6.204.41   (’IT’, ‘Italy’)
6  151.6.6.106    (’IT’, ‘Italy’)
7  151.6.2.82     (’IT’, ‘Italy’)
8  80.81.192.64   (’DE’, ‘Germany’)
11 62.216.128.241 (’GB’, ‘United Kingdom’)
12 62.216.128.33  (’GB’, ‘United Kingdom’)
10 85.95.25.6     (’GB’, ‘United Kingdom’)
9  85.95.25.173   (’GB’, ‘United Kingdom’)
13 85.95.25.201   (’GB’, ‘United Kingdom’)
15 62.216.145.54  (’GB’, ‘United Kingdom’)
16 203.187.6.37   (’TW’, ‘Taiwan’)
17 203.187.9.204  (’TW’, ‘Taiwan’)
18 58.86.0.189    (’TW’, ‘Taiwan’)
14 85.95.25.206   (’GB’, ‘United Kingdom’)
19 58.86.0.22     (’TW’, ‘Taiwan’)
21 61.67.192.134  (’IN’, ‘India’)

Come supposto, la rotta ottenuta stavolta quasi coincide con quella ottenuta dal comando.
L’output evidenzia pure il fenomeno (piuttosto probabile nell’ UDP) dei pacchetti che arrivano fuori ordine.

Send post as PDF to PDF | PDF Creator | PDF Converter
:, ,

Comments are closed.

Cerchi qualcosa in particolare?

Usa il form qui sotto per cercare nel sito:

Blogroll!

Alcuni links...

Archives

Tutte le entries, in ordine cronologio...