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()
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)
def enumerate(net): if isinstance(net, str): net = scapy.Net(net) return net