84 lines
2.6 KiB
Python
Executable File
84 lines
2.6 KiB
Python
Executable File
#! demovenv/bin/python3
|
|
"""
|
|
This demo script shows how the "parse" function of "analyzeTcpDump.py" can be
|
|
used to easily visualize data from a PCAP file created by the tcpdump tool /
|
|
wireshark. A suitable virtual environment can be created with the "makedemovenv"
|
|
script.
|
|
|
|
Stefan Mathis, January 2025
|
|
"""
|
|
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.dates as mdates
|
|
from datetime import datetime, timedelta
|
|
|
|
from analyzeTcpDump import parse
|
|
|
|
if __name__ == "__main__":
|
|
|
|
data = parse("demo.pcap")
|
|
|
|
plt.figure(figsize=(12, 6))
|
|
|
|
# Plot the position of axis 5 over time
|
|
|
|
# Actual position
|
|
position_valid = []
|
|
dates_valid = []
|
|
position_all = []
|
|
dates_all = []
|
|
|
|
for (timestamp, item) in data["172.28.101.24"]["Q0510"].items():
|
|
date = datetime.fromtimestamp(timestamp)
|
|
value = item["response"]["value"]
|
|
|
|
dates_all.append(date)
|
|
position_all.append(value)
|
|
|
|
if item["response"]["valid"]:
|
|
dates_valid.append(date)
|
|
position_valid.append(value)
|
|
else:
|
|
command = item["command"]["ascii"]
|
|
response = item["response"]["ascii"]
|
|
|
|
# Replace non-renderable characters
|
|
command = command.replace("\0", "\\x00")
|
|
command = command.replace("\r", "\\x0d")
|
|
command = command.replace("\x12", "\\x12")
|
|
response = response.replace("\r", "\\x0d")
|
|
response = response.replace("\06", "\\x06")
|
|
|
|
# Shift the text a bit to the right
|
|
plt.text(date, value, f"Command: {command}\nResponse: {response}", horizontalalignment="right", verticalalignment="top")
|
|
|
|
# Target position
|
|
position_target = [position_valid[0]]
|
|
dates_target = [dates_valid[0]]
|
|
|
|
for (timestamp, item) in data["172.28.101.24"]["Q0501="].items():
|
|
date = datetime.fromtimestamp(timestamp)
|
|
value = item["command"]["value"]
|
|
|
|
dates_target.append(date)
|
|
position_target.append(position_target[-1])
|
|
|
|
dates_target.append(date)
|
|
position_target.append(value)
|
|
|
|
dates_target.append(dates_valid[-1])
|
|
position_target.append(position_target[-1])
|
|
|
|
plt.plot(dates_target, position_target, "k--", label="Target position")
|
|
plt.plot(dates_all, position_all, "r-", label="All responses")
|
|
plt.plot(dates_valid, position_valid, "b-", label="Valid responses")
|
|
plt.xlabel("Time (ISO 8601)")
|
|
plt.ylabel("Axis position in degree")
|
|
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%dT%H:%M:%S"))
|
|
plt.xticks(rotation=45)
|
|
plt.grid(True)
|
|
plt.legend(loc="lower left")
|
|
plt.title("Position of axis 5")
|
|
plt.tight_layout()
|
|
plt.show()
|