+2026-01-21: 3.10.2.0
+
+* appid: configurable midstream service discovery
+* appid: prefer QUIC client appid over SSL
+* appid: prevent out-of-bounds read in bootp option parsing
+* appid: prevent out-of-bounds read in sslv2 server-hello detection
+* control: refactor connection ownership model and improve thread safety
+* extractor: avoid reporting default values for missing SSL fields
+* file_api: coverity fix
+* flow: refactor dump_flows command to dump flow state in binary format
+* mime: fix compile issues
+* react: block flow when packets are not reset candidates
+* show_flows: implement utility program to convert dump_flows binary files to text Flow state data for each flow
+* smtp: handle split CRLF in multi-line response parsing
+* ssl: ssl client hello event is published with empty hostname
+
2026-01-11: 3.10.1.0
* alert_fast: ensure call_once definition doesn't collide in std vs glibc, thanks to krag on GitHub for suggesting this fix
The Snort Team
Revision History
-Revision 3.10.1.0 2026-01-11 17:51:32 EST TST
+Revision 3.10.2.0 2026-01-21 15:52:22 EST TST
---------------------------------------------------------------------
(sum)
* ips_actions.react: number of packets that matched an IPS react
rule (sum)
+ * ips_actions.non_supported_react: number of packets that matched
+ an IPS react rule but could not be processed because the protocol
+ is not supported (sum)
* ips_actions.reject: number of packets that matched an IPS reject
rule (sum)
* ips_actions.rewrite: number of packets that matched an IPS
Commands:
- * stream.dump_flows(): dump the flow table
- * stream.dump_flows_summary(): dump the flow summaries
+ * stream.dump_flows(): dump the flow table in text format
+ * stream.dump_flows_binary(): dump the flow table in binary format
+ * stream.dump_flows_summary(): dump flow table summary
Rules:
file_id rule (sum)
* ips_actions.log: number of packets that matched an IPS log rule
(sum)
+ * ips_actions.non_supported_react: number of packets that matched
+ an IPS react rule but could not be processed because the protocol
+ is not supported (sum)
* ips_actions.pass: number of packets that matched an IPS pass rule
(sum)
* ips_actions.react: number of packets that matched an IPS react
* snort.detach(): detach from control shell (without shutting down)
* snort.quit(): shutdown and dump-stats
* snort.help(): this output
- * stream.dump_flows(): dump the flow table
- * stream.dump_flows_summary(): dump the flow summaries
+ * stream.dump_flows(): dump the flow table in text format
+ * stream.dump_flows_binary(): dump the flow table in binary format
+ * stream.dump_flows_summary(): dump flow table summary
* trace.set(modules, constraints, ntuple, timestamp): set modules
traces, constraints, ntuple and timestamp options
* trace.clear(): clear modules traces and constraints