Technical OSINT Fundamentals

Code Examples: Correlate Evidence with Confidence

Connecting to LMS... Progress: in progress

Code Examples

Build Nodes and Edges from Evidence Records

import json


nodes: set[tuple[str, str]] = set()
edges: list[dict[str, str]] = []

with open("evidence.jsonl", encoding="utf-8") as source:
    for line in source:
        record = json.loads(line)
        observable = record["observable"]
        source_name = record["source"]
        nodes.add(("observable", observable))
        nodes.add(("source", source_name))
        edges.append({
            "from": observable,
            "to": source_name,
            "relationship": "observed in",
            "observed_at": record["observed_at"],
            "confidence": record["confidence"],
        })

print(json.dumps({"nodes": sorted(nodes), "edges": edges}, indent=2))

Sort Relationships into a Timeline

import csv
from datetime import datetime


with open("relationships.csv", encoding="utf-8") as source:
    rows = list(csv.DictReader(source))

rows.sort(key=lambda row: datetime.fromisoformat(row["observed_at"].replace("Z", "+00:00")))

for row in rows:
    print(
        row["observed_at"],
        row["subject"],
        row["relationship"],
        row["object"],
        row["source"],
        sep="\t",
    )