Skip to content

Instantly share code, notes, and snippets.

@wzieba
Last active September 25, 2024 12:51
Show Gist options
  • Save wzieba/11156cd3e654a9e93c995d8902729a85 to your computer and use it in GitHub Desktop.
Save wzieba/11156cd3e654a9e93c995d8902729a85 to your computer and use it in GitHub Desktop.
"""
Basic skeleton of a mitmproxy addon.
Run as follows: mitmproxy -s anatomy.py
"""
import json
import os
# File to store events
FILE_PATH = "events_data.json"
def find_duplicates(events):
seen = set()
duplicates = []
for event in events:
# Create a unique identifier for each event based on 'action:url' and 'data.ts'
if event.get('action') == 'heartbeat':
identifier = (event.get('inc'), event.get('data', {}).get('ts', ''))
if identifier in seen:
duplicates.append(event)
else:
seen.add(identifier)
return duplicates
class Counter:
def __init__(self):
self.num = 0
def request(self, flow):
# Decode the incoming data if it's in bytes format
data = flow.request.content
if isinstance(data, bytes):
data = data.decode('utf-8')
# Load new events from the incoming data
new_events = json.loads(data).get("events", [])
# Initialize a list for all events
all_events = []
# If the file exists, read the existing events
if os.path.exists(FILE_PATH):
with open(FILE_PATH, "r") as file:
all_events = json.load(file)
else:
# Create an empty file if it does not exist
with open(FILE_PATH, "w") as file:
json.dump([], file)
# Append new events to the existing events
all_events.extend(new_events)
# Check for duplicates
duplicates = find_duplicates(all_events)
# Log or handle duplicates as needed
if duplicates:
print("Found duplicates:")
for duplicate in duplicates:
print(duplicate)
else:
print("No duplicates found.")
# Save the combined events back to the file
with open(FILE_PATH, "w") as file:
json.dump(all_events, file, indent=4)
addons = [Counter()]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment