fix eth type and db
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 1m40s
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 1m40s
This commit is contained in:
@@ -10,6 +10,8 @@ from datetime import datetime, timezone
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
import src.shared_objects as shared_objects
|
||||
from src.Models.etherType import EtherTypeEnum, ethertype_from_int
|
||||
from src.Models.ip_protocol import protocol_from_number
|
||||
from src.utilities.packet_identity import build_packet_uid
|
||||
|
||||
logger = logging.getLogger("packet_tracker")
|
||||
@@ -84,22 +86,27 @@ class PacketTracker:
|
||||
continue
|
||||
if payload.get(key) is None:
|
||||
payload[key] = value
|
||||
|
||||
if payload.get("eth_type") is None and payload.get("eth_type_raw") is not None:
|
||||
try:
|
||||
payload["eth_type"] = ethertype_from_int(int(payload["eth_type_raw"]))
|
||||
except Exception:
|
||||
payload["eth_type"] = EtherTypeEnum.UNKNOWN
|
||||
|
||||
if payload.get("protocol") is None and payload.get("protocol_raw") is not None:
|
||||
try:
|
||||
payload["protocol"] = protocol_from_number(int(payload["protocol_raw"]))
|
||||
except Exception:
|
||||
payload["protocol"] = int(payload["protocol_raw"])
|
||||
event_type = event.get("event_type")
|
||||
iface = event.get("iface")
|
||||
if iface:
|
||||
observed_ifaces = payload.setdefault("observed_ifaces", [])
|
||||
if iface not in observed_ifaces:
|
||||
observed_ifaces.append(iface)
|
||||
|
||||
if event_type == "ingress":
|
||||
payload["ingress_if"] = iface
|
||||
payload["iface"] = iface
|
||||
payload["ingress_seen_at"] = _utcnow()
|
||||
payload["direction"] = "ingress"
|
||||
elif event_type == "egress":
|
||||
payload["egress_if"] = iface
|
||||
payload["egress_seen_at"] = _utcnow()
|
||||
payload["direction"] = "forwarded"
|
||||
payload["verdict"] = "accept"
|
||||
payload["verdict_reason"] = "egress-observed"
|
||||
payload["verdict_confidence"] = "high"
|
||||
@@ -109,13 +116,11 @@ class PacketTracker:
|
||||
payload["verdict_reason"] = event.get("reason") or "kfree_skb"
|
||||
payload["verdict_confidence"] = "high"
|
||||
payload["verdict_seen_at"] = _utcnow()
|
||||
payload["direction"] = "dropped"
|
||||
elif event_type == "reject":
|
||||
payload["verdict"] = "reject"
|
||||
payload["verdict_reason"] = event.get("reason") or "netfilter-reject"
|
||||
payload["verdict_confidence"] = event.get("verdict_confidence") or "medium"
|
||||
payload["verdict_seen_at"] = _utcnow()
|
||||
payload["direction"] = "rejected"
|
||||
|
||||
entry["last_observed_at"] = now_ts
|
||||
entry["dirty"] = True
|
||||
@@ -127,7 +132,6 @@ class PacketTracker:
|
||||
"packet_uid": packet_uid,
|
||||
"payload": {
|
||||
"packet_uid": packet_uid,
|
||||
"observed_ifaces": [],
|
||||
"verdict": "pending",
|
||||
"verdict_reason": None,
|
||||
"verdict_confidence": None,
|
||||
@@ -145,7 +149,7 @@ class PacketTracker:
|
||||
payload = entry["payload"]
|
||||
changed = False
|
||||
for key, value in pkt_info.items():
|
||||
if key == "observed_ifaces":
|
||||
if key == "iface":
|
||||
continue
|
||||
if value is None:
|
||||
continue
|
||||
@@ -157,16 +161,10 @@ class PacketTracker:
|
||||
changed = True
|
||||
|
||||
iface = pkt_info.get("iface")
|
||||
if iface:
|
||||
observed_ifaces = payload.setdefault("observed_ifaces", [])
|
||||
if iface not in observed_ifaces:
|
||||
observed_ifaces.append(iface)
|
||||
changed = True
|
||||
if not payload.get("ingress_if"):
|
||||
payload["ingress_if"] = iface
|
||||
payload["iface"] = iface
|
||||
payload["ingress_seen_at"] = _utcnow()
|
||||
changed = True
|
||||
if iface and not payload.get("ingress_if"):
|
||||
payload["ingress_if"] = iface
|
||||
payload["ingress_seen_at"] = _utcnow()
|
||||
changed = True
|
||||
|
||||
payload["last_observed_at"] = now_ts
|
||||
entry["last_observed_at"] = now_ts
|
||||
@@ -208,7 +206,6 @@ class PacketTracker:
|
||||
payload["verdict_reason"] = reject_reason
|
||||
payload["verdict_confidence"] = "medium"
|
||||
payload["verdict_seen_at"] = _utcnow()
|
||||
payload["direction"] = "rejected"
|
||||
match["last_observed_at"] = now_ts
|
||||
match["dirty"] = True
|
||||
match["finalized"] = True
|
||||
@@ -262,7 +259,6 @@ class PacketTracker:
|
||||
entry["payload"]["verdict_reason"] = "timeout"
|
||||
entry["payload"]["verdict_confidence"] = "low"
|
||||
entry["payload"]["verdict_seen_at"] = _utcnow()
|
||||
entry["payload"]["direction"] = "observed"
|
||||
entry["dirty"] = True
|
||||
|
||||
should_flush = entry["dirty"] and (
|
||||
@@ -288,8 +284,6 @@ class PacketTracker:
|
||||
|
||||
def _persist(self, entry: Dict[str, Any]) -> None:
|
||||
payload = dict(entry["payload"])
|
||||
if payload.get("observed_ifaces") == []:
|
||||
payload["observed_ifaces"] = None
|
||||
|
||||
web_loop = getattr(shared_objects, "web_loop", None)
|
||||
web_db = getattr(shared_objects, "db", None)
|
||||
|
||||
Reference in New Issue
Block a user