Example #1
0
 def __init__(self, dst):
     self.burstSize = 30
     self.retryNumber = 3
     self.timeout = 0.5#segs?
     self.maxTtl = 30
     self.destination = sp.Net(dst)
     self.echoRequests = sp.IP(dst=self.destination, ttl=(1,self.maxTtl)) / sp.ICMP()
     self.traced = []
     self.trace()
Example #2
0
def main(destino, maximo_ttl, timeout_por_ttl, mediciones_por_ttl,
         reintentos_por_ttl):
    #formateamos la dirección de destino
    destino = sp.Net(destino)
    #generamos un conjunto de paquetes ICMP, uno por cada ttl de 1 a maximo_ttl
    paquetes = sp.IP(dst=destino, ttl=(1, maximo_ttl)) / sp.ICMP()

    mediciones = []

    #para cada paquete (uno por cada ttl)
    for paquete in paquetes:
        paquete.getlayer(sp.ICMP).id = random.randint(0, 65535)
        #flag que indica si llegó alguna respuesta
        hubo_respuesta = False
        #flag para indicar si llegamos a destino
        llegamos_a_destino = False
        #array para almacenar las respuestas obtenidas
        respuestas = []
        for medicion in range(mediciones_por_ttl):
            for reintento in range(reintentos_por_ttl):
                #medimos el tiempo inicial
                t_inicial = time.perf_counter()
                #enviamos el paquete y obtenemos la respuesta
                respuesta = sp.sr1(paquete, verbose=0, timeout=timeout_por_ttl)
                #calculamos el rtt (tiempo final - tiempo inicial)
                rtt = time.perf_counter() - t_inicial

                hubo_respuesta = respuesta is not None

                if hubo_respuesta:
                    break
            #si obtuvimos una respuesta, la agregamos al conjunto de respuestas y chequeamos si el que respondió es nuestro destino
            if hubo_respuesta:
                ip_respuesta = respuesta.src
                respuestas.append((ip_respuesta, rtt))
                llegamos_a_destino = destino == ip_respuesta

        ip_salto, rtt_promedio = promediarRespuestas(respuestas)

        if ip_salto is None:
            print(("TTL: " + str(paquete.ttl) + ", Hop: *, RTT: *"))
        else:
            print(("TTL: " + str(paquete.ttl) + ", Hop: " + str(ip_salto) +
                   ", RTT: " + str(int(rtt_promedio * 1000)) + "ms") + " " +
                  str(obtenerContinenteIP(ip_salto)))
            mediciones.append((paquete.ttl, ip_salto, rtt_promedio))

        if llegamos_a_destino:
            print("Destino alcanzado!")
            break

    outliers = detectarOutliers(mediciones)
Example #3
0
 def enumerate(net):
     if isinstance(net, str):
         net = scapy.Net(net)
     return net