SenPai Scanner — Release Notesv1.1.0Anti-DPI: the TLS ClientHello of every probe (and of the xray tunnel validation) can be cut into small pieces so DPI cannot match the SNI. Defaults are the published values from t.me/MatinSenPaii/5469 (tlshello 0/104/1 + first-packet 114/1, delay 1 ms, maxSplit 11, fingerprint unsafe, ALPN http/1.1); every field is editable in the desktop app, with a "Suggested values" buttonAnti-DPI switch in the TUI config screen and in the Android scan config; values persist as anti_dpi in the shared config fileNew black / white / red look (square corners, numbered sections, Vazirmatn + JetBrains Mono) across the desktop GUI, the terminal UI and the Android app, with a light theme in the desktop appNew logo, banner and social preview; all desktop and Android icons regenerated (python gen_icons.py)Plain text mode for screen readers (senpaiscanner --plain, scan ..., help): one sentence per line, no colours or redraws, throttled progress announcements, final list and -output file (#115 #124 #125)Paste your own targets: IPs, CIDRs, ranges and domains in the desktop app and the CLI; domains are resolved; invalid entries are reported (#113)Skip the reachability scan and test the pasted list directly, through your config or with a direct download sample (#113)Gentle mode (desktop profile switch, terminal UI row, -gentle): 25 workers max, 6 s timeout min, 40 probes/s, for ISPs that cut the connection during scans (#25 #56 #62 #96 #75)Save and resume scans: progress is saved every 20 s and on stop, the desktop app offers Resume scan, the CLI has scan -resume (#130 #64)32-bit ARM CLI build (cli-linux-armv7) for 32-bit Termux (#111)Fix: the direct download speed test ("Speed test green results" without a config, and Android) judged a single-try probe with IsHealthy, which needs two tries, so every sample was reported as failed (#82)Fix: cancelling a Phase 2 scan on Android did not stop it; the Phase 2 table of the terminal UI dropped the failure reason; the live results file was not written for runs without healthy Phase 1 rows; CSV header and flush errors were ignored; the active-scan cancel function is now mutex-guarded (#133 #134 #107)Tests: byte-for-byte check of the Anti-DPI recipe, a probe test that proves the ClientHello arrives fragmented, and xray outbound testsv1.0.0Unified Signal Desk experience across Windows, Linux, macOS, and Android GUI buildsTransparent SenPai logo applied to native desktop and Android application iconsAndroid rebuilt with separate Scan, Results, and Export tabs plus a persistent session railAndroid live copy actions for all green endpoints and the top 20 while scans are runningAndroid post-stop speed testing, optional neighbor scanning, tunnel validation, and client exportsGitHub release builds for all desktop GUIs, CLIs, and Android APK artifactsv0.8.0What's NewDesktop GUI (Wails v2)New cross-platform desktop application (desktop/) built with Wails v2 — Windows, macOS, and LinuxRebuilt “Signal Desk” UI with real Scan, Results, and Export tabs plus a persistent live session railCopy every green endpoint or the top 20 unique IPs at any time, including while a scan is still runningStop a scan and speed-test all green results collected so far; uses xray when a share URL is present and direct Cloudflare samples otherwiseResults and client exports now have separate workspaces, clear empty states, live filtering, and keyboard-accessible controlsFull scan control: IP count (1k / 5k / 20k / custom), workers, timeout, ports, optional neighbor/WebSocket scanning, config URL, top-N, and speed thresholdsLive progress events (scan:stats, scan:result, scan:done) streamed from Go to the UIPhase 2 xray validation of the top N healthy IPs inside the GUI (validate:result, validate:done)Config export built in: paste one vless:// / trojan:// / vmess:// config URL, generate a full pack (subscription URLs, sing-box JSON, Clash YAML) for all working IPs, copy or save via native dialogsBuild script desktop/build_gui.ps1 — single-platform or cross-compile (-All)Scan Control & Network MetadataNeighbor scanning is now opt-in in both the CLI and GUI and persists with the last scan settingsISP detection now merges Cloudflare metadata with parallel IPWhois/IPinfo HTTPS fallbacks and a Team Cymru DNS ASN fallbackMahsaNG-Style IP SamplingCloudflare range pool (internal/ipsrc/ranges_v4.txt, 628 ranges) now sampled with the MahsaNG weighted-random algorithm: larger ranges are picked more often, every IP is unique, and small pools enumerate + shuffle instead of capping at 1024Original selectable counts (1000 / 5000 / 20000 / custom) are preserved — no hard limitPhase 1 and the Android app both use the same weighted sampling via MahsaNGV4StreamShared Export PackageNew internal/export package: Generate, ParseEndpoints, sing-box and Clash builders, shared by the TUI (exportAllConfigs) and the desktop GUIOtherRemoved the dead, unbuildable pkg/scanner package that blocked go mod tidy and full-module buildsgo test ./... and go vet ./... pass for the whole modulev0.7.0Release date: June 13, 2026Previous release: v0.5.0 (May 30, 2026)Commits: 20 | Files changed: 81 | Lines: +7,133 / -540What's NewAndroid ApplicationComplete Android app built with Kotlin and Jetpack Compose (android/)MVVM architecture with MainScreenViewModel and MainViewModelFull UI implementation with theme support (Color, Theme, Type)Go Mobile bindings via mobile/mobile.go and mobile/validate.goCI/CD pipeline: debug and release APK builds with signing supportLauncher icons for all Android densities (mdpi through xxxhdpi)Build scripts: build_go_mobile.sh and build_go_mobile.batNew Proxy ProtocolsShadowsocks (SS) support — parse ss:// share URLs with base64-encoded payloads, method/password detection, and Xray outbound configurationVMess support — parse vmess:// base64 JSON share URLs, build Xray outbound with alterId: 0Both protocols work through Phase 1 connectivity scan and Phase 2 xray validationISP DetectionFetches connection metadata from speed.cloudflare.com/meta on startupFalls back to ip-api.com/json when Cloudflare is unreachable (e.g. restricted networks)Displays ISP name and Cloudflare colo in the TUI header and Phase 1/Phase 2 pagesMulti-Format ExportPress e after Phase 2 to export working endpoints to:Subscription URLs — senpaiscanner-sub.txt (one vless:// or trojan:// URL per line)Sing-Box JSON — senpaiscanner-singbox.json with outbound arrayClash YAML — senpaiscanner-clash.yaml with proxy listSpeed SettingsMin Speed filter — discard Phase 2 results below a configurable Mbps threshold (None / 1 / 2 / 5 Mbps / Custom)Custom Speed URL — override the default speed.cloudflare.com/__down endpointSpeed Size — configurable download sample size (128 KB / 512 KB / 1 MB / 5 MB / Custom)Upload Test — optional Phase 2 setting that measures upload throughput by POSTing data through the proxy (toggle with space on the optional config page)Persistent ConfigurationScan settings saved to ~/.config/senpaiscanner/config.json (Windows: %AppData%/senpaiscanner/config.json)Retry Last Scan menu option re-runs the previous scan with saved settingsSaves: IP mode, count, workers, timeout, ports, config URL, top N, min speed, speed URL, speed size, upload test, RequireWSSubnet & CIDR Supportips.txt now accepts CIDR notation (e.g. 104.16.0.0/13) in addition to plain IPsFor subnets larger than /24, randomly samples 256 IPs using O(log N) weighted selectionSubnets