123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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:")
|