Commit Graph
19 Commits
Author SHA1 Message Date
Mxmilu666andClaude Opus 5.5 ae7135ab64 feat(tls): reassemble hello messages split across TLS records
A handshake message may span any number of records, and splitting the
ClientHello into tiny records hides the SNI from analyzers that expect it
in the first one. The tls analyzer read the first record header and then
cut the handshake body straight out of the stream, so fragmented hellos
either stalled until Limit() or failed to parse, and every SNI rule was
bypassed.

The record layer is now peeled off and the hello rebuilt from the record
bodies before parsing, for both ClientHello and ServerHello. The number of
records a hello spanned is exposed as tls.req_records / tls.resp_records,
kept outside req/resp so a non-nil req still means a fully parsed hello.
Fragmentation is published as soon as a second record shows up, since
1-byte records can stretch a hello past Limit() and it never completes.

docs: add TLS record fragmentation doc, correct the claim in the TCP
window evasion doc that tls is unaffected by splitting.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 17:31:57 +08:00
Mxmilu666andClaude Fable 5.1 cc6ad72706 feat(udp): add EasyTier analyzer for tcp:// and udp:// transports
Port of NoBrand-Cloud/OpenGFW-RS commit 1177ff7 to Go.

EasyTier's ciphers cover only the payload: the 16-byte PeerManagerHeader
stays in the clear, so peer ids, packet type and two redundant length
fields are readable even on an encrypted mesh. The plaintext handshake
also carries the network name, which lets a rule block one mesh and
leave the rest alone (easytier.network_name). A Syn answered by a Sack
echoing the same connection id and magic, or a handshake carrying the
0xd1e1a5e1 magic, settles a flow on its own; otherwise two consistent
frames are required. Hole-punch probes are reported but never set yes.

The wg://, quic:// and wss:// transports are left to the wireguard, quic
and tls analyzers. fet does not cover the tcp:// transport because it
classifies the plaintext handshake segment and is then done.

Rules must be written as `easytier != nil && ...`: the rule engine only
exposes analyzers that have published properties.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RjQ1CTBn8j65cUZ2JKsY7L
2026-09-12 17:05:39 +08:00
Mxmilu666 f6342c4bcf feat(tcp): add Minecraft analyzer for handshake detection
feat(tcp): implement FETAnalyzer with segment buffering
feat(tcp): enhance TCP engine with window scale detection
test(tcp): add tests for Minecraft and FET analyzers
docs: add documentation for Minecraft analyzer and TCP evasion
2026-07-27 01:09:41 +08:00
Toby 0735fa831d docs: move to website 2024-03-29 13:06:29 -07:00
Toby ff9c4ccf79 docs: remove trojan-killer ref 2024-03-20 18:40:49 -07:00
Toby b8e5079b8a fix: trojan analyzer heuristics 2024-03-20 18:37:43 -07:00
Toby 9d96acd8db feat: new heuristics for trojan analyzer 2024-03-20 18:07:26 -07:00
Toby ef352450a2 docs: add QUIC 2024-02-17 13:56:33 -08:00
8d94400855 Add WireGuard analyzer (#41)
* feat: add WireGuard analyzer

* chore(wg): reduce map creating for non wg packets

* chore: import format

* docs: add wg usage

---------

Co-authored-by: Toby <tobyxdd@gmail.com>
2024-01-30 18:05:51 -08:00
Toby 63510eda5e chore: minor doc fix 2024-01-27 13:40:29 -08:00
KujouRinka bd724f43c0 docs: update socks doc 2024-01-27 21:01:40 +08:00
KujouRinka 1ae0455fd5 docs: add sock4/4a doc 2024-01-27 14:09:21 +08:00
Toby bd92e716ce docs: improve grammar 2024-01-26 13:57:15 -08:00
Toby 4581d0babe Merge branch 'master' of https://github.com/KujouRinka/OpenGFW into feat-socks5 2024-01-26 13:37:41 -08:00
KujouRinka b0106c9941 docs: add socks5 doc 2024-01-26 14:45:26 +08:00
风扇滑翔翼 cbbca0353e Add ECH in doc 2024-01-26 12:54:20 +08:00
Toby d7d3437d3c docs: analyzers 2024-01-24 20:01:53 -08:00
Toby 99403d3150 docs: logo transparency 2024-01-21 15:33:18 -08:00
Toby 4f86f91a15 first 2024-01-19 16:45:01 -08:00