import ipaddress import json #Port Scanner, using a reduction method,re-reading the list the 4 #times. PATH = '/Users/Sara/Documents/Univ Classes/Investigacion/Programas/netflows.txt' myFile = open(PATH, 'r') ip = myFile.read() flow = json.loads(ip) #Son los limites de los Puertos que queremos verificar x = 20 y = 60000 #Variables inicializadas hashbrown = {} myNum = 0 #Esta funcion convierte la direccion de ip de un entero a un string usando la libreria de ipaddress. #Recibe dos parametros, la direccion de ip en entero y un numero k. Esta funcion devuelve un arreglo compuesto de cada #numero decimal entre los puntos del string. Dependiendo del numero k sera hasta que posision del arreglo se devolvera. def ipConversion(number, k): mystr = '' ipadd = (str(ipaddress.IPv4Address(number))).split(".") #Devuelve un arreglo for i in range(k+1): mystr = mystr + ipadd[i] + '.' return mystr #This function returns a hash with the ip address as the key and a list of the ports asociated with #that ipaddress def PrimerAnalisis(number): ps = {} for i in flow["flows"]: #for each element of the value of 'flows' posA = ipConversion(i["dip"], number) #change the ip address to string if (i['dport'] >= 1 and i['dport'] < x) or i['dport'] > y: #verifica que sean puertos (se me fue la palabra...) continue else: #agrega a un hash cada puerto con su destination ip if posA in ps: ps[posA].append(i['dport']) else: ps[posA] = [i['dport']] return ps deletevar = [] while myNum < 4: #recorrera 4 veces la lista de flows empezando con el primer numero decimal de los ip hasta el 4to hashBrown= PrimerAnalisis(myNum) #crea un hash for k, v in hashBrown.items(): #itera por cada ip address y sus puertos if len(v) >= 100: #print ("something suspicious...") continue else: #Si no tiene una cantidad considerable de puertos, sigue verificando #print ("nothing Suspicious but: (%s:%s)" %(k, v) ) if myNum == 3 : #Si se llega a la ultima verificacion se agregan a una lista para luego borrarlas del hash if k in deletevar: continue else: deletevar.append(k) else: continue myNum = myNum + 1 for i in deletevar: #borra todos los elementos que estan en la lista deletevar #del hash con todos los ip y sus puertos hashBrown.pop(i) counter = 0#Para contar total de elementos en el hash for k, v in hashBrown.items(): #imprime los destination ip address con los puertos counter = counter+1 #print ("{}:{}".format(k,v)) print (counter) #print( "Done checking:")