Files
inquiry_robot/deploy/_remote_redis_local_vs_intranet.ps1
T

91 lines
3.6 KiB
PowerShell

$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"