12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import ipaddress
- import netflows
-
-
- #Port Scanner, using a reduction method, and deleting the addresses as
- #the program sees they are of no use.
-
- flow = netflows.flowprinters() #Agrega el diccionario de flows a una variable
-
-
-
-
- #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, la borra de la lista sigue verificando
- #print ("nothing Suspicious but: (%s:%s)" %(k, v) )
-
- for il in flow['flows']: #vuelve a iterar por la lista de flows para borrar de la lista la que
- # no tiene suficiente puertos
- newi = ipConversion(il["dip"], myNum)
- if k == newi:
- #index = flow['flows'].index(newi)
- flow['flows'].remove(il)
- 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
-
-
- or 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:")
|