{"id":479091,"date":"2026-05-08T17:43:24","date_gmt":"2026-05-08T17:43:24","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=479091"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=479091","title":{"rendered":"L\u00d7Box: \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 per-app \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0442\u043e \u043a\u0443\u0434\u0430 \u0445\u043e\u0434\u0438\u0442"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0434\u0435\u0431\u0430\u0436\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u00abTinkoff Investments \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 VPN\u00bb \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f, split-routing \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0421\u0438\u043c\u043f\u0442\u043e\u043c: app <strong>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f<\/strong>, \u043d\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f, login \u0432\u0438\u0441\u0438\u0442. \u0427\u0435\u0440\u0435\u0437 30 \u043c\u0438\u043d\u0443\u0442 \u0432\u043e\u0437\u043d\u0438 \u0441\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438 <code>\/state<\/code>, <code>\/connections<\/code>, <code>\/logs<\/code> \u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e matching&#8217;\u0430 conn_id&#8217;\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u043f\u0440\u043e\u044f\u0441\u043d\u0438\u043b\u0430\u0441\u044c.<\/p>\n<p>\u0427\u0430\u0441\u0442\u044c \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0432\u0438\u0434\u0430 <code>*.t-bank-app.ru<\/code> \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043c\u0430\u0442\u0447\u0438\u0442\u0441\u044f \u0432 \u043c\u043e\u0439 <code>ru-domains<\/code> rule_set \u0438 \u0438\u0434\u0451\u0442 <strong>\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e<\/strong>. \u041d\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 CNAME \u043d\u0430 <code>*.trbcdn.net<\/code> (TLD <code>.net<\/code>!) \u2014 \u044d\u0442\u043e\u0442 target \u0432 <code>ru-domains<\/code> \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442, \u0438 sing-box \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 bypass-VPN \u0432 \u041f\u043e\u043b\u044c\u0448\u0443. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f split: \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0443\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e IP, \u0447\u0430\u0441\u0442\u044c \u2014 \u0441 \u043f\u043e\u043b\u044c\u0441\u043a\u043e\u0433\u043e. Bank-backend, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 session \u043a source-IP \/ fingerprint&#8217;\u0443, \u0432\u0438\u0434\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c auth state.<\/p>\n<p>\u0421\u0438\u043c\u043f\u0442\u043e\u043c \u2014 \u00ablogin \u0437\u0430\u0432\u0438\u0441\u00bb, \u043a\u043e\u0440\u0435\u043d\u044c \u2014 domain-level split routing \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0421\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e: \u0442\u0430\u043a\u0430\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c 30 \u043c\u0438\u043d\u0443\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 <strong>L\u00d7Box<\/strong> (\u043c\u043e\u0439 Android-\u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430 sing-box, <a href=\"https:\/\/github.com\/Leadaxe\/LxBox\" rel=\"noopener noreferrer nofollow\">open source<\/a>) \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0444\u0438\u0447\u0430 \u2014 <strong>Per-app traffic profiler<\/strong>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b7\/4d9\/d61\/4b74d9d615abdc04512a9edae31a2e17.png\" width=\"3480\" height=\"2432\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4b7\/4d9\/d61\/4b74d9d615abdc04512a9edae31a2e17.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b7\/4d9\/d61\/4b74d9d615abdc04512a9edae31a2e17.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>Pick app \u2192 \u25b6 Record \u2192 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2192 \u0447\u0438\u0442\u0430\u0435\u0448\u044c Domains tab. \u0412\u0438\u0434\u043d\u043e \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c <code>*.t-bank-app.ru<\/code> \u0443\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 <code>direct-out<\/code>, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u2014 \u0447\u0435\u0440\u0435\u0437 <code>vpn-1<\/code>. C\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0433\u0434\u0435 \u043f\u0440\u043e\u0432\u0430\u043b \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e packet capture, root&#8217;\u0430, \u0432\u043d\u0435\u0448\u043d\u0438\u0445 tools.<\/p>\n<h3>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435<\/h3>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u043c \u0440\u0430\u043d\u0435\u0435, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0445\u043e\u0442\u044f\u0442 \u0437\u043d\u0430\u0442\u044c \u043a\u0443\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043a\u0430\u043a\u043e\u0435 \u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438.<\/p>\n<p>\u0422\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f split-routing VPN&#8217;\u0430:<\/p>\n<p><strong>\u0414\u0435\u0431\u0430\u0433 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430<\/strong>. \u00abX \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 VPN\u00bb \u2014 flagship-\u043a\u0435\u0439\u0441. \u041a\u043e\u0440\u0435\u043d\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0434\u0438\u043d: \u0434\u043e\u043c\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 RU, \u043d\u043e CNAME \u0443\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 CDN \u0441 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c TLD, \u0438 rule_set \u043d\u0435 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442. \u0411\u0435\u0437 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 CNAME-chain&#8217;\u0430 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0432.<\/p>\n<p><strong>Privacy audit<\/strong>. \u00ab\u041a\u0443\u0434\u0430 \u0441\u0442\u0443\u0447\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435?\u00bb \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u043e\u0431\u044a\u0451\u043c\u0443 \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0417\u0430\u043c\u0435\u0447\u0430\u0435\u0448\u044c \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0435 \u2014 \u043a\u043e\u043f\u0430\u0435\u0448\u044c\u0441\u044f \u0432 outbound&#8217;\u0435, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0448\u044c.<\/p>\n<p><strong>\u0414\u0435\u0431\u0430\u0433 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/strong>. \u00ab\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442?\u00bb \u2014 \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u0432 \u043a\u0430\u043a\u043e\u043c outbound&#8217;\u0435 \u043b\u0435\u0436\u0438\u0442 \u0442\u0440\u0430\u0444\u0438\u043a, \u0435\u0441\u0442\u044c \u043b\u0438 DNS retry&#8217;\u0438, \u043d\u0435 \u0432\u0438\u0441\u0438\u0442 \u043b\u0438 \u0432\u0441\u0451 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c IP.<\/p>\n<p>\u041d\u0430 \u0440\u044b\u043d\u043a\u0435 Android-VPN-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 <strong>\u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 routing chain per-app \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/strong>. PCAPDroid \u0434\u0435\u043b\u0430\u0435\u0442 packet capture (\u043d\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0440\u043e\u0443\u0442\u0438\u043d\u0433). NetGuard \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 (\u043d\u043e \u043d\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u0443\u0435\u0442). AdGuard \u0432\u0438\u0434\u0438\u0442 DNS (\u043d\u043e \u043d\u0435 outbound). Wireshark \u2014 \u044d\u0442\u043e \u0434\u0435\u0441\u043a\u0442\u043e\u043f.<\/p>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c sing-box \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 VPN-engine, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0438\u0448\u0435\u0442 \u0432 \u043b\u043e\u0433\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 DNS-\u0440\u0435\u0437\u043e\u043b\u0432\u044b \u0441 CNAME chain&#8217;\u043e\u043c, package_name \u043f\u043e conn_id \u0438 outbound chain. \u042d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u043e \u043f\u043e\u043b\u043a\u0430\u043c.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e<\/h3>\n<p>Singleton-\u0441\u0435\u0440\u0432\u0438\u0441 <code>TrafficProfiler<\/code> (Dart, ChangeNotifier) \u0434\u0435\u0440\u0436\u0438\u0442 <strong>\u043e\u0434\u043d\u0443<\/strong> active session + ring-buffer \u043d\u0430 5 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u0445. \u0412\u0441\u0451 in-memory \u2014 \u043d\u0430 kill \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 \u0441\u0442\u0438\u0440\u0430\u044e\u0442\u0441\u044f. Persist \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f: \u0444\u0438\u0447\u0430 diagnostic-only, \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f, \u0446\u0435\u043d\u0430 schema\/migration&#8217;\u043e\u0432 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 value.<\/p>\n<p>\u0414\u0432\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>              \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510              \u2502  TrafficProfiler (singleton)            \u2502              \u2502   _active: Session?  _completed: Q[5]   \u2502              \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                     \u25b2                    \u25b2        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510        \u2502 A: log stream       \u2502  \u2502 B: \/connections poll       \u2502        \u2502  AppLog (core src)  \u2502  \u2502  Clash API every 2s        \u2502        \u2502  ts-diff drain      \u2502  \u2502  diff vs prev snapshot     \u2502        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a A \u2014 sing-box log stream<\/strong> \u0447\u0435\u0440\u0435\u0437 native EventChannel <code>lxbox\/coreLog<\/code> \u2192 <code>AppLog<\/code> (\u043c\u043e\u0439 per-source ring-buffer \u0434\u043b\u044f \u043b\u043e\u0433\u043e\u0432) \u2192 <code>TrafficProfiler<\/code> listener. \u041f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code>INFO[N] [&lt;conn_id&gt; &lt;Nms&gt;] router: found package name: &lt;pkg&gt;INFO[N] [&lt;conn_id&gt; &lt;Nms&gt;] dns: exchanged|cached &lt;type&gt; &lt;name&gt;. &lt;ttl&gt; IN &lt;type&gt; &lt;data&gt;INFO[N] [&lt;conn_id&gt; &lt;Nms&gt;] dns: exchange failed for &lt;host&gt;: &lt;reason&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>Per-conn-id accumulator (<code>_DnsAccumulator<\/code>) \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 CNAME chain \u0438 \u044d\u043c\u0438\u0442\u0438\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 <code>dnsResolve<\/code> event&#8217;\u044b \u0441 <strong>\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c<\/strong> \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u043c domain&#8217;\u043e\u043c, \u0441\u043f\u0438\u0441\u043a\u043e\u043c CNAME hops \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c IP.<\/p>\n<p><strong>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a B \u2014 Clash API polling<\/strong> <code>\/connections<\/code> \u043a\u0430\u0436\u0434\u044b\u0435 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430 session active \u2014 battery-friendly). Diff \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c snapshot&#8217;\u043e\u043c \u0434\u0430\u0451\u0442 <code>tcpOpen<\/code> \/ <code>tcpClose<\/code> \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 bytes, chains, host, IP, port. \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e <code>metadata.process<\/code> \u0438\u043b\u0438 <code>metadata.processPath<\/code> \u043f\u043e\u0441\u043b\u0435 strip&#8217;\u0430 UID-\u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430 (\u0442\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 <code>\"ru.tinkoff.investing (10364)\"<\/code>, picker \u043e\u0442\u0434\u0430\u0451\u0442 \u0447\u0438\u0441\u0442\u044b\u0439 package).<\/p>\n<p>Aggregates <code>byDomain<\/code> \/ <code>byIp<\/code> \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f on-demand \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 (sub-tab views). Connection-issue \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442 \u26a0 \u043d\u0430 event&#8217;\u0430\u0445 \u2014 \u0434\u0432\u0430 locale-\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>Issue<\/p>\n<\/th>\n<th>\n<p>\u0423\u0441\u043b\u043e\u0432\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DNS timeout<\/p>\n<\/td>\n<td>\n<p align=\"left\">sing-box \u043b\u043e\u0433 <code>dns: exchange failed ...<\/code> \u2014 \u043f\u0440\u044f\u043c\u043e\u0439 engine-\u0441\u0438\u0433\u043d\u0430\u043b, \u043d\u0435 heuristic<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TCP RST early<\/p>\n<\/td>\n<td>\n<p align=\"left\">conn closed \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 1\u0441, \u21910 \u21930 \u0431\u0430\u0439\u0442 \u2014 heuristic \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438\/RST\/unreachable<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Memory bounds \u2014 50000 events \u043d\u0430 session \u0438\u043b\u0438 3-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 sliding window (\u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435). <code>_completed<\/code> ring-buffer FIFO-evict&#8217;\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e. Conn-id maps GC&#8217;\u0430\u0442\u0441\u044f \u043f\u043e 30-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u043c\u0443 TTL \u043a\u043e\u0433\u0434\u0430 map &gt; 256 entries.<\/p>\n<p>UI \u2014 <strong>4 sub-tab&#8217;\u0430<\/strong>:<\/p>\n<ul>\n<li>\n<p><strong>Live<\/strong> \u2014 newest-first \u0441\u0442\u0440\u0438\u043c events \u0441 \u0446\u0432\u0435\u0442\u043d\u044b\u043c\u0438 kind-\u043c\u0435\u0442\u043a\u0430\u043c\u0438 (DNS\/TCP\/UDP) \u0438 inline-\u043f\u043e\u043a\u0430\u0437\u043e\u043c CNAME chain + outbound chain \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u043c event&#8217;\u043e\u043c<\/p>\n<\/li>\n<li>\n<p><strong>Domains<\/strong> \u2014 aggregated \u043f\u043e domain&#8217;\u0443, sorted by bytes, \u0441 search-\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u043f\u043e domain || ip || cname-target. \u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 row&#8217;\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 CNAME chain, \u0432\u0441\u0435 IPs, outbound, issues (\u26a0)<\/p>\n<\/li>\n<li>\n<p><strong>IPs<\/strong> \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043e IP. \u041f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f hostless \u043a\u043e\u043d\u043d&#8217;\u043e\u0432 (\u0431\u0435\u0437 SNI sniffing) \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 IP \u0438\u0437 threat-feed&#8217;\u0430<\/p>\n<\/li>\n<li>\n<p><strong>Connections<\/strong> \u2014 per-conn timeline \u0441 inline-expand: CNAME, all IPs, issues (\u26a0), \u043a\u043d\u043e\u043f\u043a\u0430 <code>[View in Domains \u2192]<\/code> \u0441 \u0430\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c + autofill search&#8217;\u0430<\/p>\n<\/li>\n<\/ul>\n<p>Recording \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u044f \u0432\u044b\u0448\u0435\u043b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 (singleton). \u041d\u0430 HomeScreen \u0432 traffic bar \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u26a1-chip \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 package name&#8217;\u0430 \u2014 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440; tap \u2192 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0432 Per-app tab. \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e manual STOP, force-stop \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 start \u043d\u043e\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438.<\/p>\n<h3>\u0413\u0440\u0430\u0431\u043b\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b<\/h3>\n<p>\u0418\u0437 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 spec&#8217;\u0435, <strong>\u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/strong> \u0443\u0448\u043b\u043e \u043d\u0430 \u0448\u0442\u0443\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b \u0438\u0437 \u0434\u0438\u0437\u0430\u0439\u043d\u0430. \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0441\u0432\u043e\u0434\u043a\u043e\u0439 \u2014 \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043d\u0430\u0439\u0434\u0451\u0442 \u0432 <code>[lib\/services\/traffic_profiler.dart](https:\/\/github.com\/Leadaxe\/LxBox\/blob\/main\/app\/lib\/services\/traffic_profiler.dart)<\/code> \u0438 <a href=\"https:\/\/github.com\/Leadaxe\/LxBox\/tree\/main\/docs\/spec\/features\" rel=\"noopener noreferrer nofollow\">\u00a7044 spec<\/a>:<\/p>\n<ul>\n<li>\n<p><strong>UID-\u0441\u0443\u0444\u0444\u0438\u043a\u0441 \u0432 <\/strong><code><strong>metadata.process<\/strong><\/code>. Sing-box \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 <code>\"ru.tinkoff.investing\"<\/code>, \u0430 <code>\"ru.tinkoff.investing (10364)\"<\/code> \u2014 pid \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445. \u0411\u0435\u0437 strip&#8217;\u0430 \u043d\u0438 \u043e\u0434\u043d\u0430 conn&#8217;\u0446\u0438\u044f \u043d\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a target session&#8217;\u0443. \u0417\u0430\u043e\u0434\u043d\u043e \u0441\u044e\u0440\u043f\u0440\u0438\u0437 \u2014 <code>metadata.process<\/code> \u0447\u0430\u0449\u0435 <code>null<\/code>, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 package \u0436\u0438\u0432\u0451\u0442 \u0432 <code>metadata.processPath<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Ring-buffer overflow \u043b\u043e\u043c\u0430\u0435\u0442 length-diff scan<\/strong>. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 drain \u043b\u043e\u0433\u043e\u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b <code>entries.length<\/code> \u0441 \u043f\u0440\u043e\u0448\u043b\u044b\u043c snapshot&#8217;\u043e\u043c. \u041c\u043e\u0439 <code>AppLog<\/code> \u0438\u043c\u0435\u0435\u0442 cap=500 \u0434\u043b\u044f core source \u2014 \u043a\u043e\u0433\u0434\u0430 busy traffic \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440, \u043d\u043e\u0432\u044b\u0435 entries \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044e\u0442 \u0441\u0442\u0430\u0440\u044b\u0435, \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 500, length-diff \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439. DNS-events \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 1-2 \u043c\u0438\u043d\u0443\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 recording&#8217;\u0430. \u0424\u0438\u043a\u0441 \u2014 timestamp-diff (\u0445\u0440\u0430\u043d\u0438\u0442\u044c ts \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e entry, \u0430 \u043d\u0435 \u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441).<\/p>\n<\/li>\n<li>\n<p><code><strong>dns: cached<\/strong><\/code><strong> \u043d\u0443\u0436\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 <\/strong><code><strong>dns: exchanged<\/strong><\/code>. Sing-box \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0435 \u0444\u043e\u0440\u043c\u044b; \u0443 \u0437\u0430\u043d\u044f\u0442\u044b\u0445 apps \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0437\u043e\u043b\u0432\u043e\u0432 \u2014 cache-hit&#8217;\u044b. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f regex-\u043c\u0430\u0441\u043a\u0430 \u043b\u043e\u0432\u0438\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e <code>exchanged<\/code> \u2014 DNS-\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u044b\u043b \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 (TCP-conn&#8217;\u044b \u0435\u0441\u0442\u044c, DNS-events \u043d\u0435\u0442).<\/p>\n<\/li>\n<li>\n<p><strong>Domain attribution \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 domain, \u043d\u0435 \u043d\u0430 CNAME-target<\/strong>. Sing-box \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442 CNAME chain \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e: <code>CNAME a \u2192 b<\/code>, \u043f\u043e\u0442\u043e\u043c <code>A b \u2192 ip<\/code>. \u0415\u0441\u043b\u0438 \u044d\u043c\u0438\u0442\u0438\u0442\u044c event \u0441 domain = \u0438\u043c\u0435\u043d\u0435\u043c \u0438\u0437 A-\u0437\u0430\u043f\u0438\u0441\u0438 \u2014 \u0432 Domains tab \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f <code>b<\/code> (CDN-\u0445\u043e\u0441\u0442), \u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e-\u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 <code>a<\/code> \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442. \u0424\u0438\u043a\u0441 \u2014 per-conn-id accumulator \u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0438\u043c\u044f, CNAME-targets \u043a\u043e\u043f\u044f\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u043a chain.<\/p>\n<\/li>\n<li>\n<p><strong>Connections click target \u2014 \u0442\u043e\u043b\u044c\u043a\u043e header<\/strong>. Inline-expand \u043d\u0430 conn row \u0434\u0435\u043b\u0430\u043b \u0432\u0435\u0441\u044c tile (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e) \u043a\u043b\u0438\u043a\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c. \u0422\u0430\u043f\u0430\u0435\u0448\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00abView in Domains\u00bb \u0438\u043b\u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c CNAME \u2014 row \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0417\u0430\u0432\u0435\u0440\u043d\u0443\u043b <code>InkWell<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0432 header&#8217;\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c, expanded section \u0436\u0438\u0432\u0451\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<h3>Debug API \u2014 \u0434\u043b\u044f \u0433\u043b\u0430\u0437 \u0438 \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u0432<\/h3>\n<p>\u0412\u0441\u0435 controls UI \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0447\u0435\u0440\u0435\u0437 <strong>localhost HTTP API<\/strong> (Bearer-token authenticated, bind \u043d\u0430 <code>127.0.0.1<\/code>, anti-rebinding host-check). \u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u2014 <code>\/profiler\/start<\/code>, <code>\/profiler\/stop<\/code>, <code>\/profiler\/active<\/code>, <code>\/profiler\/session\/&lt;id&gt;?include=domains,ips,events<\/code>, <code>\/profiler\/sessions<\/code>, \u043f\u043b\u044e\u0441 SSE-\u0441\u0442\u0440\u0438\u043c <code>\/profiler\/stream<\/code> \u0434\u043b\u044f real-time event feed&#8217;\u0430. \u041f\u043e\u043b\u043d\u0430\u044f reference \u2014 \u0432 <code>[docs\/api\/debug-api-reference.md](https:\/\/github.com\/Leadaxe\/LxBox\/blob\/main\/docs\/api\/debug-api-reference.md)<\/code>.<\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u043e \u0441\u0435\u0431\u044f \u043a\u0440\u0443\u0442\u043e, \u043d\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2014 \u0434\u0440\u0443\u0433\u0430\u044f. <strong>\u042d\u0442\u043e API \u043d\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f, \u044d\u0442\u043e API \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u0430.<\/strong><\/p>\n<p>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443 \u043c\u0435\u043d\u044f \u0441\u0435\u0439\u0447\u0430\u0441:<\/p>\n<ol>\n<li>\n<p>\u0412\u0442\u044b\u043a\u0430\u044e \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0432 \u043a\u0430\u0431\u0435\u043b\u044c, \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e <code>adb forward tcp:9270 tcp:9269<\/code> (\u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u2014 \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 <code>scripts\/ensure-wifi-adb.sh<\/code> \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 wifi \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438)<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044e Cursor \/ Claude Code \/ \u043b\u044e\u0431\u043e\u0439 coding agent \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 L\u00d7Box<\/p>\n<\/li>\n<li>\n<p>\u041f\u0438\u0448\u0443: \u00abTinkoff Investments login \u0432\u0438\u0441\u043d\u0435\u0442, \u0440\u0430\u0437\u0431\u0435\u0440\u0438\u0441\u044c\u00bb \u2014 \u0438 \u043a\u0438\u0434\u0430\u044e \u0442\u043e\u043a\u0435\u043d Debug API \u0438\u0437 app&#8217;\u0430<\/p>\n<\/li>\n<li>\n<p>\u0418\u0434\u0443 \u043f\u0438\u0442\u044c \u0447\u0430\u0439<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>\u0414\u0451\u0440\u0433\u0430\u0435\u0442 <code>\/profiler\/start<\/code> \u0441 <code>package=ru.tinkoff.investing<\/code><\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0438\u0442 \u043c\u0435\u043d\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 app&#8217;\u0435 (\u0442\u0430\u043f\u043d\u0443\u0442\u044c Login)<\/p>\n<\/li>\n<li>\n<p>\u041f\u0443\u043b\u043b\u0438\u0442 <code>\/profiler\/session\/&lt;id&gt;?include=domains,events<\/code><\/p>\n<\/li>\n<li>\n<p>\u0412\u0438\u0434\u0438\u0442 split: 80% \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 <code>direct-out<\/code>, 3 \u2014 \u0447\u0435\u0440\u0435\u0437 <code>vpn-1<\/code> (\u043d\u0435\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 routing \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e app&#8217;\u0430 \u2014 \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442 auth)<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0430\u043f\u044b\u0432\u0430\u0435\u0442 CNAME chain \u0432 \u0441\u0430\u043c\u043e\u0439 session JSON&#8217;\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u0438\u0448\u0435\u0442: \u00ab\u041a\u043e\u0440\u0435\u043d\u044c \u2014 <code>*.trbcdn.net<\/code> \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 <code>.net<\/code> TLD, \u0432 <code>ru-domains<\/code> rule_set \u0435\u0433\u043e \u043d\u0435\u0442, \u0434\u043e\u0431\u0430\u0432\u044c suffix\u00bb<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u2014 \u0441\u0430\u043c \u0434\u0435\u043b\u0430\u0435\u0442 PR \u0441 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 template&#8217;\u0430 \u0447\u0435\u0440\u0435\u0437 Edit-tool, \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442 \u0442\u0435\u0441\u0442\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0441\u044c \u2014 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 summary \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 git diff, \u0438\u043d\u043e\u0433\u0434\u0430 \u0443\u0436\u0435 \u0437\u0435\u043b\u0451\u043d\u044b\u0439 CI. \u0412\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u2014 \u043d\u0430 \u0447\u0430\u0439.<\/p>\n<p>\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 <strong>structured<\/strong>: agent \u0447\u0438\u0442\u0430\u0435\u0442 \u043d\u0435 grep \u043f\u043e \u043b\u043e\u0433\u0430\u043c, \u0430 typed JSON \u0441 <code>domain<\/code> \/ <code>ip<\/code> \/ <code>cname_chain<\/code> \/ <code>outbound_chain<\/code> \/ <code>issues<\/code> \u043f\u043e\u043b\u044f\u043c\u0438. SSE-\u0441\u0442\u0440\u0438\u043c (fire-and-forget, \u0431\u0435\u0437 <code>Last-Event-ID<\/code> reconnect \u2014 overkill \u0434\u043b\u044f in-app single-user use case&#8217;\u0430) \u0434\u0430\u0451\u0442 live-feed \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043d\u0435 \u043f\u0443\u043b\u043b\u0438\u0442\u044c, \u0430 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0444\u0438\u0447\u0443 <code>Per-app traffic profiler<\/code> \u044f \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u0438 \u0440\u0430\u0434\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u2014 \u0440\u0430\u043d\u044c\u0448\u0435 \u0442\u043e\u0442 \u0436\u0435 flow \u0431\u044b\u043b \u00ab\u0434\u0430\u0439 \u043c\u043d\u0435 10 \u0444\u0430\u0439\u043b\u043e\u0432 logcat \/ state \/ connections, \u044f \u0440\u0430\u0437\u0431\u0435\u0440\u0443\u00bb, \u0442\u0435\u043f\u0435\u0440\u044c \u2014 \u00ab\u0434\u0430\u0439 \u0430\u0434\u0440\u0435\u0441 API \u0438 \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u00bb.<\/p>\n<h3>\u0427\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 (\u043f\u043e\u043a\u0430)<\/h3>\n<p>\u2705 <strong>DNS-\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441 CNAME chain&#8217;\u043e\u043c<\/strong> \u2014 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0437\u043e\u043b\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 IP, \u043d\u043e \u0438 \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443: <code>cdn.t-bank-app.ru \u2192 cl-ead2c819.edgecdn.ru \u2192 193.17.93.194<\/code>. \u042d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0435\u0433\u043e \u043d\u0435\u0442 \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c Android \u0440\u043e\u0443\u0442\u0435\u0440\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0438 \u0431\u0435\u0437 \u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u044b \u043d\u0435 \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>\u2705 <strong>Connections \u0441 outbound chain&#8217;\u043e\u043c<\/strong> \u2014 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e TCP\/UDP conn&#8217;\u0430 \u0432\u0438\u0434\u043d\u043e <strong>\u0447\u0435\u0440\u0435\u0437 \u0447\u0442\u043e<\/strong> \u0440\u043e\u0443\u0442\u0438\u0442\u0441\u044f: <code>direct-out<\/code> \u0438\u043b\u0438 <code>vless-server \u2192 \ud83c\uddeb\ud83c\uddee\u0424\u0438\u043d\u043b\u044f\u043d\u0434\u0438\u044f (vpn-1)<\/code>, \u0441 \u0434\u0435\u0442\u0443\u0440\u043e\u043c \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c. Split-routing-\u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u0431\u0435\u0437 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 outbound&#8217;\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0442\u0430 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043a domain&#8217;\u0443, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0444\u0438\u0447\u0443 \u0434\u0435\u043b\u0430\u043b.<\/p>\n<p>\u2705 <strong>Connection-issue detection (DNS timeout + TCP RST early)<\/strong> \u2014 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u0430\u044f \u26a0 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u043d\u0430 event&#8217;\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 50 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0438\u0441\u043a\u0430\u0442\u044c \u00ab\u0447\u0442\u043e \u043f\u043b\u043e\u0445\u043e\u00bb. DNS timeout \u2014 \u043f\u0440\u044f\u043c\u043e\u0439 engine-\u0441\u0438\u0433\u043d\u0430\u043b \u0438\u0437 \u043b\u043e\u0433\u0430 sing-box, TCP RST early \u2014 heuristic (closed &lt;1\u0441 \u0441 0 bytes).<\/p>\n<p>\u2705 <strong>Process inference fallback<\/strong> \u2014 \u043a\u043e\u0433\u0434\u0430 sing-box <code>find_process<\/code> \u043d\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0440\u043e\u0432\u0430\u043b conn \u043a package&#8217;\u0443 (\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u043e \u0434\u043b\u044f WebView \u0438 system services), \u043f\u0440\u043e\u0431\u0443\u044e attribute \u043f\u043e prior DNS resolved IPs \u0432 \u043e\u043a\u043d\u0435 10 \u0441\u0435\u043a\u0443\u043d\u0434, \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u303d. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u044f WebView-based apps \u0432\u0440\u043e\u0434\u0435 \u0442\u043e\u0433\u043e \u0436\u0435 Tinkoff&#8217;\u0430 \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u044b \u0431\u044b\u043b\u0430 \u0431\u044b \u0434\u044b\u0440\u044f\u0432\u0430\u044f.<\/p>\n<p>\u2705 <strong>JSON export \u0447\u0435\u0440\u0435\u0437 Share<\/strong> \u2014 \u043e\u0434\u0438\u043d \u0442\u0430\u043f \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0443 share \u2014 native Android Share intent \u0441 \u043f\u043e\u043b\u043d\u044b\u043c session JSON&#8217;\u043e\u043c (events + aggregates + meta). \u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 workflow \u00ab\u0437\u0430\u043f\u0438\u0441\u0430\u043b \u2192 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u0441\u0435\u0431\u0435\/\u0430\u0433\u0435\u043d\u0442\u0443\/\u0432 Telegram \u2192 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b\u00bb. \u0414\u0435\u0448\u0451\u0432\u0430\u044f \u043d\u0438\u0442\u043e\u0447\u043a\u0430, \u043d\u043e \u0431\u0435\u0437 \u043d\u0435\u0451 \u0444\u0438\u0447\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b dead-end.<\/p>\n<p>\u2705 <strong>Debug API + SSE<\/strong> \u2014 \u0432\u0441\u0435 UI-controls \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0447\u0435\u0440\u0435\u0437 localhost HTTP API + Server-Sent Events \u0441\u0442\u0440\u0438\u043c. \u042d\u0442\u043e foundation \u0434\u043b\u044f agent-driven \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 (\u043f\u0440\u043e \u0447\u0442\u043e \u044f \u0432\u044b\u0448\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b) \u2014 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0444\u0438\u0447\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e-\u0435\u0449\u0451-\u043e\u0434\u0438\u043d-UI-tab. \u0421\u0430\u043c\u043e\u0435 \u0446\u0435\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043b\u0438\u0447\u043d\u043e.<\/p>\n<p>\u274c <strong>HTTP-\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 URL&#8217;\u044b \u0438 headers<\/strong> \u2014 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0438\u0434\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e <code>domain:port<\/code>, \u0430 \u043d\u0435 <code>GET \/api\/v3\/auth\/login<\/code>, <code>User-Agent<\/code>, <code>Authorization<\/code>. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043b\u044f full API-\u0430\u0443\u0434\u0438\u0442\u0430 (\u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e endpoint app \u0434\u0451\u0440\u0433\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0443\u0442\u0435\u043a\u0430\u044e\u0442). \u041d\u043e sing-box \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 TUN\/SOCKS \u2014 \u043a \u043d\u0435\u043c\u0443 \u0442\u0440\u0430\u0444\u0438\u043a \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0443\u0436\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 TLS&#8217;\u043e\u043c, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437 MITM-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043d\u0435\u043b\u044c\u0437\u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u0430\u044f limit&#8217;\u0430\u0446\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u043d\u0435 \u043c\u043e\u044f.<\/p>\n<p>\u274c <strong>Per-domain latency \/ RTT<\/strong> \u2014 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0431\u0438\u0440\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e bytes \u0438 conn count. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c TCP handshake timings \u0438 DNS round-trip \u2014 \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a\u043e\u0439 CDN-\u043d\u043e\u0434 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442, \u0430 \u043d\u0435 \u00ab\u0432\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0443\u043f\u0438\u0442\u00bb. Sing-box \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u0438\u0448\u0435\u0442 \u0432 <code>dns: exchanged<\/code> (\u0432 <code>Nms<\/code> \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435), TCP-handshake \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f probing&#8217;\u043e\u043c \u043c\u0435\u0440\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u043a\u0430 \u043a\u0430\u043a \u0438\u0434\u0435\u044f \u0447\u0438\u0441\u0442\u043e.<\/p>\n<p>\u274c <strong>Inline \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 routing rules<\/strong> \u2014 <code>[Block this domain]<\/code> \/ <code>[Add to ru-direct]<\/code> \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 Domains tab. \u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 feedback loop: \u0443\u0432\u0438\u0434\u0435\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432 trace \u2192 \u043e\u0434\u043d\u0438\u043c \u0442\u0430\u043f\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u043b rule \u2192 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u2192 \u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 Custom Rules screen \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u0434\u043e\u043c\u0435\u043d\u0430 \u0440\u0443\u043a\u0430\u043c\u0438. \u042d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 near-term \u2014 UI \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0442\u043e\u0432, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c wire&#8217;\u043d\u0443\u0442\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 <code>CustomRule<\/code> API, \u043d\u043e \u043d\u0435 \u044f\u0441\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043b\u0438, \u043a\u0441\u0442\u0430\u0442\u0438 \u0430\u0433\u0435\u043d\u0442\u044b \u0447\u0435\u0440\u0435\u0437 API \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u043e\u0433\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0435\u0437 UI.<\/p>\n<p>\u274c <strong>TLS fingerprinting (JA3\/JA4)<\/strong> \u2014 \u0445\u0435\u0448 TLS ClientHello \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 connection. \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430 DPI-\u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439: \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0432 \u0420\u0424 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u043d\u0435 \u043f\u043e \u0434\u043e\u043c\u0435\u043d\u0443, \u0430 \u043f\u043e JA3 (\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0442 \u0447\u0442\u043e \u0432\u0430\u0441 sing-box \u0430 \u043d\u0435 Chrome). Sing-box \u0432\u043d\u0443\u0442\u0440\u0438 \u0443\u043c\u0435\u0435\u0442 fake&#8217;\u0438\u0442\u044c fingerprint \u0447\u0435\u0440\u0435\u0437 <code>outbound\/uTLS<\/code> (\u043c\u0438\u043c\u0438\u043a\u0440\u0438\u044f \u043f\u043e\u0434 Chrome\/Firefox\/Safari), \u043d\u043e <strong>\u0441\u0430\u043c fingerprint \u043d\u0430\u0440\u0443\u0436\u0443 \u0447\u0435\u0440\u0435\u0437 libbox API \u043f\u043e\u043a\u0430 \u043d\u0435 expose&#8217;\u0438\u0442\u0441\u044f<\/strong>. \u0416\u0434\u0443 \u0432 \u0430\u043f\u0441\u0442\u0440\u0438\u043c\u0435.<\/p>\n<h3>\u0413\u0434\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u0420\u0435\u043b\u0438\u0437 L\u00d7Box v1.7.0 (\u0442\u0435\u043c\u0430 \u0446\u0438\u043a\u043b\u0430 \u2014 \u00abObservability\u00bb). Android 8.0+ (minSdk 26), arm64-v8a \/ x86_64. Sing-box <code>find_process: true<\/code> \u043d\u0443\u0436\u0435\u043d \u0432 config&#8217;\u0435 (\u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u0432 \u043c\u043e\u0451\u043c wizard-template&#8217;\u0435).<\/p>\n<p>Open-source: <a href=\"https:\/\/github.com\/Leadaxe\/LxBox\" rel=\"noopener noreferrer nofollow\">github.com\/Leadaxe\/LxBox<\/a>. Apk&#8217;\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 CI\/CD \u043d\u0430 GitHub, \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u00ab\u043d\u0430\u043b\u0435\u0432\u043e\u00bb \u043d\u0435\u0442. Spec \u2014 <code>[docs\/spec\/features\/044](https:\/\/github.com\/Leadaxe\/LxBox\/tree\/main\/docs\/spec\/features)<\/code>. User guide \u043d\u0430 per-app trace \u2014 <code>[docs\/features\/per-app-trace.md](https:\/\/github.com\/Leadaxe\/LxBox\/blob\/main\/docs\/features\/per-app-trace.md)<\/code>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0435\u0439\u0441\u044b \u0433\u0434\u0435 per-app \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0431\u044b (\u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u2014 \u0433\u0434\u0435 \u0435\u0451 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442), \u0438\u0434\u0435\u0438 \u043f\u043e issue rule&#8217;\u0430\u043c \/ locale-\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u043d\u043e\u0439 geo-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 geoip-lookup, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0447\u044c \u0441 UI \u2014 \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 issue&#8217;\u043c \u0438 pull request&#8217;\u0430\u043c.<\/p>\n<p>Sing-box \u0432\u043d\u0443\u0442\u0440\u0438 \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442 \u043a\u0442\u043e \u043a\u0443\u0434\u0430 \u0445\u043e\u0434\u0438\u0442 \u0438 \u043a\u0430\u043a \u0440\u043e\u0443\u0442\u0438\u0442\u0441\u044f. L\u00d7Box \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u043b\u044e\u0434\u044f\u043c, \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e matching&#8217;\u0430\u0442\u044c conn_id&#8217;\u044b \u043c\u0435\u0436\u0434\u0443 log-\u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1033178\/\">https:\/\/habr.com\/ru\/articles\/1033178\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0434\u0435\u0431\u0430\u0436\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u00abTinkoff Investments \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 VPN\u00bb \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f, split-routing \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0421\u0438\u043c\u043f\u0442\u043e\u043c: app \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f, \u043d\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f, login \u0432\u0438\u0441\u0438\u0442. \u0427\u0435\u0440\u0435\u0437 30 \u043c\u0438\u043d\u0443\u0442 \u0432\u043e\u0437\u043d\u0438 \u0441\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438 \/state, \/connections, \/logs \u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e matching&#8217;\u0430 conn_id&#8217;\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u043f\u0440\u043e\u044f\u0441\u043d\u0438\u043b\u0430\u0441\u044c.\u0427\u0430\u0441\u0442\u044c \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0432\u0438\u0434\u0430 *.t-bank-app.ru \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043c\u0430\u0442\u0447\u0438\u0442\u0441\u044f \u0432 \u043c\u043e\u0439 ru-domains rule_set \u0438 \u0438\u0434\u0451\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u041d\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 CNAME \u043d\u0430 *.trbcdn.net (TLD .net!) \u2014 \u044d\u0442\u043e\u0442 target \u0432 ru-domains \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442, \u0438 sing-box \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 bypass-VPN \u0432 \u041f\u043e\u043b\u044c\u0448\u0443. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f split: \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0443\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e IP, \u0447\u0430\u0441\u0442\u044c \u2014 \u0441 \u043f\u043e\u043b\u044c\u0441\u043a\u043e\u0433\u043e. Bank-backend, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 session \u043a source-IP \/ fingerprint&#8217;\u0443, \u0432\u0438\u0434\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c auth state.\u0421\u0438\u043c\u043f\u0442\u043e\u043c \u2014 \u00ablogin \u0437\u0430\u0432\u0438\u0441\u00bb, \u043a\u043e\u0440\u0435\u043d\u044c \u2014 domain-level split routing \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\u0421\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e: \u0442\u0430\u043a\u0430\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c 30 \u043c\u0438\u043d\u0443\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 L\u00d7Box (\u043c\u043e\u0439 Android-\u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430 sing-box, open source) \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0444\u0438\u0447\u0430 \u2014 Per-app traffic profiler.Pick app \u2192 \u25b6 Record \u2192 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2192 \u0447\u0438\u0442\u0430\u0435\u0448\u044c Domains tab. \u0412\u0438\u0434\u043d\u043e \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c *.t-bank-app.ru \u0443\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 direct-out, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u2014 \u0447\u0435\u0440\u0435\u0437 vpn-1. C\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0433\u0434\u0435 \u043f\u0440\u043e\u0432\u0430\u043b \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e packet capture, root&#8217;\u0430, \u0432\u043d\u0435\u0448\u043d\u0438\u0445 tools.\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435\u0421\u0435\u0439\u0447\u0430\u0441 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u043c \u0440\u0430\u043d\u0435\u0435, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0445\u043e\u0442\u044f\u0442 \u0437\u043d\u0430\u0442\u044c \u043a\u0443\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043a\u0430\u043a\u043e\u0435 \u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438.\u0422\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f split-routing VPN&#8217;\u0430:\u0414\u0435\u0431\u0430\u0433 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430. \u00abX \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 VPN\u00bb \u2014 flagship-\u043a\u0435\u0439\u0441. \u041a\u043e\u0440\u0435\u043d\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0434\u0438\u043d: \u0434\u043e\u043c\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 RU, \u043d\u043e CNAME \u0443\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 CDN \u0441 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c TLD, \u0438 rule_set \u043d\u0435 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442. \u0411\u0435\u0437 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 CNAME-chain&#8217;\u0430 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0432.Privacy audit. \u00ab\u041a\u0443\u0434\u0430 \u0441\u0442\u0443\u0447\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435?\u00bb \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u043e\u0431\u044a\u0451\u043c\u0443 \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0417\u0430\u043c\u0435\u0447\u0430\u0435\u0448\u044c \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0435 \u2014 \u043a\u043e\u043f\u0430\u0435\u0448\u044c\u0441\u044f \u0432 outbound&#8217;\u0435, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0448\u044c.\u0414\u0435\u0431\u0430\u0433 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u00ab\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442?\u00bb \u2014 \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u0432 \u043a\u0430\u043a\u043e\u043c outbound&#8217;\u0435 \u043b\u0435\u0436\u0438\u0442 \u0442\u0440\u0430\u0444\u0438\u043a, \u0435\u0441\u0442\u044c \u043b\u0438 DNS retry&#8217;\u0438, \u043d\u0435 \u0432\u0438\u0441\u0438\u0442 \u043b\u0438 \u0432\u0441\u0451 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c IP.\u041d\u0430 \u0440\u044b\u043d\u043a\u0435 Android-VPN-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 routing chain per-app \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. PCAPDroid \u0434\u0435\u043b\u0430\u0435\u0442 packet capture (\u043d\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0440\u043e\u0443\u0442\u0438\u043d\u0433). NetGuard \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 (\u043d\u043e \u043d\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u0443\u0435\u0442). AdGuard \u0432\u0438\u0434\u0438\u0442 DNS (\u043d\u043e \u043d\u0435 outbound). Wireshark \u2014 \u044d\u0442\u043e \u0434\u0435\u0441\u043a\u0442\u043e\u043f.\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c sing-box \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 VPN-engine, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0438\u0448\u0435\u0442 \u0432 \u043b\u043e\u0433\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 DNS-\u0440\u0435\u0437\u043e\u043b\u0432\u044b \u0441 CNAME chain&#8217;\u043e\u043c, package_name \u043f\u043e conn_id \u0438 outbound chain. \u042d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u043e \u043f\u043e\u043b\u043a\u0430\u043c.\u041a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043eSingleton-\u0441\u0435\u0440\u0432\u0438\u0441 TrafficProfiler (Dart, ChangeNotifier) \u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u043d\u0443 active session + ring-buffer \u043d\u0430 5 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u0445. \u0412\u0441\u0451 in-memory \u2014 \u043d\u0430 kill \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 \u0441\u0442\u0438\u0440\u0430\u044e\u0442\u0441\u044f. Persist \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f: \u0444\u0438\u0447\u0430 diagnostic-only, \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f, \u0446\u0435\u043d\u0430 schema\/migration&#8217;\u043e\u0432 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 value.\u0414\u0432\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445:              \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510              \u2502  TrafficProfiler (singleton)            \u2502              \u2502   _active: Session?  _completed: Q[5]   \u2502              \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                     \u25b2                    \u25b2        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510        \u2502 A: log stream       \u2502  \u2502 B: \/connections poll       \u2502        \u2502  AppLog (core src)  \u2502  \u2502  Clash API every 2s        \u2502        \u2502  ts-diff drain      \u2502  \u2502  diff vs prev snapshot     \u2502        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a A \u2014 sing-box log stream \u0447\u0435\u0440\u0435\u0437 native EventChannel lxbox\/coreLog \u2192 AppLog (\u043c\u043e\u0439 per-source ring-buffer \u0434\u043b\u044f \u043b\u043e\u0433\u043e\u0432) \u2192 TrafficProfiler listener. \u041f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u0441\u0442\u0440\u043e\u043a:INFO[N] [&lt;conn_id&gt; &lt;Nms&gt;] router: found package name: &lt;pkg&gt;INFO[N] [&lt;conn_id&gt; &lt;Nms&gt;] dns: exchanged|cached &lt;type&gt; &lt;name&gt;. &lt;ttl&gt; IN &lt;type&gt; &lt;data&gt;INFO[N] [&lt;conn_id&gt; &lt;Nms&gt;] dns: exchange failed for &lt;host&gt;: &lt;reason&gt;Per-conn-id accumulator (_DnsAccumulator) \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 CNAME chain \u0438 \u044d\u043c\u0438\u0442\u0438\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 dnsResolve event&#8217;\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u043c domain&#8217;\u043e\u043c, \u0441\u043f\u0438\u0441\u043a\u043e\u043c CNAME hops \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c IP.\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a B \u2014 Clash API polling \/connections \u043a\u0430\u0436\u0434\u044b\u0435 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430 session active \u2014 battery-friendly). Diff \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c snapshot&#8217;\u043e\u043c \u0434\u0430\u0451\u0442 tcpOpen \/ tcpClose \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 bytes, chains, host, IP, port. \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e metadata.process \u0438\u043b\u0438 metadata.processPath \u043f\u043e\u0441\u043b\u0435 strip&#8217;\u0430 UID-\u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430 (\u0442\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 &#171;ru.tinkoff.investing (10364)&#187;, picker \u043e\u0442\u0434\u0430\u0451\u0442 \u0447\u0438\u0441\u0442\u044b\u0439 package).Aggregates byDomain \/ byIp \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f on-demand \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 (sub-tab views). Connection-issue \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442 \u26a0 \u043d\u0430 event&#8217;\u0430\u0445 \u2014 \u0434\u0432\u0430 locale-\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u0430:Issue\u0423\u0441\u043b\u043e\u0432\u0438\u0435DNS timeoutsing-box \u043b\u043e\u0433 dns: exchange failed &#8230; \u2014 \u043f\u0440\u044f\u043c\u043e\u0439 engine-\u0441\u0438\u0433\u043d\u0430\u043b, \u043d\u0435 heuristicTCP RST earlyconn closed \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 1\u0441, \u21910 \u21930 \u0431\u0430\u0439\u0442 \u2014 heuristic \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438\/RST\/unreachableMemory bounds \u2014 50000 events \u043d\u0430 session \u0438\u043b\u0438 3-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 sliding window (\u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435). _completed ring-buffer FIFO-evict&#8217;\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e. Conn-id maps GC&#8217;\u0430\u0442\u0441\u044f \u043f\u043e 30-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u043c\u0443 TTL \u043a\u043e\u0433\u0434\u0430 map &gt; 256 entries.UI \u2014 4 sub-tab&#8217;\u0430:Live \u2014 newest-first \u0441\u0442\u0440\u0438\u043c events \u0441 \u0446\u0432\u0435\u0442\u043d\u044b\u043c\u0438 kind-\u043c\u0435\u0442\u043a\u0430\u043c\u0438 (DNS\/TCP\/UDP) \u0438 inline-\u043f\u043e\u043a\u0430\u0437\u043e\u043c CNAME chain + outbound chain \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u043c event&#8217;\u043e\u043cDomains \u2014 aggregated \u043f\u043e domain&#8217;\u0443, sorted by bytes, \u0441 search-\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u043f\u043e domain || ip || cname-target. \u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 row&#8217;\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 CNAME chain, \u0432\u0441\u0435 IPs, outbound, issues (\u26a0)IPs \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043e IP. \u041f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f hostless \u043a\u043e\u043d\u043d&#8217;\u043e\u0432 (\u0431\u0435\u0437 SNI sniffing) \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 IP \u0438\u0437 threat-feed&#8217;\u0430Connections \u2014 per-conn timeline \u0441 inline-expand: CNAME, all IPs, issues (\u26a0), \u043a\u043d\u043e\u043f\u043a\u0430 [View in Domains \u2192] \u0441 \u0430\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c + autofill search&#8217;\u0430Recording \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u044f \u0432\u044b\u0448\u0435\u043b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 (singleton). \u041d\u0430 HomeScreen \u0432 traffic bar \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u26a1-chip \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 package name&#8217;\u0430 \u2014 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440; tap \u2192 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0432 Per-app tab. \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e manual STOP, force-stop \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 start \u043d\u043e\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438.\u0413\u0440\u0430\u0431\u043b\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b\u0418\u0437 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 spec&#8217;\u0435, \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443\u0448\u043b\u043e \u043d\u0430 \u0448\u0442\u0443\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b \u0438\u0437 \u0434\u0438\u0437\u0430\u0439\u043d\u0430. \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0441\u0432\u043e\u0434\u043a\u043e\u0439 \u2014 \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043d\u0430\u0439\u0434\u0451\u0442 \u0432 [lib\/services\/traffic_profiler.dart](https:\/\/github.com\/Leadaxe\/LxBox\/blob\/main\/app\/lib\/services\/traffic_profiler.dart) \u0438 \u00a7044 spec:UID-\u0441\u0443\u0444\u0444\u0438\u043a\u0441 \u0432 metadata.process. Sing-box \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 &#171;ru.tinkoff.investing&#187;, \u0430 &#171;ru.tinkoff.investing (10364)&#187; \u2014 pid \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445. \u0411\u0435\u0437 strip&#8217;\u0430 \u043d\u0438 \u043e\u0434\u043d\u0430 conn&#8217;\u0446\u0438\u044f \u043d\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a target session&#8217;\u0443. \u0417\u0430\u043e\u0434\u043d\u043e \u0441\u044e\u0440\u043f\u0440\u0438\u0437 \u2014 metadata.process \u0447\u0430\u0449\u0435 null, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 package \u0436\u0438\u0432\u0451\u0442 \u0432 metadata.processPath.Ring-buffer overflow \u043b\u043e\u043c\u0430\u0435\u0442 length-diff scan. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 drain \u043b\u043e\u0433\u043e\u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b entries.length \u0441 \u043f\u0440\u043e\u0448\u043b\u044b\u043c snapshot&#8217;\u043e\u043c. \u041c\u043e\u0439 AppLog \u0438\u043c\u0435\u0435\u0442 cap=500 \u0434\u043b\u044f core source \u2014 \u043a\u043e\u0433\u0434\u0430 busy traffic \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440, \u043d\u043e\u0432\u044b\u0435 entries \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044e\u0442 \u0441\u0442\u0430\u0440\u044b\u0435, \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 500, length-diff \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439. DNS-events \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 1-2 \u043c\u0438\u043d\u0443\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 recording&#8217;\u0430. \u0424\u0438\u043a\u0441 \u2014 timestamp-diff (\u0445\u0440\u0430\u043d\u0438\u0442\u044c ts \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e entry, \u0430 \u043d\u0435 \u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441).dns: cached \u043d\u0443\u0436\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 dns: exchanged. Sing-box \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0435 \u0444\u043e\u0440\u043c\u044b; \u0443 \u0437\u0430\u043d\u044f\u0442\u044b\u0445 apps \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0437\u043e\u043b\u0432\u043e\u0432 \u2014 cache-hit&#8217;\u044b. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f regex-\u043c\u0430\u0441\u043a\u0430 \u043b\u043e\u0432\u0438\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e exchanged \u2014 DNS-\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u044b\u043b \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 (TCP-conn&#8217;\u044b \u0435\u0441\u0442\u044c, DNS-events \u043d\u0435\u0442).Domain attribution \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 domain, \u043d\u0435 \u043d\u0430 CNAME-target. Sing-box \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442 CNAME chain \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e: CNAME a \u2192 b, \u043f\u043e\u0442\u043e\u043c A b \u2192 ip. \u0415\u0441\u043b\u0438 \u044d\u043c\u0438\u0442\u0438\u0442\u044c event \u0441 domain = \u0438\u043c\u0435\u043d\u0435\u043c \u0438\u0437 A-\u0437\u0430\u043f\u0438\u0441\u0438 \u2014 \u0432 Domains tab \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f b (CDN-\u0445\u043e\u0441\u0442), \u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e-\u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 a \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442. \u0424\u0438\u043a\u0441 \u2014 per-conn-id accumulator \u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0438\u043c\u044f, CNAME-targets \u043a\u043e\u043f\u044f\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u043a chain.Connections click target \u2014 \u0442\u043e\u043b\u044c\u043a\u043e header. Inline-expand \u043d\u0430 conn row \u0434\u0435\u043b\u0430\u043b \u0432\u0435\u0441\u044c tile (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e) \u043a\u043b\u0438\u043a\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c. \u0422\u0430\u043f\u0430\u0435\u0448\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00abView in Domains\u00bb \u0438\u043b\u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c CNAME \u2014 row \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0417\u0430\u0432\u0435\u0440\u043d\u0443\u043b InkWell \u0442\u043e\u043b\u044c\u043a\u043e \u0432 header&#8217;\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c, expanded section \u0436\u0438\u0432\u0451\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.Debug API \u2014 \u0434\u043b\u044f \u0433\u043b\u0430\u0437 \u0438 \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u0432\u0412\u0441\u0435 controls UI \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0447\u0435\u0440\u0435\u0437 localhost HTTP API (Bearer-token authenticated, bind \u043d\u0430 127.0.0.1, anti-rebinding host-check). \u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u2014 \/profiler\/start, \/profiler\/stop, \/profiler\/active, \/profiler\/session\/&lt;id&gt;?include=domains,ips,events, \/profiler\/sessions, \u043f\u043b\u044e\u0441 SSE-\u0441\u0442\u0440\u0438\u043c \/profiler\/stream \u0434\u043b\u044f real-time event feed&#8217;\u0430. \u041f\u043e\u043b\u043d\u0430\u044f reference \u2014 \u0432 [docs\/api\/debug-api-reference.md](https:\/\/github.com\/Leadaxe\/LxBox\/blob\/main\/docs\/api\/debug-api-reference.md).\u042d\u0442\u043e \u043f\u0440\u043e \u0441\u0435\u0431\u044f \u043a\u0440\u0443\u0442\u043e, \u043d\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2014 \u0434\u0440\u0443\u0433\u0430\u044f. \u042d\u0442\u043e API \u043d\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f, \u044d\u0442\u043e API \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u0430.\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443 \u043c\u0435\u043d\u044f \u0441\u0435\u0439\u0447\u0430\u0441:\u0412\u0442\u044b\u043a\u0430\u044e \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0432 \u043a\u0430\u0431\u0435\u043b\u044c, \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e adb forward tcp:9270 tcp:9269 (\u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u2014 \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 scripts\/ensure-wifi-adb.sh \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 wifi \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438)\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044e Cursor \/ Claude Code \/ \u043b\u044e\u0431\u043e\u0439 coding agent \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 L\u00d7Box\u041f\u0438\u0448\u0443: \u00abTinkoff Investments login \u0432\u0438\u0441\u043d\u0435\u0442, \u0440\u0430\u0437\u0431\u0435\u0440\u0438\u0441\u044c\u00bb \u2014 \u0438 \u043a\u0438\u0434\u0430\u044e \u0442\u043e\u043a\u0435\u043d Debug API \u0438\u0437 app&#8217;\u0430\u0418\u0434\u0443 \u043f\u0438\u0442\u044c \u0447\u0430\u0439\u0414\u0430\u043b\u044c\u0448\u0435 \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c:\u0414\u0451\u0440\u0433\u0430\u0435\u0442 \/profiler\/start \u0441 package=ru.tinkoff.investing\u041f\u0440\u043e\u0441\u0438\u0442 \u043c\u0435\u043d\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 app&#8217;\u0435 (\u0442\u0430\u043f\u043d\u0443\u0442\u044c Login)\u041f\u0443\u043b\u043b\u0438\u0442 \/profiler\/session\/&lt;id&gt;?include=domains,events\u0412\u0438\u0434\u0438\u0442 split: 80% \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 direct-out, 3 \u2014 \u0447\u0435\u0440\u0435\u0437 vpn-1 (\u043d\u0435\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 routing \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e app&#8217;\u0430 \u2014 \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442 auth)\u0420\u0430\u0441\u043a\u0430\u043f\u044b\u0432\u0430\u0435\u0442 CNAME chain \u0432 \u0441\u0430\u043c\u043e\u0439 session JSON&#8217;\u0435\u041f\u0438\u0448\u0435\u0442: \u00ab\u041a\u043e\u0440\u0435\u043d\u044c \u2014 *.trbcdn.net \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 .net TLD, \u0432 ru-domains rule_set \u0435\u0433\u043e \u043d\u0435\u0442, \u0434\u043e\u0431\u0430\u0432\u044c suffix\u00bb\u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u2014 \u0441\u0430\u043c \u0434\u0435\u043b\u0430\u0435\u0442 PR \u0441 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 template&#8217;\u0430 \u0447\u0435\u0440\u0435\u0437 Edit-tool, \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442 \u0442\u0435\u0441\u0442\u044b\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0441\u044c \u2014 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 summary \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 git diff, \u0438\u043d\u043e\u0433\u0434\u0430 \u0443\u0436\u0435 \u0437\u0435\u043b\u0451\u043d\u044b\u0439 CI. \u0412\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u2014 \u043d\u0430 \u0447\u0430\u0439.\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 structured: agent \u0447\u0438\u0442\u0430\u0435\u0442 \u043d\u0435 grep \u043f\u043e \u043b\u043e\u0433\u0430\u043c, \u0430 typed JSON \u0441 domain \/ ip \/ cname_chain \/ outbound_chain \/ issues \u043f\u043e\u043b\u044f\u043c\u0438. SSE-\u0441\u0442\u0440\u0438\u043c (fire-and-forget, \u0431\u0435\u0437 Last-Event-ID reconnect \u2014 overkill \u0434\u043b\u044f in-app single-user use case&#8217;\u0430) \u0434\u0430\u0451\u0442 live-feed \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043d\u0435 \u043f\u0443\u043b\u043b\u0438\u0442\u044c, \u0430 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f.\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0444\u0438\u0447\u0443 Per-app traffic profiler \u044f \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u0438 \u0440\u0430\u0434\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u043b&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-479091","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479091","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=479091"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479091\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=479091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=479091"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=479091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}