Bladeren bron

Adds format script for upd transmissions.

master
Lukas Prause 3 jaren geleden
bovenliggende
commit
66d811a28e
1 gewijzigde bestanden met toevoegingen van 117 en 0 verwijderingen
  1. +117
    -0
      format_udp_pcap_to_csv.py

+ 117
- 0
format_udp_pcap_to_csv.py Bestand weergeven

@@ -0,0 +1,117 @@
#!/usr/bin/env python3
import os
from datetime import datetime
import subprocess
from argparse import ArgumentParser
from io import StringIO

import pandas as pd


def format_udp_pcap_to_csv(folder, sender_pcap_name, receiver_pcap_name, output=None):
tmp = list()
for pcap in [sender_pcap_name, receiver_pcap_name]:
tshark_command = [
"tshark",
"-r",
"{}{}".format(folder, pcap),
"-O",
"udp",
"-T",
"fields",
"-e",
"frame.time_epoch",
"-e",
"data.len",
"-e",
"data",
"-E",
"header=y",
"-E",
"separator=,",
]
tshark_out = subprocess.check_output(tshark_command)
tmp.append(
pd.read_csv(
StringIO(tshark_out.decode("utf-8")),
converters=dict(data=lambda x: hash(x)),
)
)
sender_df = tmp[0].rename(
columns={"frame.time_epoch": "departure_time", "data": "data_hash", "data.len": "data.len_send"}
)
receiver_df = tmp[1].rename(
columns={"frame.time_epoch": "arrival_time", "data": "data_hash", "data.len": "data.len_received"}
)

transmission_df = sender_df.merge(receiver_df, on="data_hash")
transmission_df["delay"] = transmission_df.arrival_time - transmission_df.departure_time

direction = "uplink"
if "server" in sender_pcap_name and "client" in receiver_pcap_name:
direction = "downlink"

filename = sender_pcap_name.replace("_sender_", "_{}_".format(direction))
filename = filename.replace("client_", "")
filename = filename.replace("server_", "")
filename = filename.replace(".pcap", ".csv")

transmission_df.to_csv("{}{}".format(folder if output is None else output, filename))


if __name__ == "__main__":
start_time = datetime.now()
parser = ArgumentParser()

parser.add_argument("-f", "--folder", required=True, help="Folder with pcap files.")
parser.add_argument(
"-o", "--output", required=False, help="Folder for created csv files."
)
parser.add_argument(
"--name_contains", required=False, default=".pcap", help="Substring in filename."
)
parser.add_argument(
"--use_subdirs", required=False, default=False, help="Use pcaps in subdirs."
)

args = parser.parse_args()

sender_pcap_list = list()
counter = 1

if args.use_subdirs:
sub_dirs = os.listdir(args.folder)
for d in sub_dirs:
filenames = os.listdir("{}{}".format(args.folder, d))
for filename in filenames:
if filename.endswith(".pcap") and args.name_contains in filename and "sender" in filename:
sender_pcap_list.append("{}/{}".format(d, filename))
else:
filenames = os.listdir(args.folder)
for filename in filenames:
if filename.endswith(".pcap") and args.name_contains in filename and "sender" in filename:
sender_pcap_list.append(filename)

for sender_pcap in sender_pcap_list:
receiver_pcap = sender_pcap.replace("sender", "receiver")
if "client" in receiver_pcap:
receiver_pcap = receiver_pcap.replace("client", "server")
else:
receiver_pcap = receiver_pcap.replace("server", "client")

print("\rProcessing file pair no: {} out of {} ({}%) ".format(
counter,
len(sender_pcap_list),
round((counter / len(sender_pcap_list)) * 100, 2)
), end="")

format_udp_pcap_to_csv(
args.folder,
sender_pcap,
receiver_pcap,
output=args.folder if args.output is None else args.output
)
counter += 1

print("\nWrote CSV files to: {}".format(args.folder if args.output is None else args.output))
print("Runtime: {}".format(datetime.now() - start_time))

Laden…
Annuleren
Opslaan