Skip to main content

eStreamer

Cisco's event streaming protocol, used by Firepower Management Center to export security event data—intrusion alerts, connection logs, file and malware events—to external systems in real time.

Connection Model

DataStream is the eStreamer client: the collector dials out to the Management Center rather than listening for it. The default port is 8302, and a wildcard listen address is rejected.

The connection is mutually authenticated with TLS, and the client certificate is supplied as a PKCS#12 bundle.

The server chain is verified only when a CA is pinned. With no tls.ca_name configured the session is not verified at all — setting insecure_skip_verify is not required to reach that state, it is simply the default. Hostname and SAN checking is skipped in every case by design, since the Management Center is normally reached by address.

Once connected, the exchange proceeds as follows:

  1. The client sends an event stream request carrying a checkpoint timestamp and a flag word selecting the event classes and extended fields it wants.
  2. If the server answers with a streaming information message, the client replies with a streaming request negotiating the extended service and version pairs it supports.
  3. Event data flows from the server. After every message received, the client writes a null message as a keepalive. The server does the same.
  4. On reconnect, the client resumes from its checkpoint, so an interrupted stream replays rather than skips. There is one checkpoint per device, not one per event family: whichever record decoded last sets it for all four.

The read timeout is five minutes. A read failure does not stop the collector — it closes the socket, counts the failure, and reconnects a second later; a successful reconnect resets the count to zero. The collector gives up only after eleven accumulated failures whose reconnects also failed.

Message Framing

Every message opens with an 8-byte header.

FieldWidthDescription
HeaderVersion2 bytesAlways 1
MessageType2 bytesSelects the message body, from the table below
MessageLength4 bytesLength of the body that follows
Message TypeValuePurpose
NULL_MESSAGE0Keepalive
ERROR_MESSAGE1Error code and text. The body is read in full rather than skipped, because skipping desynchronizes the stream
EVENT_STREAM_REQUEST2Opens the stream
EVENT_DATA4Carries event records
HOST_DATA_REQUEST5Requests host profile data
SINGLE_HOST_DATA6One host profile
MULTIPLE_HOST_DATA7Several host profiles
STREAMING_REQUEST2049Negotiates extended services
STREAMING_INFORMATION2051The server's extended service offer
MESSAGE_BUNDLE4002Wraps several sub-messages, each with its own 8-byte header

Record Framing

Event data messages carry records, each with its own header. Two forms exist:

FormSizeContents
Standard8 bytesRecord type, record length
Archive16 bytesRecord type, record length, archive timestamp, checksum

DataStream requests the archive form and its decoders require it. An event record arriving in the standard form is dropped rather than decoded.

Record TypeValueDecoded
PACKETDATA_RECORD2No. Declared but never dispatched
CONNECTIONSTATISTICS_RECORD71Yes
MALWAREEVENT_RECORD125Yes
INTRUSIONEVENT_RECORD400Yes
FILEEVENT_RECORD500Yes
FILEEVENT_RECORDV2502Yes

A further 21 record types carry metadata rather than events—rule messages, classifications, device identifiers, file policies, interface names and similar. These populate lookup caches that resolve the numeric identifiers on event records into names.

Event Fields

Each event family is decoded from a versioned block layout and then reduced to a common set of fields before emission. The reduction is substantial: a connection record decodes 123 fields and emits 17. The tables below give what reaches a pipeline.

The families do not share a vocabulary. Connection events describe endpoints as initiator and responder, intrusion events as source and destination, and file and malware events as sending and receiving.

Connection

FieldDescription
DateEvent timestamp
InitiatorIPAddress that opened the connection
ResponderIPAddress that received it
InitiatorPortInitiator port number
ResponderPortResponder port number
ApplicationProtocolDetected application protocol
ClientDetected client application
ClientVersionClient application version
AccessControlPolicyPolicy that evaluated the connection
AccessControlRuleRule that matched
RuleActionAction the rule took
RuleReasonWhy the action was taken
IngressInterfaceInterface the traffic entered on
EgressInterfaceInterface it left on
FirstPacketTimestampTime of the first packet
LastPacketTimestampTime of the last packet

Intrusion

FieldDescription
DateEvent timestamp
SourceIPSource address
DestinationIPDestination address
SourcePortSource port number
DestinationPortDestination port number
MessageRule message, resolved from the rule identifier
ClassificationRule classification
PriorityRule priority
ImpactAssessed impact on the target
BlockedWhether the traffic was blocked
AccessControlPolicyPolicy in force
AccessControlRuleRule that matched
ApplicationProtocolDetected application protocol
ClientDetected client application
IngressInterfaceInterface the traffic entered on
EgressInterfaceInterface it left on

File

FieldDescription
DateEvent timestamp
SendingIPAddress that sent the file
ReceivingIPAddress that received it
FileNameFile name
FileSHAHashSHA hash of the file
FileSizeFile size in bytes
FileTypeDetected file type
FileURIURI the file was retrieved from
FilePolicyFile policy in force
ThreatScoreAssessed threat score
ApplicationProtocolDetected application protocol
ActionAction taken on the file
ClientDetected client application
SendingPortPort the file was sent from
ReceivingPortPort it was received on

Malware

FieldDescription
DateEvent timestamp
EventTypeMalware event type
SendingIPAddress that sent the file
ReceivingIPAddress that received it
FileNameFile name
FileSHAHashSHA hash of the file
FileSizeFile size in bytes
FileTypeDetected file type
DetectionNameName of the detected malware
DetectorComponent that made the detection
ThreatScoreAssessed threat score
ApplicationProtocolDetected application protocol
ActionAction taken on the file
ClientDetected client application
FileURIURI the file was retrieved from
SendingPortPort the file was sent from
ReceivingPortPort it was received on

Event Selection

The four families are requested independently and all four are enabled by default. Each corresponds to an input identifier in the device configuration: 102 connection, 103 file, 104 malware, 106 intrusion.