Source Code for network and port scanner, TRW algorithm, and reduction method implementations.

practiceSet.py 3.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import ipaddress
  2. import netflows
  3. #Port Scanner, using a reduction method, and deleting the addresses as
  4. #the program sees they are of no use.
  5. flow = netflows.flowprinters() #Agrega el diccionario de flows a una variable
  6. #Son los limites de los Puertos que queremos verificar
  7. x = 20
  8. y = 60000
  9. #Variables inicializadas
  10. hashbrown = {}
  11. myNum = 0
  12. #Esta funcion convierte la direccion de ip de un entero a un string usando la libreria de ipaddress.
  13. #Recibe dos parametros, la direccion de ip en entero y un numero k. Esta funcion devuelve un arreglo compuesto de cada
  14. #numero decimal entre los puntos del string. Dependiendo del numero k sera hasta que posision del arreglo se devolvera.
  15. def ipConversion(number, k):
  16. mystr = ''
  17. ipadd = (str(ipaddress.IPv4Address(number))).split(".") #Devuelve un arreglo
  18. for i in range(k+1):
  19. mystr = mystr + ipadd[i] + '.'
  20. return mystr
  21. #This function returns a hash with the ip address as the key and a list of the ports asociated with
  22. #that ipaddress
  23. def PrimerAnalisis(number):
  24. ps = {}
  25. for i in flow["flows"]: #for each element of the value of 'flows'
  26. posA = ipConversion(i["dip"], number) #change the ip address to string
  27. if (i['dport'] >= 1 and i['dport'] < x) or i['dport'] > y: #verifica que sean puertos (se me fue la palabra...)
  28. continue
  29. else: #agrega a un hash cada puerto con su destination ip
  30. if posA in ps:
  31. ps[posA].append(i['dport'])
  32. else:
  33. ps[posA] = [i['dport']]
  34. return ps
  35. deletevar = []
  36. while myNum < 4: #recorrera 4 veces la lista de flows empezando con el primer numero decimal de los ip hasta el 4to
  37. hashBrown= PrimerAnalisis(myNum) #crea un hash
  38. for k, v in hashBrown.items(): #itera por cada ip address y sus puertos
  39. if len(v) >= 100:
  40. #print ("something suspicious...")
  41. continue
  42. else: #Si no tiene una cantidad considerable de puertos, la borra de la lista sigue verificando
  43. #print ("nothing Suspicious but: (%s:%s)" %(k, v) )
  44. for il in flow['flows']: #vuelve a iterar por la lista de flows para borrar de la lista la que
  45. # no tiene suficiente puertos
  46. newi = ipConversion(il["dip"], myNum)
  47. if k == newi:
  48. #index = flow['flows'].index(newi)
  49. flow['flows'].remove(il)
  50. if myNum == 3 : #Si se llega a la ultima verificacion se agregan a una lista para luego borrarlas del hash
  51. if k in deletevar:
  52. continue
  53. else:
  54. deletevar.append(k)
  55. else:
  56. continue
  57. myNum = myNum + 1
  58. or i in deletevar: #borra todos los elementos que estan en la lista deletevar
  59. #del hash con todos los ip y sus puertos
  60. hashBrown.pop(i)
  61. counter = 0 #Para contar total de elementos en el hash
  62. for k, v in hashBrown.items(): #imprime los destination ip address con los puertos
  63. counter = counter+1
  64. print ("{}:{}".format(k,v))
  65. print (counter)
  66. print( "Done checking:")