#!/usr/bin/env python import argparse import os import sys from scapy.all import * import matplotlib.pyplot as plt def process_pcap(file_name): print('Opening {}...'.format(file_name)) x_axis_time = [0] y_axis_com_data = [0] # Get times packets = rdpcap(file_name) for pkt in packets: x_axis_time.append(pkt.time) time_start = x_axis_time[1] time_end = x_axis_time[-1] # format time axis for i in range(1, len(x_axis_time)): x_axis_time[i] = x_axis_time[i] - time_start # get payloads pcap_file = RawPcapReader(file_name) for (pkt_data, pkt_metadata,) in pcap_file: y_axis_com_data.append(y_axis_com_data[-1] + pkt_metadata.wirelen) 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)) bitrate = (y_axis_com_data[-1] / (time_end - time_start)) / 1000000 # MBit/s print('Bitrate: ' + str(math.floor(bitrate * 100)/100) + 'MBit/s\n') return (x_axis_time, y_axis_com_data) if __name__ == '__main__': parser = argparse.ArgumentParser(description='Plot two PCAP files') parser.add_argument('--client', metavar='', help='pcap file to parse', required=True) parser.add_argument('--server', metavar='', help='pcap file to parse', required=True) args = parser.parse_args() file_name1 = args.server file_name2 = args.client if not os.path.isfile(file_name1): print('"{}" does not exist'.format(file_name), file=sys.stderr) sys.exit(-1) if not os.path.isfile(file_name2): print('"{}" does not exist'.format(file_name), file=sys.stderr) sys.exit(-1) pcap1_x, pcap1_y = process_pcap(file_name1) pcap2_x, pcap2_y = process_pcap(file_name2) plt.plot(pcap1_x, pcap1_y) plt.plot(pcap2_x, pcap2_y, color='green') plt.xlabel('Time [ms]') plt.ylabel('Transfered Data [bit]') plt.legend(["Server (Laptop)", "Client (Pi)"]) plt.show() sys.exit(0)