parse_iftop.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/env python3
  2. import re
  3. import sys
  4. import os
  5. matching_ips = re.compile(r"(?P<ip>\d+\.\d+\.\d+\.\d+:\d+)")
  6. data_in = [
  7. "192.168.2.208:5000",
  8. "192.168.2.208:5002",
  9. "192.168.2.209:5000",
  10. "192.168.2.79"
  11. ]
  12. data_out = [
  13. "192.168.2.120:1935"
  14. ]
  15. prev = ''
  16. def dehumanize(value):
  17. value = value.strip()
  18. if value.endswith("KB"):
  19. value = float(value[:-2])*1024
  20. elif value.endswith("MB"):
  21. value = float(value[:-2])*1024*1024
  22. elif value.endswith("B"):
  23. value = float(value[:-1])
  24. return int(value)
  25. def parse_res(res):
  26. if res is None:
  27. return
  28. out = [ o for o in res.split(" ") if len(o) > 1 ]
  29. for d in data_in:
  30. if d in out[0]:
  31. out[0] = d
  32. break
  33. return("%s %s" % (out[0], dehumanize(out[4])))
  34. def parse_file(fname):
  35. data=open(fname,"r").readlines()
  36. out = []
  37. for line in data:
  38. match = matching_ips.search(line)
  39. if match is None:
  40. continue
  41. res = None
  42. line = line.rstrip()
  43. for d in data_in:
  44. if d in line:
  45. res = line
  46. for d in data_out:
  47. if d in line:
  48. res = matching_ips.sub(d, prev)
  49. prev = line
  50. ret = parse_res(res)
  51. if ret is not None:
  52. out.append(ret)
  53. for i in data_in:
  54. valid = False
  55. for o in out:
  56. if i in o:
  57. valid = True
  58. if not valid:
  59. out.append("%s 0" % i)
  60. for i in data_out:
  61. valid = False
  62. for o in out:
  63. if i in o:
  64. valid = True
  65. if not valid:
  66. out.append("%s 0" % i)
  67. return out
  68. if __name__ == '__main__':
  69. if len(sys.argv) != 2:
  70. print("Usage: %s file" % sys.argv[0])
  71. sys.exit(1)
  72. f = sys.argv[1]
  73. if not os.path.isfile(f):
  74. print("%s is not a valid file" % f)
  75. sys.exit(2)
  76. for o in parse_file(f):
  77. print(o)