From 755ce46b73bba1c3d208e6ba6abdc9442cfe90a6 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Wed, 7 Oct 2026 12:24:04 +0000 Subject: [PATCH] runtime: publish SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1 --- ...64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.json | 38 +++ ...-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.txt | 234 ++++++++++++++++++ runtime/latest.json | 16 +- runtime/latest.txt | 207 ++++++++++++++-- 4 files changed, 470 insertions(+), 25 deletions(-) create mode 100644 runtime/history/SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.json create mode 100644 runtime/history/SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.txt diff --git a/runtime/history/SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.json b/runtime/history/SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.json new file mode 100644 index 00000000..05fa33dd --- /dev/null +++ b/runtime/history/SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "windows-dacha-64022-bridge-exact-source-rca", + "started_at_utc": "2026-10-07T12:24:03Z", + "finished_at_utc": "2026-10-07T12:24:03Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "29c3f3ddfe92bc5d9c1bb03713be42ea2a98feb62a5dfc18888c66feaec02ee3", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "66b16d6cb988213a72ed70a9ed3e7d0cce65c7f44b3752973ecd7e161e40042b", + "sanitized_output_sha256": "66b16d6cb988213a72ed70a9ed3e7d0cce65c7f44b3752973ecd7e161e40042b", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA=V1\nMODE=read-only\nNO_MUTATION=true\nWINDOWS_LOCAL_INSPECT_RC=0\nWINDOWS_EVIDENCE_PRESENT=true\nWINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA=V1\nMODE=read-only\nNO_MUTATION=true\nSTARTUP_MATCH_COUNT=2\nREC|STARTUP|IDX=1|SCRIPT_RESOLVED=true|ARGS_SANITIZED=-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File \"\" -ListenPort 64022 -SocksPort 64020\nREC|STARTUP|IDX=2|SCRIPT_RESOLVED=true|ARGS_SANITIZED=-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File \"\" -ListenPort 64022 -SocksPort 64020\nBRIDGE_PATH_COUNT=1\nREC|BRIDGE_FILE|BASENAME=bridge.ps1|SHA256=d6ed793d7cfd3ec4894ff766f1c20a5de80cf3be6615a27ae4dc0f836da4cf0e|SIZE=5696|EXPECTED_SHA_MATCH=true\nEXACT_BRIDGE_SHA_MATCH_COUNT=1\nBRIDGE_LINE_COUNT=162\nSRC|001|param([int]$ListenPort=64021,[int]$SocksPort=64020)\nSRC|002|$ErrorActionPreference='Stop'\nSRC|003|$src=@\"\nSRC|004|using System;\nSRC|005|using System.IO;\nSRC|006|using System.Net;\nSRC|007|using System.Net.Sockets;\nSRC|008|using System.Text;\nSRC|009|using System.Threading.Tasks;\nSRC|010|using System.Collections.Generic;\nSRC|011|\nSRC|012|public static class W2HttpSocksBridge {\nSRC|013| static int SocksPort;\nSRC|014|\nSRC|015| static byte[] ReadHeaders(NetworkStream s, out int headerEnd) {\nSRC|016| var buf = new List(4096);\nSRC|017| int state=0;\nSRC|018| while (buf.Count < 65536) {\nSRC|019| int b=s.ReadByte();\nSRC|020| if (b < 0) break;\nSRC|021| buf.Add((byte)b);\nSRC|022| if (state==0 && b==13) state=1;\nSRC|023| else if (state==1 && b==10) state=2;\nSRC|024| else if (state==2 && b==13) state=3;\nSRC|025| else if (state==3 && b==10) { headerEnd=buf.Count; return buf.ToArray(); }\nSRC|026| else state=(b==13)?1:0;\nSRC|027| }\nSRC|028| headerEnd=buf.Count;\nSRC|029| return buf.ToArray();\nSRC|030| }\nSRC|031|\nSRC|032| static TcpClient ConnectSocks(string host, int port) {\nSRC|033| var c=new TcpClient();\nSRC|034| c.Connect(IPAddress.Loopback,SocksPort);\nSRC|035| var s=c.GetStream();\nSRC|036| s.Write(new byte[]{5,1,0},0,3);\nSRC|037| byte[] r=new byte[2];\nSRC|038| if (s.Read(r,0,2)!=2 || r[0]!=5 || r[1]!=0) throw new IOException(\"SOCKS_GREETING\");\nSRC|039| byte[] hb=Encoding.ASCII.GetBytes(host);\nSRC|040| if (hb.Length<1 || hb.Length>255) throw new IOException(\"SOCKS_HOST\");\nSRC|041| using(var ms=new MemoryStream()) {\nSRC|042| ms.WriteByte(5); ms.WriteByte(1); ms.WriteByte(0); ms.WriteByte(3); ms.WriteByte((byte)hb.Length);\nSRC|043| ms.Write(hb,0,hb.Length); ms.WriteByte((byte)((port>>8)&255)); ms.WriteByte((byte)(port&255));\nSRC|044| var q=ms.ToArray(); s.Write(q,0,q.Length);\nSRC|045| }\nSRC|046| byte[] h4=new byte[4];\nSRC|047| if (s.Read(h4,0,4)!=4 || h4[0]!=5 || h4[1]!=0) throw new IOException(\"SOCKS_CONNECT\");\nSRC|048| int remain=0;\nSRC|049| if (h4[3]==1) remain=4+2;\nSRC|050| else if (h4[3]==4) remain=16+2;\nSRC|051| else if (h4[3]==3) {\nSRC|052| int len=s.ReadByte(); if(len<0) throw new IOException(\"SOCKS_REPLY\");\nSRC|053| remain=len+2;\nSRC|054| } else throw new IOException(\"SOCKS_ATYP\");\nSRC|055| byte[] junk=new byte[remain];\nSRC|056| int off=0;\nSRC|057| while(off0) {\nSRC|066| host=target.Substring(1,e-1);\nSRC|067| if(e+10 && target.IndexOf(':')==k) {\nSRC|073| int p;\nSRC|074| if(int.TryParse(target.Substring(k+1),out p)) { host=target.Substring(0,k); port=p; }\nSRC|075| }\nSRC|076| }\nSRC|077|\nSRC|078| static void Relay(TcpClient a, TcpClient b) {\nSRC|079| var sa=a.GetStream(); var sb=b.GetStream();\nSRC|080| var t1=sa.CopyToAsync(sb);\nSRC|081| var t2=sb.CopyToAsync(sa);\nSRC|082| try { Task.WaitAny(t1,t2); } catch {}\nSRC|083| try { a.Close(); } catch {}\nSRC|084| try { b.Close(); } catch {}\nSRC|085| }\nSRC|086|\nSRC|087| static void Handle(TcpClient client) {\nSRC|088| TcpClient upstream=null;\nSRC|089| try {\nSRC|090| var cs=client.GetStream();\nSRC|091| int hend;\nSRC|092| byte[] raw=ReadHeaders(cs,out hend);\nSRC|093| if(raw.Length==0) return;\nSRC|094| string header=Encoding.ASCII.GetString(raw,0,hend);\nSRC|095| string[] lines=header.Split(new string[]{\"\\r\\n\"},StringSplitOptions.None);\nSRC|096| string[] first=lines[0].Split(new char[]{' '},3);\nSRC|097| if(first.Length<3) return;\nSRC|098| string method=first[0], target=first[1], version=first[2];\nSRC|099| string host=null; int port=80;\nSRC|100|\nSRC|101| if(method.Equals(\"CONNECT\",StringComparison.OrdinalIgnoreCase)) {\nSRC|102| ParseHostPort(target,443,out host,out port);\nSRC|103| upstream=ConnectSocks(host,port);\nSRC|104| byte[] ok=Encoding.ASCII.GetBytes(\"HTTP/1.1 200 Connection Established\\r\\nProxy-Agent: Workers2\\r\\n\\r\\n\");\nSRC|105| cs.Write(ok,0,ok.Length);\nSRC|106| Relay(client,upstream);\nSRC|107| return;\nSRC|108| }\nSRC|109|\nSRC|110| Uri u;\nSRC|111| string path=target;\nSRC|112| if(Uri.TryCreate(target,UriKind.Absolute,out u)) {\nSRC|113| host=u.Host; port=u.IsDefaultPort ? (u.Scheme==\"https\"?443:80) : u.Port;\nSRC|114| path=String.IsNullOrEmpty(u.PathAndQuery)?\"/\":u.PathAndQuery;\nSRC|115| } else {\nSRC|116| foreach(string line in lines) {\nSRC|117| if(line.StartsWith(\"Host:\",StringComparison.OrdinalIgnoreCase)) {\nSRC|118| string hv=line.Substring(5).Trim();\nSRC|119| ParseHostPort(hv,80,out host,out port);\nSRC|120| break;\nSRC|121| }\nSRC|122| }\nSRC|123| }\nSRC|124| if(String.IsNullOrEmpty(host)) return;\nSRC|125| upstream=ConnectSocks(host,port);\nSRC|126| var us=upstream.GetStream();\nSRC|127| var sb=new StringBuilder();\nSRC|128| sb.Append(method).Append(\" \").Append(path).Append(\" \").Append(version).Append(\"\\r\\n\");\nSRC|129| for(int i=1;iHandle(c));\nSRC|156| }\nSRC|157| }\nSRC|158|}\nSRC|159|\"@\nSRC|160|Add-Type -TypeDefinition $src -Language CSharp\nSRC|161|[W2HttpSocksBridge]::Run($ListenPort,$SocksPort)\nSRC|162|\nPORT64022_LISTENER_COUNT=1\nPORT64022_OWNER_PID_COUNT=1\nOWNER_NAME=powershell.exe\nOWNER_SESSION_ID=1\nOWNER_COMMAND_SANITIZED=\"\" -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File \"\" -ListenPort 64022 -SocksPort 64020\nOWNER_CMD_HAS_BRIDGE=true\nOWNER_CMD_HAS_64020=true\nOWNER_CMD_HAS_64022=true\nREC|PROTOCOL|MODE=SOCKS5|IOBIT_RC=28|GOOGLE_RC=28\nREC|PROTOCOL|MODE=SOCKS4A|IOBIT_RC=28|GOOGLE_RC=28\nREC|PROTOCOL|MODE=HTTP|IOBIT_RC=0|GOOGLE_RC=0\nCONTROL_64020_IOBIT_RC=0\nCONTROL_64020_GOOGLE_RC=0\nWINDOWS_64022_EXACT_SOURCE_COMPLETE=true\nPVE_UNIT_ACTIVE=active\nPVE_UNIT_ENABLED=enabled\nPVE64020_LISTENER_COUNT=1\nDECISION=HOLD_WINDOWS_64022_EXACT_BRIDGE_SOURCE_INCOMPLETE\nNEXT_GATE=NO_MUTATION_UNTIL_EXACT_BRIDGE_PROVEN\nTASK_RESULT=WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.txt b/runtime/history/SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.txt new file mode 100644 index 00000000..69f30261 --- /dev/null +++ b/runtime/history/SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1.txt @@ -0,0 +1,234 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=windows-dacha-64022-bridge-exact-source-rca +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=29c3f3ddfe92bc5d9c1bb03713be42ea2a98feb62a5dfc18888c66feaec02ee3 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=66b16d6cb988213a72ed70a9ed3e7d0cce65c7f44b3752973ecd7e161e40042b +SANITIZED_OUTPUT_SHA256=66b16d6cb988213a72ed70a9ed3e7d0cce65c7f44b3752973ecd7e161e40042b +OUTPUT_BEGIN +WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA=V1 +MODE=read-only +NO_MUTATION=true +WINDOWS_LOCAL_INSPECT_RC=0 +WINDOWS_EVIDENCE_PRESENT=true +WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA=V1 +MODE=read-only +NO_MUTATION=true +STARTUP_MATCH_COUNT=2 +REC|STARTUP|IDX=1|SCRIPT_RESOLVED=true|ARGS_SANITIZED=-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "" -ListenPort 64022 -SocksPort 64020 +REC|STARTUP|IDX=2|SCRIPT_RESOLVED=true|ARGS_SANITIZED=-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "" -ListenPort 64022 -SocksPort 64020 +BRIDGE_PATH_COUNT=1 +REC|BRIDGE_FILE|BASENAME=bridge.ps1|SHA256=d6ed793d7cfd3ec4894ff766f1c20a5de80cf3be6615a27ae4dc0f836da4cf0e|SIZE=5696|EXPECTED_SHA_MATCH=true +EXACT_BRIDGE_SHA_MATCH_COUNT=1 +BRIDGE_LINE_COUNT=162 +SRC|001|param([int]$ListenPort=64021,[int]$SocksPort=64020) +SRC|002|$ErrorActionPreference='Stop' +SRC|003|$src=@" +SRC|004|using System; +SRC|005|using System.IO; +SRC|006|using System.Net; +SRC|007|using System.Net.Sockets; +SRC|008|using System.Text; +SRC|009|using System.Threading.Tasks; +SRC|010|using System.Collections.Generic; +SRC|011| +SRC|012|public static class W2HttpSocksBridge { +SRC|013| static int SocksPort; +SRC|014| +SRC|015| static byte[] ReadHeaders(NetworkStream s, out int headerEnd) { +SRC|016| var buf = new List(4096); +SRC|017| int state=0; +SRC|018| while (buf.Count < 65536) { +SRC|019| int b=s.ReadByte(); +SRC|020| if (b < 0) break; +SRC|021| buf.Add((byte)b); +SRC|022| if (state==0 && b==13) state=1; +SRC|023| else if (state==1 && b==10) state=2; +SRC|024| else if (state==2 && b==13) state=3; +SRC|025| else if (state==3 && b==10) { headerEnd=buf.Count; return buf.ToArray(); } +SRC|026| else state=(b==13)?1:0; +SRC|027| } +SRC|028| headerEnd=buf.Count; +SRC|029| return buf.ToArray(); +SRC|030| } +SRC|031| +SRC|032| static TcpClient ConnectSocks(string host, int port) { +SRC|033| var c=new TcpClient(); +SRC|034| c.Connect(IPAddress.Loopback,SocksPort); +SRC|035| var s=c.GetStream(); +SRC|036| s.Write(new byte[]{5,1,0},0,3); +SRC|037| byte[] r=new byte[2]; +SRC|038| if (s.Read(r,0,2)!=2 || r[0]!=5 || r[1]!=0) throw new IOException("SOCKS_GREETING"); +SRC|039| byte[] hb=Encoding.ASCII.GetBytes(host); +SRC|040| if (hb.Length<1 || hb.Length>255) throw new IOException("SOCKS_HOST"); +SRC|041| using(var ms=new MemoryStream()) { +SRC|042| ms.WriteByte(5); ms.WriteByte(1); ms.WriteByte(0); ms.WriteByte(3); ms.WriteByte((byte)hb.Length); +SRC|043| ms.Write(hb,0,hb.Length); ms.WriteByte((byte)((port>>8)&255)); ms.WriteByte((byte)(port&255)); +SRC|044| var q=ms.ToArray(); s.Write(q,0,q.Length); +SRC|045| } +SRC|046| byte[] h4=new byte[4]; +SRC|047| if (s.Read(h4,0,4)!=4 || h4[0]!=5 || h4[1]!=0) throw new IOException("SOCKS_CONNECT"); +SRC|048| int remain=0; +SRC|049| if (h4[3]==1) remain=4+2; +SRC|050| else if (h4[3]==4) remain=16+2; +SRC|051| else if (h4[3]==3) { +SRC|052| int len=s.ReadByte(); if(len<0) throw new IOException("SOCKS_REPLY"); +SRC|053| remain=len+2; +SRC|054| } else throw new IOException("SOCKS_ATYP"); +SRC|055| byte[] junk=new byte[remain]; +SRC|056| int off=0; +SRC|057| while(off0) { +SRC|066| host=target.Substring(1,e-1); +SRC|067| if(e+10 && target.IndexOf(':')==k) { +SRC|073| int p; +SRC|074| if(int.TryParse(target.Substring(k+1),out p)) { host=target.Substring(0,k); port=p; } +SRC|075| } +SRC|076| } +SRC|077| +SRC|078| static void Relay(TcpClient a, TcpClient b) { +SRC|079| var sa=a.GetStream(); var sb=b.GetStream(); +SRC|080| var t1=sa.CopyToAsync(sb); +SRC|081| var t2=sb.CopyToAsync(sa); +SRC|082| try { Task.WaitAny(t1,t2); } catch {} +SRC|083| try { a.Close(); } catch {} +SRC|084| try { b.Close(); } catch {} +SRC|085| } +SRC|086| +SRC|087| static void Handle(TcpClient client) { +SRC|088| TcpClient upstream=null; +SRC|089| try { +SRC|090| var cs=client.GetStream(); +SRC|091| int hend; +SRC|092| byte[] raw=ReadHeaders(cs,out hend); +SRC|093| if(raw.Length==0) return; +SRC|094| string header=Encoding.ASCII.GetString(raw,0,hend); +SRC|095| string[] lines=header.Split(new string[]{"\r\n"},StringSplitOptions.None); +SRC|096| string[] first=lines[0].Split(new char[]{' '},3); +SRC|097| if(first.Length<3) return; +SRC|098| string method=first[0], target=first[1], version=first[2]; +SRC|099| string host=null; int port=80; +SRC|100| +SRC|101| if(method.Equals("CONNECT",StringComparison.OrdinalIgnoreCase)) { +SRC|102| ParseHostPort(target,443,out host,out port); +SRC|103| upstream=ConnectSocks(host,port); +SRC|104| byte[] ok=Encoding.ASCII.GetBytes("HTTP/1.1 200 Connection Established\r\nProxy-Agent: Workers2\r\n\r\n"); +SRC|105| cs.Write(ok,0,ok.Length); +SRC|106| Relay(client,upstream); +SRC|107| return; +SRC|108| } +SRC|109| +SRC|110| Uri u; +SRC|111| string path=target; +SRC|112| if(Uri.TryCreate(target,UriKind.Absolute,out u)) { +SRC|113| host=u.Host; port=u.IsDefaultPort ? (u.Scheme=="https"?443:80) : u.Port; +SRC|114| path=String.IsNullOrEmpty(u.PathAndQuery)?"/":u.PathAndQuery; +SRC|115| } else { +SRC|116| foreach(string line in lines) { +SRC|117| if(line.StartsWith("Host:",StringComparison.OrdinalIgnoreCase)) { +SRC|118| string hv=line.Substring(5).Trim(); +SRC|119| ParseHostPort(hv,80,out host,out port); +SRC|120| break; +SRC|121| } +SRC|122| } +SRC|123| } +SRC|124| if(String.IsNullOrEmpty(host)) return; +SRC|125| upstream=ConnectSocks(host,port); +SRC|126| var us=upstream.GetStream(); +SRC|127| var sb=new StringBuilder(); +SRC|128| sb.Append(method).Append(" ").Append(path).Append(" ").Append(version).Append("\r\n"); +SRC|129| for(int i=1;iHandle(c)); +SRC|156| } +SRC|157| } +SRC|158|} +SRC|159|"@ +SRC|160|Add-Type -TypeDefinition $src -Language CSharp +SRC|161|[W2HttpSocksBridge]::Run($ListenPort,$SocksPort) +SRC|162| +PORT64022_LISTENER_COUNT=1 +PORT64022_OWNER_PID_COUNT=1 +OWNER_NAME=powershell.exe +OWNER_SESSION_ID=1 +OWNER_COMMAND_SANITIZED="" -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "" -ListenPort 64022 -SocksPort 64020 +OWNER_CMD_HAS_BRIDGE=true +OWNER_CMD_HAS_64020=true +OWNER_CMD_HAS_64022=true +REC|PROTOCOL|MODE=SOCKS5|IOBIT_RC=28|GOOGLE_RC=28 +REC|PROTOCOL|MODE=SOCKS4A|IOBIT_RC=28|GOOGLE_RC=28 +REC|PROTOCOL|MODE=HTTP|IOBIT_RC=0|GOOGLE_RC=0 +CONTROL_64020_IOBIT_RC=0 +CONTROL_64020_GOOGLE_RC=0 +WINDOWS_64022_EXACT_SOURCE_COMPLETE=true +PVE_UNIT_ACTIVE=active +PVE_UNIT_ENABLED=enabled +PVE64020_LISTENER_COUNT=1 +DECISION=HOLD_WINDOWS_64022_EXACT_BRIDGE_SOURCE_INCOMPLETE +NEXT_GATE=NO_MUTATION_UNTIL_EXACT_BRIDGE_PROVEN +TASK_RESULT=WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index b4a83031..05fa33dd 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-261007-WINDOWS-DACHA-64022-OWNER-SHAPE-RCA-99782R1", + "command_id": "SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "windows-dacha-64022-owner-shape-rca", - "started_at_utc": "2026-10-07T12:19:52Z", - "finished_at_utc": "2026-10-07T12:19:53Z", + "component": "windows-dacha-64022-bridge-exact-source-rca", + "started_at_utc": "2026-10-07T12:24:03Z", + "finished_at_utc": "2026-10-07T12:24:03Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "2727847ac01a9bccebd6a20c44fd420e4320470f3ad398de4b680d1c84a759f7", + "command_sha256": "29c3f3ddfe92bc5d9c1bb03713be42ea2a98feb62a5dfc18888c66feaec02ee3", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "39c69b18eea90932aa22dda702fb457f73dca990cf8c8d60f4ba526efd5f7cd1", - "sanitized_output_sha256": "39c69b18eea90932aa22dda702fb457f73dca990cf8c8d60f4ba526efd5f7cd1", + "raw_evidence_sha256": "66b16d6cb988213a72ed70a9ed3e7d0cce65c7f44b3752973ecd7e161e40042b", + "sanitized_output_sha256": "66b16d6cb988213a72ed70a9ed3e7d0cce65c7f44b3752973ecd7e161e40042b", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "WINDOWS_DACHA_64022_OWNER_SHAPE_RCA=V1\nMODE=read-only\nNO_MUTATION=true\nWINDOWS_LOCAL_INSPECT_RC=0\nWINDOWS_EVIDENCE_PRESENT=true\nWINDOWS_DACHA_64022_OWNER_SHAPE_RCA=V1\nMODE=read-only\nNO_MUTATION=true\nPORT64022_LISTENER_COUNT=1\nPORT64022_OWNER_PID_COUNT=1\nOWNER_NAME=powershell.exe\nOWNER_NAME_SSH=false\nOWNER_NAME_PLINK=false\nOWNER_NAME_POWERSHELL=true\nOWNER_SESSION_ID=1\nOWNER_PARENT_PID_HASH=\nOWNER_EXE_SHA256=9785001b0dcf755eddb8af294a373c0b87b2498660f724e76c4d53f9c217c7a3\nOWNER_COMMANDLINE_AVAILABLE=true\nPVE_UNIT_ACTIVE=active\nPVE_UNIT_ENABLED=enabled\nPVE64020_LISTENER_COUNT=1\nDECISION=HOLD_WINDOWS_64022_OWNER_SHAPE_INCOMPLETE\nNEXT_GATE=NO_MUTATION_UNTIL_OWNER_SHAPE_PROVEN\nTASK_RESULT=WINDOWS_DACHA_64022_OWNER_SHAPE_RCA\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-261007-WINDOWS-DACHA-64022-OWNER-SHAPE-RCA-99782R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" + "output": "WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA=V1\nMODE=read-only\nNO_MUTATION=true\nWINDOWS_LOCAL_INSPECT_RC=0\nWINDOWS_EVIDENCE_PRESENT=true\nWINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA=V1\nMODE=read-only\nNO_MUTATION=true\nSTARTUP_MATCH_COUNT=2\nREC|STARTUP|IDX=1|SCRIPT_RESOLVED=true|ARGS_SANITIZED=-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File \"\" -ListenPort 64022 -SocksPort 64020\nREC|STARTUP|IDX=2|SCRIPT_RESOLVED=true|ARGS_SANITIZED=-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File \"\" -ListenPort 64022 -SocksPort 64020\nBRIDGE_PATH_COUNT=1\nREC|BRIDGE_FILE|BASENAME=bridge.ps1|SHA256=d6ed793d7cfd3ec4894ff766f1c20a5de80cf3be6615a27ae4dc0f836da4cf0e|SIZE=5696|EXPECTED_SHA_MATCH=true\nEXACT_BRIDGE_SHA_MATCH_COUNT=1\nBRIDGE_LINE_COUNT=162\nSRC|001|param([int]$ListenPort=64021,[int]$SocksPort=64020)\nSRC|002|$ErrorActionPreference='Stop'\nSRC|003|$src=@\"\nSRC|004|using System;\nSRC|005|using System.IO;\nSRC|006|using System.Net;\nSRC|007|using System.Net.Sockets;\nSRC|008|using System.Text;\nSRC|009|using System.Threading.Tasks;\nSRC|010|using System.Collections.Generic;\nSRC|011|\nSRC|012|public static class W2HttpSocksBridge {\nSRC|013| static int SocksPort;\nSRC|014|\nSRC|015| static byte[] ReadHeaders(NetworkStream s, out int headerEnd) {\nSRC|016| var buf = new List(4096);\nSRC|017| int state=0;\nSRC|018| while (buf.Count < 65536) {\nSRC|019| int b=s.ReadByte();\nSRC|020| if (b < 0) break;\nSRC|021| buf.Add((byte)b);\nSRC|022| if (state==0 && b==13) state=1;\nSRC|023| else if (state==1 && b==10) state=2;\nSRC|024| else if (state==2 && b==13) state=3;\nSRC|025| else if (state==3 && b==10) { headerEnd=buf.Count; return buf.ToArray(); }\nSRC|026| else state=(b==13)?1:0;\nSRC|027| }\nSRC|028| headerEnd=buf.Count;\nSRC|029| return buf.ToArray();\nSRC|030| }\nSRC|031|\nSRC|032| static TcpClient ConnectSocks(string host, int port) {\nSRC|033| var c=new TcpClient();\nSRC|034| c.Connect(IPAddress.Loopback,SocksPort);\nSRC|035| var s=c.GetStream();\nSRC|036| s.Write(new byte[]{5,1,0},0,3);\nSRC|037| byte[] r=new byte[2];\nSRC|038| if (s.Read(r,0,2)!=2 || r[0]!=5 || r[1]!=0) throw new IOException(\"SOCKS_GREETING\");\nSRC|039| byte[] hb=Encoding.ASCII.GetBytes(host);\nSRC|040| if (hb.Length<1 || hb.Length>255) throw new IOException(\"SOCKS_HOST\");\nSRC|041| using(var ms=new MemoryStream()) {\nSRC|042| ms.WriteByte(5); ms.WriteByte(1); ms.WriteByte(0); ms.WriteByte(3); ms.WriteByte((byte)hb.Length);\nSRC|043| ms.Write(hb,0,hb.Length); ms.WriteByte((byte)((port>>8)&255)); ms.WriteByte((byte)(port&255));\nSRC|044| var q=ms.ToArray(); s.Write(q,0,q.Length);\nSRC|045| }\nSRC|046| byte[] h4=new byte[4];\nSRC|047| if (s.Read(h4,0,4)!=4 || h4[0]!=5 || h4[1]!=0) throw new IOException(\"SOCKS_CONNECT\");\nSRC|048| int remain=0;\nSRC|049| if (h4[3]==1) remain=4+2;\nSRC|050| else if (h4[3]==4) remain=16+2;\nSRC|051| else if (h4[3]==3) {\nSRC|052| int len=s.ReadByte(); if(len<0) throw new IOException(\"SOCKS_REPLY\");\nSRC|053| remain=len+2;\nSRC|054| } else throw new IOException(\"SOCKS_ATYP\");\nSRC|055| byte[] junk=new byte[remain];\nSRC|056| int off=0;\nSRC|057| while(off0) {\nSRC|066| host=target.Substring(1,e-1);\nSRC|067| if(e+10 && target.IndexOf(':')==k) {\nSRC|073| int p;\nSRC|074| if(int.TryParse(target.Substring(k+1),out p)) { host=target.Substring(0,k); port=p; }\nSRC|075| }\nSRC|076| }\nSRC|077|\nSRC|078| static void Relay(TcpClient a, TcpClient b) {\nSRC|079| var sa=a.GetStream(); var sb=b.GetStream();\nSRC|080| var t1=sa.CopyToAsync(sb);\nSRC|081| var t2=sb.CopyToAsync(sa);\nSRC|082| try { Task.WaitAny(t1,t2); } catch {}\nSRC|083| try { a.Close(); } catch {}\nSRC|084| try { b.Close(); } catch {}\nSRC|085| }\nSRC|086|\nSRC|087| static void Handle(TcpClient client) {\nSRC|088| TcpClient upstream=null;\nSRC|089| try {\nSRC|090| var cs=client.GetStream();\nSRC|091| int hend;\nSRC|092| byte[] raw=ReadHeaders(cs,out hend);\nSRC|093| if(raw.Length==0) return;\nSRC|094| string header=Encoding.ASCII.GetString(raw,0,hend);\nSRC|095| string[] lines=header.Split(new string[]{\"\\r\\n\"},StringSplitOptions.None);\nSRC|096| string[] first=lines[0].Split(new char[]{' '},3);\nSRC|097| if(first.Length<3) return;\nSRC|098| string method=first[0], target=first[1], version=first[2];\nSRC|099| string host=null; int port=80;\nSRC|100|\nSRC|101| if(method.Equals(\"CONNECT\",StringComparison.OrdinalIgnoreCase)) {\nSRC|102| ParseHostPort(target,443,out host,out port);\nSRC|103| upstream=ConnectSocks(host,port);\nSRC|104| byte[] ok=Encoding.ASCII.GetBytes(\"HTTP/1.1 200 Connection Established\\r\\nProxy-Agent: Workers2\\r\\n\\r\\n\");\nSRC|105| cs.Write(ok,0,ok.Length);\nSRC|106| Relay(client,upstream);\nSRC|107| return;\nSRC|108| }\nSRC|109|\nSRC|110| Uri u;\nSRC|111| string path=target;\nSRC|112| if(Uri.TryCreate(target,UriKind.Absolute,out u)) {\nSRC|113| host=u.Host; port=u.IsDefaultPort ? (u.Scheme==\"https\"?443:80) : u.Port;\nSRC|114| path=String.IsNullOrEmpty(u.PathAndQuery)?\"/\":u.PathAndQuery;\nSRC|115| } else {\nSRC|116| foreach(string line in lines) {\nSRC|117| if(line.StartsWith(\"Host:\",StringComparison.OrdinalIgnoreCase)) {\nSRC|118| string hv=line.Substring(5).Trim();\nSRC|119| ParseHostPort(hv,80,out host,out port);\nSRC|120| break;\nSRC|121| }\nSRC|122| }\nSRC|123| }\nSRC|124| if(String.IsNullOrEmpty(host)) return;\nSRC|125| upstream=ConnectSocks(host,port);\nSRC|126| var us=upstream.GetStream();\nSRC|127| var sb=new StringBuilder();\nSRC|128| sb.Append(method).Append(\" \").Append(path).Append(\" \").Append(version).Append(\"\\r\\n\");\nSRC|129| for(int i=1;iHandle(c));\nSRC|156| }\nSRC|157| }\nSRC|158|}\nSRC|159|\"@\nSRC|160|Add-Type -TypeDefinition $src -Language CSharp\nSRC|161|[W2HttpSocksBridge]::Run($ListenPort,$SocksPort)\nSRC|162|\nPORT64022_LISTENER_COUNT=1\nPORT64022_OWNER_PID_COUNT=1\nOWNER_NAME=powershell.exe\nOWNER_SESSION_ID=1\nOWNER_COMMAND_SANITIZED=\"\" -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File \"\" -ListenPort 64022 -SocksPort 64020\nOWNER_CMD_HAS_BRIDGE=true\nOWNER_CMD_HAS_64020=true\nOWNER_CMD_HAS_64022=true\nREC|PROTOCOL|MODE=SOCKS5|IOBIT_RC=28|GOOGLE_RC=28\nREC|PROTOCOL|MODE=SOCKS4A|IOBIT_RC=28|GOOGLE_RC=28\nREC|PROTOCOL|MODE=HTTP|IOBIT_RC=0|GOOGLE_RC=0\nCONTROL_64020_IOBIT_RC=0\nCONTROL_64020_GOOGLE_RC=0\nWINDOWS_64022_EXACT_SOURCE_COMPLETE=true\nPVE_UNIT_ACTIVE=active\nPVE_UNIT_ENABLED=enabled\nPVE64020_LISTENER_COUNT=1\nDECISION=HOLD_WINDOWS_64022_EXACT_BRIDGE_SOURCE_INCOMPLETE\nNEXT_GATE=NO_MUTATION_UNTIL_EXACT_BRIDGE_PROVEN\nTASK_RESULT=WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 5bc2055e..69f30261 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-261007-WINDOWS-DACHA-64022-OWNER-SHAPE-RCA-99782R1 +COMMAND_ID=SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=windows-dacha-64022-owner-shape-rca +COMPONENT=windows-dacha-64022-bridge-exact-source-rca REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=2727847ac01a9bccebd6a20c44fd420e4320470f3ad398de4b680d1c84a759f7 +COMMAND_SHA256=29c3f3ddfe92bc5d9c1bb03713be42ea2a98feb62a5dfc18888c66feaec02ee3 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,38 +24,211 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=39c69b18eea90932aa22dda702fb457f73dca990cf8c8d60f4ba526efd5f7cd1 -SANITIZED_OUTPUT_SHA256=39c69b18eea90932aa22dda702fb457f73dca990cf8c8d60f4ba526efd5f7cd1 +RAW_EVIDENCE_SHA256=66b16d6cb988213a72ed70a9ed3e7d0cce65c7f44b3752973ecd7e161e40042b +SANITIZED_OUTPUT_SHA256=66b16d6cb988213a72ed70a9ed3e7d0cce65c7f44b3752973ecd7e161e40042b OUTPUT_BEGIN -WINDOWS_DACHA_64022_OWNER_SHAPE_RCA=V1 +WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA=V1 MODE=read-only NO_MUTATION=true WINDOWS_LOCAL_INSPECT_RC=0 WINDOWS_EVIDENCE_PRESENT=true -WINDOWS_DACHA_64022_OWNER_SHAPE_RCA=V1 +WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA=V1 MODE=read-only NO_MUTATION=true +STARTUP_MATCH_COUNT=2 +REC|STARTUP|IDX=1|SCRIPT_RESOLVED=true|ARGS_SANITIZED=-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "" -ListenPort 64022 -SocksPort 64020 +REC|STARTUP|IDX=2|SCRIPT_RESOLVED=true|ARGS_SANITIZED=-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "" -ListenPort 64022 -SocksPort 64020 +BRIDGE_PATH_COUNT=1 +REC|BRIDGE_FILE|BASENAME=bridge.ps1|SHA256=d6ed793d7cfd3ec4894ff766f1c20a5de80cf3be6615a27ae4dc0f836da4cf0e|SIZE=5696|EXPECTED_SHA_MATCH=true +EXACT_BRIDGE_SHA_MATCH_COUNT=1 +BRIDGE_LINE_COUNT=162 +SRC|001|param([int]$ListenPort=64021,[int]$SocksPort=64020) +SRC|002|$ErrorActionPreference='Stop' +SRC|003|$src=@" +SRC|004|using System; +SRC|005|using System.IO; +SRC|006|using System.Net; +SRC|007|using System.Net.Sockets; +SRC|008|using System.Text; +SRC|009|using System.Threading.Tasks; +SRC|010|using System.Collections.Generic; +SRC|011| +SRC|012|public static class W2HttpSocksBridge { +SRC|013| static int SocksPort; +SRC|014| +SRC|015| static byte[] ReadHeaders(NetworkStream s, out int headerEnd) { +SRC|016| var buf = new List(4096); +SRC|017| int state=0; +SRC|018| while (buf.Count < 65536) { +SRC|019| int b=s.ReadByte(); +SRC|020| if (b < 0) break; +SRC|021| buf.Add((byte)b); +SRC|022| if (state==0 && b==13) state=1; +SRC|023| else if (state==1 && b==10) state=2; +SRC|024| else if (state==2 && b==13) state=3; +SRC|025| else if (state==3 && b==10) { headerEnd=buf.Count; return buf.ToArray(); } +SRC|026| else state=(b==13)?1:0; +SRC|027| } +SRC|028| headerEnd=buf.Count; +SRC|029| return buf.ToArray(); +SRC|030| } +SRC|031| +SRC|032| static TcpClient ConnectSocks(string host, int port) { +SRC|033| var c=new TcpClient(); +SRC|034| c.Connect(IPAddress.Loopback,SocksPort); +SRC|035| var s=c.GetStream(); +SRC|036| s.Write(new byte[]{5,1,0},0,3); +SRC|037| byte[] r=new byte[2]; +SRC|038| if (s.Read(r,0,2)!=2 || r[0]!=5 || r[1]!=0) throw new IOException("SOCKS_GREETING"); +SRC|039| byte[] hb=Encoding.ASCII.GetBytes(host); +SRC|040| if (hb.Length<1 || hb.Length>255) throw new IOException("SOCKS_HOST"); +SRC|041| using(var ms=new MemoryStream()) { +SRC|042| ms.WriteByte(5); ms.WriteByte(1); ms.WriteByte(0); ms.WriteByte(3); ms.WriteByte((byte)hb.Length); +SRC|043| ms.Write(hb,0,hb.Length); ms.WriteByte((byte)((port>>8)&255)); ms.WriteByte((byte)(port&255)); +SRC|044| var q=ms.ToArray(); s.Write(q,0,q.Length); +SRC|045| } +SRC|046| byte[] h4=new byte[4]; +SRC|047| if (s.Read(h4,0,4)!=4 || h4[0]!=5 || h4[1]!=0) throw new IOException("SOCKS_CONNECT"); +SRC|048| int remain=0; +SRC|049| if (h4[3]==1) remain=4+2; +SRC|050| else if (h4[3]==4) remain=16+2; +SRC|051| else if (h4[3]==3) { +SRC|052| int len=s.ReadByte(); if(len<0) throw new IOException("SOCKS_REPLY"); +SRC|053| remain=len+2; +SRC|054| } else throw new IOException("SOCKS_ATYP"); +SRC|055| byte[] junk=new byte[remain]; +SRC|056| int off=0; +SRC|057| while(off0) { +SRC|066| host=target.Substring(1,e-1); +SRC|067| if(e+10 && target.IndexOf(':')==k) { +SRC|073| int p; +SRC|074| if(int.TryParse(target.Substring(k+1),out p)) { host=target.Substring(0,k); port=p; } +SRC|075| } +SRC|076| } +SRC|077| +SRC|078| static void Relay(TcpClient a, TcpClient b) { +SRC|079| var sa=a.GetStream(); var sb=b.GetStream(); +SRC|080| var t1=sa.CopyToAsync(sb); +SRC|081| var t2=sb.CopyToAsync(sa); +SRC|082| try { Task.WaitAny(t1,t2); } catch {} +SRC|083| try { a.Close(); } catch {} +SRC|084| try { b.Close(); } catch {} +SRC|085| } +SRC|086| +SRC|087| static void Handle(TcpClient client) { +SRC|088| TcpClient upstream=null; +SRC|089| try { +SRC|090| var cs=client.GetStream(); +SRC|091| int hend; +SRC|092| byte[] raw=ReadHeaders(cs,out hend); +SRC|093| if(raw.Length==0) return; +SRC|094| string header=Encoding.ASCII.GetString(raw,0,hend); +SRC|095| string[] lines=header.Split(new string[]{"\r\n"},StringSplitOptions.None); +SRC|096| string[] first=lines[0].Split(new char[]{' '},3); +SRC|097| if(first.Length<3) return; +SRC|098| string method=first[0], target=first[1], version=first[2]; +SRC|099| string host=null; int port=80; +SRC|100| +SRC|101| if(method.Equals("CONNECT",StringComparison.OrdinalIgnoreCase)) { +SRC|102| ParseHostPort(target,443,out host,out port); +SRC|103| upstream=ConnectSocks(host,port); +SRC|104| byte[] ok=Encoding.ASCII.GetBytes("HTTP/1.1 200 Connection Established\r\nProxy-Agent: Workers2\r\n\r\n"); +SRC|105| cs.Write(ok,0,ok.Length); +SRC|106| Relay(client,upstream); +SRC|107| return; +SRC|108| } +SRC|109| +SRC|110| Uri u; +SRC|111| string path=target; +SRC|112| if(Uri.TryCreate(target,UriKind.Absolute,out u)) { +SRC|113| host=u.Host; port=u.IsDefaultPort ? (u.Scheme=="https"?443:80) : u.Port; +SRC|114| path=String.IsNullOrEmpty(u.PathAndQuery)?"/":u.PathAndQuery; +SRC|115| } else { +SRC|116| foreach(string line in lines) { +SRC|117| if(line.StartsWith("Host:",StringComparison.OrdinalIgnoreCase)) { +SRC|118| string hv=line.Substring(5).Trim(); +SRC|119| ParseHostPort(hv,80,out host,out port); +SRC|120| break; +SRC|121| } +SRC|122| } +SRC|123| } +SRC|124| if(String.IsNullOrEmpty(host)) return; +SRC|125| upstream=ConnectSocks(host,port); +SRC|126| var us=upstream.GetStream(); +SRC|127| var sb=new StringBuilder(); +SRC|128| sb.Append(method).Append(" ").Append(path).Append(" ").Append(version).Append("\r\n"); +SRC|129| for(int i=1;iHandle(c)); +SRC|156| } +SRC|157| } +SRC|158|} +SRC|159|"@ +SRC|160|Add-Type -TypeDefinition $src -Language CSharp +SRC|161|[W2HttpSocksBridge]::Run($ListenPort,$SocksPort) +SRC|162| PORT64022_LISTENER_COUNT=1 PORT64022_OWNER_PID_COUNT=1 OWNER_NAME=powershell.exe -OWNER_NAME_SSH=false -OWNER_NAME_PLINK=false -OWNER_NAME_POWERSHELL=true OWNER_SESSION_ID=1 -OWNER_PARENT_PID_HASH= -OWNER_EXE_SHA256=9785001b0dcf755eddb8af294a373c0b87b2498660f724e76c4d53f9c217c7a3 -OWNER_COMMANDLINE_AVAILABLE=true +OWNER_COMMAND_SANITIZED="" -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "" -ListenPort 64022 -SocksPort 64020 +OWNER_CMD_HAS_BRIDGE=true +OWNER_CMD_HAS_64020=true +OWNER_CMD_HAS_64022=true +REC|PROTOCOL|MODE=SOCKS5|IOBIT_RC=28|GOOGLE_RC=28 +REC|PROTOCOL|MODE=SOCKS4A|IOBIT_RC=28|GOOGLE_RC=28 +REC|PROTOCOL|MODE=HTTP|IOBIT_RC=0|GOOGLE_RC=0 +CONTROL_64020_IOBIT_RC=0 +CONTROL_64020_GOOGLE_RC=0 +WINDOWS_64022_EXACT_SOURCE_COMPLETE=true PVE_UNIT_ACTIVE=active PVE_UNIT_ENABLED=enabled PVE64020_LISTENER_COUNT=1 -DECISION=HOLD_WINDOWS_64022_OWNER_SHAPE_INCOMPLETE -NEXT_GATE=NO_MUTATION_UNTIL_OWNER_SHAPE_PROVEN -TASK_RESULT=WINDOWS_DACHA_64022_OWNER_SHAPE_RCA +DECISION=HOLD_WINDOWS_64022_EXACT_BRIDGE_SOURCE_INCOMPLETE +NEXT_GATE=NO_MUTATION_UNTIL_EXACT_BRIDGE_PROVEN +TASK_RESULT=WINDOWS_DACHA_64022_BRIDGE_EXACT_SOURCE_RCA CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null MUTATION_OUTCOME=NO_MUTATION -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261007-WINDOWS-DACHA-64022-OWNER-SHAPE-RCA-99782R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261007-WINDOWS-DACHA-64022-BRIDGE-EXACT-SOURCE-RCA-99783R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END