Commit Graph
148 Commits
Author SHA1 Message Date
Mxmilu666 c879e10ac1 feat(tls): add support for RDP negotiation before TLS handshake 2026-09-30 16:54:53 +08:00
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
Mxmilu666 8f8cc1d4d9 feat(tcp, udp): implement stream state release after verdict and adjust flush interval logic 2026-09-12 17:20:24 +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
TobyandGitHub 278d731b6f Merge pull request #147 from kpetku/feat-expose-netlink-config-options
Quality check / Tests (push) Successful in 9m55s
Quality check / Static analysis (push) Successful in 19m42s
feat: netlink queueNum/table config options
2024-10-27 18:55:30 -07:00
Haruue 0e97c9f086 feat: connmark accept/drop config options 2024-10-28 10:17:46 +09:00
Haruue 5f4df7e806 chore: rm nfqueueNum parameter in setupNft() 2024-10-27 15:44:13 +09:00
Haruue d8d7c5b477 chore: allow set nfqueue num to 0 2024-10-27 15:44:04 +09:00
Keith Petkus d3f1785ac9 feat: netlink queueNum/table config options 2024-08-08 13:24:49 -04:00
TobyandGitHub 1de95ed53e Merge pull request #136 from apernet/wip-pcapgo
Add pcap back
2024-05-08 17:40:55 -07:00
Haruue 1934c065ec feat(pcap): impl realtime wait() with time offset 2024-05-08 19:45:10 +08:00
Haruue 301f9af3d4 Revert "ci: install pcap for build 2"
This reverts commit 0daaa32fc6.
2024-05-08 19:26:19 +08:00
Haruue cb0427bfbb Revert "ci: install pcap for build"
This reverts commit 5e15fd6dd9.
2024-05-08 19:26:15 +08:00
Haruue 7456e5907e refactor(pcap): switch to pcapgo 2024-05-08 19:22:17 +08:00
Haruue 8cab86b924 Reapply "Merge pull request #132 from eddc005/feat-pcap"
This reverts commit 2ac8783eb6.
2024-05-08 19:13:49 +08:00
TobyandGitHub 3ec5456e86 Merge pull request #135 from apernet/revert-pcap
Revert pcap
2024-05-07 23:46:46 -07:00
Toby b51ea5fa07 Revert "Merge pull request #134 from apernet/ci-cgo"
This reverts commit 5014523ae0, reversing
changes made to c453020349.
2024-05-07 23:44:00 -07:00
Toby 2ac8783eb6 Revert "Merge pull request #132 from eddc005/feat-pcap"
This reverts commit c453020349, reversing
changes made to 5723490a6c.
2024-05-07 23:43:54 -07:00
TobyandGitHub 5014523ae0 Merge pull request #134 from apernet/ci-cgo
ci: enable cgo
2024-05-07 23:40:17 -07:00
Toby dabcc9566c ci: enable cgo 2024-05-07 23:38:28 -07:00
TobyandGitHub c453020349 Merge pull request #132 from eddc005/feat-pcap
feat: add support for pcap replay
2024-05-07 23:18:03 -07:00
Toby 0daaa32fc6 ci: install pcap for build 2 2024-05-07 23:13:58 -07:00
Toby 5e15fd6dd9 ci: install pcap for build 2024-05-07 23:12:24 -07:00
Toby 76c0f47832 chore: do not default replay.realtime to true 2024-05-07 23:05:06 -07:00
Toby 70fee14103 chore: format 2024-05-07 22:50:58 -07:00
eddc005 abd7725fed close pcap properly and implement ProtectedDialContext 2024-05-07 21:50:06 +01:00
eddc005 f01b79e625 rebase and remove replayDelay 2024-05-06 23:04:54 +01:00
eddc005 94387450cf feat: add support for pcap replay 2024-05-06 22:53:11 +01:00
TobyandGitHub 5723490a6c Merge pull request #133 from apernet/fix-timestamp
fix: provide correct timestamp for TCP reassembler
2024-05-06 14:38:35 -07:00
Toby d7506264ad fix: provide correct timestamp for TCP reassembler 2024-05-06 14:35:31 -07:00
TobyandGitHub 245ac46b65 Merge pull request #130 from apernet/fix-geo-leak
fix: do not reload geoip/geosite when reloading ruleset to prevent leaking references to streams
2024-04-10 22:57:18 -07:00
Toby 107e29ee20 fix: do not reload geoip/geosite when reloading ruleset to prevent leaking references to streams 2024-04-10 21:30:37 -07:00
TobyandGitHub 5f447d4e31 Merge pull request #124 from apernet/wip-tcp-flush
feat: TCP timeout flush
2024-04-09 11:07:20 -07:00
Toby 347667a2bd feat: TCP timeout flush 2024-04-08 11:54:35 -07:00
TobyandGitHub 393c29bd2d Merge pull request #123 from apernet/wip-lookup
feat: dns lookup function
2024-04-07 17:49:33 -07:00
Toby 9c0893c512 feat: added protected dial support, removed multi-IO support for simplicity 2024-04-06 14:42:45 -07:00
Toby ae34b4856a feat: dns lookup function 2024-04-03 20:02:57 -07:00
TobyandGitHub d7737e9211 Merge pull request #119 from apernet/update-readme
docs: update readme feature list
2024-04-01 21:50:07 -07:00
Toby dd9ecc3dd7 docs: update readme feature list 2024-04-01 21:49:06 -07:00
TobyandGitHub 980d59ed2e Merge pull request #118 from apernet/ci-release
ci: rework release workflow
2024-04-01 20:55:22 -07:00
Toby af14adf313 ci: rework release workflow 2024-04-01 20:54:24 -07:00
TobyandGitHub ab28fc238d Merge pull request #114 from KujouRinka/feat-openvpn
feat: add openVPN analyzer
2024-04-01 20:47:30 -07:00
Toby e535769086 fix: make sure rx_pkt_cnt & tx_pkt_cnt both always exist 2024-03-30 14:30:20 -07:00
Toby ecd60d0ff1 chore: improve case spelling 2024-03-30 13:29:19 -07:00
Toby 98264d9e27 chore: format 2024-03-30 13:23:46 -07:00
TobyandGitHub bb5d4e32ff Merge pull request #116 from apernet/update-trojan
feat: further improve trojan detection
2024-03-29 23:19:36 -07:00
Toby ca574393d3 feat: further improve trojan detection 2024-03-29 23:02:20 -07:00
KujouRinka 0e2ee36865 refactor: merge openvpn_tcp and openvpn_udp to openvpn 2024-03-30 12:00:17 +08:00
TobyandGitHub b02738cde8 Merge pull request #115 from apernet/update-readme
docs: move to website
2024-03-29 13:08:14 -07:00