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

bruteforce_reduc_threehash.py 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #Itera a la vez el sip y el dip y guarda en un hash los puertos
  2. from silk import *
  3. startDate = "2009/04/20"
  4. endDate = "2009/04/22"
  5. #Para filtrar por puertos. Pero no queremos todavia
  6. #minPort = 20
  7. #maxPort = 5000
  8. def ipConversion(number, position):
  9. mystr = ''
  10. ipadd = number.split(".") #Devuelve un arreglo
  11. for i in range(position+1):
  12. if i ==position:
  13. mystr = mystr + ipadd[i]
  14. else:
  15. mystr = mystr + ipadd[i] + '.'
  16. return mystr #devuelve los numeros en notacion string
  17. def UltimoAnalisis(flowHash, num):
  18. dportHash={}
  19. flow_Counter=0
  20. for filename in FGlob(classname="all", type="all", start_date=startDate, end_date=endDate, site_config_file="/data/silk.conf", data_rootdir="/data"):
  21. for rec in silkfile_open(filename, READ):#reading the flow file
  22. if (':' in str(rec.sip)) or (num != 0 and ipConversion(str(rec.sip), num-1) not in flowHash): #Si en el paso anterior se vio que no
  23. #tiene el length de puertos requerido, se ignora
  24. continue
  25. else: #agrega a un hash cada puerto con un counter de sus destination ips
  26. dip = ipConversion(str(rec.dip), num)
  27. sip = ipConversion(str(rec.sip), num)
  28. dport= rec.dport
  29. if sip in dportHash:
  30. if dip in dportHash[sip]:
  31. if dport in dportHash[sip][dip]:
  32. dportHash[sip][dip][dport] += 1
  33. else:
  34. dportHash[sip][dip][dport] = 1
  35. else:
  36. dportHash[sip][dip] = {dport : 1}
  37. else:
  38. dportHash[sip] = { dip: {dport: 1} }
  39. #print flow_Counter
  40. return dportHash
  41. #main
  42. myNum = 0
  43. otherHash = {}
  44. while myNum <4: #Se itera las cuatro veces de acuerdo con la notacion de ipv4
  45. flowHash= UltimoAnalisis(otherHash, myNum)
  46. otherHash = {} #Se borra el hash para agregar elementos nuevos con la nueva etapa de la busqueda
  47. for sips in flowHash: #se itera por todos los dip y sus counters o puertos
  48. for dips, dports in flowHash[sips].items():
  49. if len(dports) >= 100: #si la cantidad de puertos es mayor o igual a 100, nos interesan
  50. #y por lo tanto se guardan en un hash
  51. if sips in otherHash:
  52. otherHash[sips][dips] = dports
  53. else:
  54. otherHash[sips] = {dips: dports}
  55. myNum += 1
  56. print (otherHash)
  57. for dips, dports in otherHash.items():
  58. counter +=1 #para contar los elementos del hash
  59. print (counter)