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

PS_delete.py 2.8KB

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