91 lines
3.6 KiB
PowerShell
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" |