$ErrorActionPreference = "Continue" function Redis-Ping([string]$rh, [int]$port) { try { $tcp = New-Object Net.Sockets.TcpClient $iar = $tcp.BeginConnect($rh, $port, $null, $null) $ok = $iar.AsyncWaitHandle.WaitOne(2000) if (-not $ok) { $tcp.Close(); return "tcp_timeout" } $tcp.EndConnect($iar) $stream = $tcp.GetStream() $stream.ReadTimeout = 2000 $payload = [Text.Encoding]::ASCII.GetBytes("*1`r`n`$4`r`nPING`r`n") $stream.Write($payload, 0, $payload.Length) $buf = New-Object byte[] 64 $n = $stream.Read($buf, 0, $buf.Length) $tcp.Close() return [Text.Encoding]::ASCII.GetString($buf, 0, $n).Trim() } catch { return ("err:" + $_.Exception.Message) } } function Redis-AuthPw([string]$rh, [int]$port, [string]$pass) { try { $tcp = New-Object Net.Sockets.TcpClient $tcp.Connect($rh, $port) $stream = $tcp.GetStream() $stream.ReadTimeout = 3000 # AUTH pass $ms = New-Object IO.MemoryStream $passBytes = [Text.Encoding]::UTF8.GetBytes($pass) $hdr = [Text.Encoding]::ASCII.GetBytes("*2`r`n`$4`r`nAUTH`r`n`$" + $passBytes.Length + "`r`n") $ms.Write($hdr, 0, $hdr.Length) $ms.Write($passBytes, 0, $passBytes.Length) $cr = [Text.Encoding]::ASCII.GetBytes("`r`n") $ms.Write($cr, 0, 2) $payload = $ms.ToArray() $stream.Write($payload, 0, $payload.Length) $buf = New-Object byte[] 128 $n = $stream.Read($buf, 0, $buf.Length) $tcp.Close() return [Text.Encoding]::ASCII.GetString($buf, 0, $n).Split("`r")[0] } catch { return ("err:" + $_.Exception.Message) } } function Redis-AuthUserPw([string]$rh, [int]$port, [string]$user, [string]$pass) { try { $tcp = New-Object Net.Sockets.TcpClient $tcp.Connect($rh, $port) $stream = $tcp.GetStream() $stream.ReadTimeout = 3000 $userBytes = [Text.Encoding]::UTF8.GetBytes($user) $passBytes = [Text.Encoding]::UTF8.GetBytes($pass) $ms = New-Object IO.MemoryStream $w = { param($s,$b) $h = [Text.Encoding]::ASCII.GetBytes($s) $ms.Write($h,0,$h.Length) if ($b) { $ms.Write($b,0,$b.Length); $c=[Text.Encoding]::ASCII.GetBytes("`r`n"); $ms.Write($c,0,2) } } # manual $parts = @("AUTH", $user, $pass) $pre = [Text.Encoding]::ASCII.GetBytes("*" + $parts.Count + "`r`n") $ms.Write($pre,0,$pre.Length) foreach ($p in $parts) { $b = [Text.Encoding]::UTF8.GetBytes($p) $h = [Text.Encoding]::ASCII.GetBytes("$" + $b.Length + "`r`n") $ms.Write($h,0,$h.Length) $ms.Write($b,0,$b.Length) $c=[Text.Encoding]::ASCII.GetBytes("`r`n"); $ms.Write($c,0,2) } $payload = $ms.ToArray() $stream.Write($payload, 0, $payload.Length) $buf = New-Object byte[] 128 $n = $stream.Read($buf, 0, $buf.Length) $tcp.Close() return [Text.Encoding]::ASCII.GetString($buf, 0, $n).Split("`r")[0] } catch { return ("err:" + $_.Exception.Message) } } Write-Host ("ping_127=" + (Redis-Ping "127.0.0.1" 6379)) Write-Host ("ping_intranet=" + (Redis-Ping "10.206.0.14" 6379)) # load url password $pass=$null; $user=$null Get-Content "E:\wwwroot\.env" | ForEach-Object { if ($_ -match "^REDIS_URL=redis://([^:/@]+):([^@]+)@") { $user=$Matches[1]; $pass=$Matches[2] } } Write-Host ("loaded user=" + $user + " pw_len=" + $pass.Length) Write-Host ("auth_intranet_pw_only=" + (Redis-AuthPw "10.206.0.14" 6379 $pass)) Write-Host ("auth_intranet_user_pw=" + (Redis-AuthUserPw "10.206.0.14" 6379 $user $pass)) Write-Host ("auth_127_pw_only=" + (Redis-AuthPw "127.0.0.1" 6379 $pass)) Write-Host ("auth_127_user_pw=" + (Redis-AuthUserPw "127.0.0.1" 6379 $user $pass)) Write-Host "REDIS_COMPARE_DONE"