flowchart TD
%% Define Styles
classDef client fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
classDef sensor fill:#fff9c4,stroke:#fbc02d,stroke-width:2px;
classDef action fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
classDef captive fill:#ffe0b2,stroke:#ef6c00,stroke-width:2px,stroke-dasharray: 5 5;
subgraph User_Action [User Action]
Start((User Opens Browser
Enters URL)) --> GenDNS["Client Sends DNS Query
e.g. query www.google.com"]
end
subgraph Sensor_Interception [Sensor Interception & Response]
GenDNS -- Packet passes through Sensor --> DetectDNS["Sensor Intercepts DNS Packet"]
DetectDNS --> DNSHijack["Sensor Performs DNS Hijacking
Replies A Record = Sensor IP"]
DNSHijack -- DNS Response --> ClientRecv["Client Receives Sensor IP"]
end
subgraph Connection_Handling [Connection Setup & Redirection]
ClientRecv --> EstConn["Client Connects to Sensor IP
Initiates TCP Connection"]
EstConn --> CheckPort{"Check Port Type"}
CheckPort -- Port 80 HTTP --> Redir80["Sensor Web Server
Replies HTTP 302 Redirect"]
CheckPort -- Port 443 HTTPS --> Handshake443["Poseidon Takes Over Port 443
SSL Handshake (Self-signed Cert)"]
end
subgraph Browser_Reaction [Browser Reaction & Captive Portal]
Handshake443 -- "Certificate Error (HSTS or HTTPS)" --> TriggerCP["Trigger Captive Portal Detection
(Connects to connectivitycheck...)"]
TriggerCP -- "Send HTTP Probe Packet" --> RedirCP["Sensor Intercepts HTTP
Replies 302 Redirect"]
end
subgraph Result [Final Result]
Redir80 --> ShowBlock["Display Block Page"]
RedirCP --> ShowBlock
end
class Start,GenDNS,ClientRecv,EstConn client
class DetectDNS,DNSHijack,Redir80,Handshake443,RedirCP sensor
class ShowBlock action
class TriggerCP captive