Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

63 lines
2.1KB

  1. #!/usr/bin/env python
  2. import argparse
  3. import os
  4. import sys
  5. from scapy.all import *
  6. import matplotlib.pyplot as plt
  7. def process_pcap(file_name):
  8. print('Opening {}...'.format(file_name))
  9. x_axis_time = [0]
  10. y_axis_com_data = [0]
  11. # Get times
  12. packets = rdpcap(file_name)
  13. for pkt in packets:
  14. x_axis_time.append(pkt.time)
  15. time_start = x_axis_time[1]
  16. time_end = x_axis_time[-1]
  17. # format time axis
  18. for i in range(1, len(x_axis_time)):
  19. x_axis_time[i] = x_axis_time[i] - time_start
  20. # get payloads
  21. pcap_file = RawPcapReader(file_name)
  22. for (pkt_data, pkt_metadata,) in pcap_file:
  23. y_axis_com_data.append(y_axis_com_data[-1] + pkt_metadata.wirelen)
  24. print('{} contains {} packets.\nStart time: {}\tEnd time: {}\t Transfered: {}kB\tDuration: {}'.format(file_name, len(packets), time_start, time_end, (y_axis_com_data[-1] / 8) / 1000, time_end - time_start))
  25. bitrate = (y_axis_com_data[-1] / (time_end - time_start)) / 1000000 # MBit/s
  26. print('Bitrate: ' + str(math.floor(bitrate * 100)/100) + 'MBit/s\n')
  27. return (x_axis_time, y_axis_com_data)
  28. if __name__ == '__main__':
  29. parser = argparse.ArgumentParser(description='Plot two PCAP files')
  30. parser.add_argument('--client', metavar='<pcap file name>', help='pcap file to parse', required=True)
  31. parser.add_argument('--server', metavar='<pcap file name>', help='pcap file to parse', required=True)
  32. args = parser.parse_args()
  33. file_name1 = args.server
  34. file_name2 = args.client
  35. if not os.path.isfile(file_name1):
  36. print('"{}" does not exist'.format(file_name), file=sys.stderr)
  37. sys.exit(-1)
  38. if not os.path.isfile(file_name2):
  39. print('"{}" does not exist'.format(file_name), file=sys.stderr)
  40. sys.exit(-1)
  41. pcap1_x, pcap1_y = process_pcap(file_name1)
  42. pcap2_x, pcap2_y = process_pcap(file_name2)
  43. plt.plot(pcap1_x, pcap1_y)
  44. plt.plot(pcap2_x, pcap2_y, color='green')
  45. plt.xlabel('Time [ms]')
  46. plt.ylabel('Transfered Data [bit]')
  47. plt.legend(["Server (Laptop)", "Client (Pi)"])
  48. plt.show()
  49. sys.exit(0)