
VladimirTs
-
Posts
26 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Forums
Gallery
Downloads
Blogs
Events
Posts posted by VladimirTs
-
-
Делюсь работающим примером
Function Get-StringHash([String] $String,$HashName = "MD5") { $StringBuilder = New-Object System.Text.StringBuilder [System.Security.Cryptography.HashAlgorithm]::Create($HashName).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String))|%{ [Void]$StringBuilder.Append($_.ToString("x2")) } $StringBuilder.ToString() } $session="" $user = "admin" $pass= "ppp" $authorized = $false try{ $site = Invoke-WebRequest -URI 'http://my.keenetic.net/auth' -SessionVariable session $authorized=$true }catch{ $s = $_.Exception.Response if($s.StatusCode -eq "Unauthorized"){ $token = $s.Headers["X-NDM-Challenge"] $realm = $s.Headers["X-NDM-Realm"] $id= $s.Cookies["session_id"].Value $tomd5=$user + ':' + $realm + ':' + $pass $hashmd5=Get-StringHash $tomd5 "MD5" $tohash = $token+$hashmd5 $hashed=Get-StringHash $tohash "SHA256" $body=@{"login"=$user ; "password"=$hashed} try{ $rv = Invoke-WebRequest -URI 'http://my.keenetic.net/auth' -Method Post -Body ($body|ConvertTo-Json) -WebSession $session -ContentType "application/json" $authorized = $true }catch{ } if ($authorized){ $v = Invoke-RestMethod -Uri 'http://my.keenetic.net/rci/show/ip/hotspot/host' -Method Get -WebSession $session -ContentType "application/json" } $v.Length } }
-
2
-
2
-
-
On 10/31/2018 at 7:26 AM, OmegaTron said:
Перед тем как сегодня отписаться, начал перепроверку кода под микроскопом (всмысле с отладкой) и таки была замечена пара просчётов - md5sum выполнялся без обрезки мусора после выхлопа, а printf в realm из-за пробелов выдавал только первый блок. Разбираться с экранированием буду позже (ибо с printf манипуляций меньше), пока вернулся назад к echo и обрезке \n через tr -d "\n". Теперь наконец всё работает и ответ от роутера "HTTP/1.1 200 OK" ))) C куками к слову всё было в порядке, просто глаз замылился и я в упор не видел ошибку
Привет, а можно на код посмотреть? Сделал не Powershell, но где-то ошибка:
$user = "admin" $pass= "aabbcc" try{ $site = Invoke-WebRequest 'http://192.168.1.1/auth' $state = $site.Headers $state }catch{ $s = $_.Exception.Response if($s.StatusCode -eq "Unauthorized"){ $token = $s.Headers["X-NDM-Challenge"] "Token:'$token'" $realm = $s.Headers["X-NDM-Realm"] "Realm:'$realm'" $id= $s.Cookies["session_id"].Value #sha256(token + md5(login + ':' + realm + ':' + password)) $tomd5=$user + ':' + $realm + ':' + $pass "ToMD5:'$tomd5'" $md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $utf8 = new-object -TypeName System.Text.UTF8Encoding $hashmd5 = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($tomd5))) $hashmd5=$hashmd5.Replace("-","") "HashMD5:'$hashmd5'" $tohash = $token "Tosha256:'$tohash'" $hashed="" New-object System.Security.Cryptography.SHA256Managed | ForEach-Object {$_.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($tohash))} | ForEach-Object { $hashed+=$_.ToString("x2")} $hashed=$hashed.ToUpper() "Sha256:'$hashed'" $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession $cookie = New-Object System.Net.Cookie $cookie.Name = $s.Cookies[0].Name #"session_id" $cookie.Value = $s.Cookies[0].Value # ID $cookie.Domain = $s.Cookies[0].Domain $cookie $session.Cookies.Add($cookie); $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add('Content-Type','application/json') $headers $body='{"login":"'+$user+'", "password":"'+$hashed+'"}' "Body to post:$body" Invoke-WebRequest 'http://192.168.1.1/auth' -Method Post -Body $body -headers $headers -SessionVariable $session } }
Вывод скрипта:
Token:'SHNNEMKBAPROMVCZHVVSXMWBDRPLUDHG' Realm:'ZyXEL Keenetic Ultra' ToMD5:'admin:ZyXEL Keenetic Ultra:aabbcc' HashMD5:'CF67093EBBF9F768A853D56BEFB747D9' Tosha256:'SHNNEMKBAPROMVCZHVVSXMWBDRPLUDHG' Sha256:'DB7027E420608ACD3EECC82A647425F7F2A97C72857E2B3A4585A4F0FA95D56F' Comment : CommentUri : HttpOnly : False Discard : False Domain : 192.168.1.1 Expired : False Expires : 01.01.0001 0:00:00 Name : session_id Path : Port : Secure : False TimeStamp : 08.11.2018 17:40:38 Value : PYPHESBYQNKXNPZJ Version : 0 Key : Content-Type Value : application/json Body to post:{"login":"admin", "password":"DB7027E420608ACD3EECC82A647425F7F2A97C72857E2B3A4585A4F0FA95D56F"} Invoke-WebRequest : The remote server returned an error: (400) Bad Request. At C:\Users\vladt\Downloads\Untitled1.ps1:50 char:5 + Invoke-WebRequest 'http://192.168.1.1/auth' -Method Post -Body $ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
-
@OmegaTron а можешь примером кода поделиться? Хочу то же самое на powershell сделать. Та да проблема.
-
On 5/30/2018 at 5:52 PM, Александр Рыжов said:
А по поводу использования токена, вероятно, @Le ecureuil скоро пояснит.
Появились ли Новости? @Le ecureuil
-
Спасибо за разъяснение, а что если мне нужно получить доступ к rci из локальной сети? Обращаться по порту 79?
И связанный вопрос - если не работает basic auth, можно ли с помощью современных скриптовых языков, например, powershell, использовать поддерживаемую новую аутентификацию для вызова rci?
ИЗ документации поддерживаются:
-
OAuth: Requires -Token. Will send and RFC 6750
Authorization: Bearer
header with the supplied token. This is an alias for Bearer
-
OAuth: Requires -Token. Will send and RFC 6750
-
Спасибо, а есть пример на каком-нибудь языке? В принципе наверное можно запрограммировать и токен в заголовке.
-
Перестал работать следующий код на PowerShell - ошибка access denied, c предыдущей все было в порядке
$user = "admin" $pass= "****" $secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd) Invoke-WebRequest "http://192.168.1.1/rci/ip/route"-Credential $credential
-
-
-
2 hours ago, Александр Рыжов said:
Откройте в своём любимом браузере отладчик (F12) и посмотрите что WebUI отсылает.
Поделюсь с сообществом скриптом, сделано через отправку параметров в body через json
function ConvertTo-IPv4MaskString { <# .РЕЗЮМЕ Преобразует число разрядов (0 - 32) в строку маски сети IPv4 (например, "255.255.255.0"). .ОПИСАНИЕ Преобразует число разрядов (0 - 32) в строку маски сети IPv4 (например, "255.255.255.0"). .ПАРАМЕТР MaskBits Указывает число разрядов в маске. #> param( [parameter(Mandatory=$true)] [ValidateRange(0,32)] [Int] $MaskBits ) $mask = ([Math]::Pow(2, $MaskBits) - 1) * [Math]::Pow(2, (32 - $MaskBits)) $bytes = [BitConverter]::GetBytes([UInt32] $mask) (($bytes.Count - 1).. 0 | ForEach-Object { [String] $bytes[$_] }) -join "." } $user = "admin" $pass= "password" $interface="OpenVPN0" $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add('Content-Type','application/json') $secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd) $ips=get-content C:\1\ips.txt $ips| ForEach-Object { $network=$_.Split("\/")[0] $mask=ConvertTo-IPv4MaskString([int] $_.Split("\/")[1]) $body='{"network":"'+$network+'", "mask":"'+$mask+'", "interface":"'+$interface+'","auto": true }' $rv=Invoke-WebRequest "http://my.keenetic.net/rci/ip/route" -TimeoutSec 3 -Credential $credential -Method Post -Body $body -Headers $headers Write-Host "$network $mask processed:$(-not $rv.Content.Contains("error"))" }
формат файла ips.txt - сеть/маска
108.174.12.0/22
108.174.0.0/21
108.174.8.0/21
199.101.161.0/24-
1
-
1
-
-
Добрый, не подскажите, как с помощью RCI добавить маршрут?
URL понятен, http://192.168.1.1/rci/ip/route, а что и как отправить POST в body?
-
1
-
-
Добрый день!
Использую Https для доступа к внутреннему сайту, очень часто (2-3 раза в час) появляется ошибка (Keenetic 4G III), подключение через модем.
Cloud::Tunnel: "NDNS/733bf23ce566fb206e0084eb632c256e": WAN: failed to receive data from 192.168.8.100:443 - connection reset by peer.
Аналогично настроенное соединение через проводного провайдера (Ultra) ошибок не выдает.
Как улучшить надежность? На модеме качество связи очень высокое - вышка рядом, 4g Yota.
Может у Keenetic 4G III просто мощности процессора или памяти не хватает?
Status Internet access Modem HUAWEI_MOBILE Network type 4G Software version 22.317.01.00.17 / 17.100.13.01.03-Mod1.3 Signal (CINR/RSSI) 27dB / -65dBm LTE device ID removed IPv4 address 10.152.72.60 MAC address BA:AB:BE:34:44:45 KeenDNS name removed.mykeenetic.net Mode CDC Ethernet -
RCI Reboot
in 2.12
Спасибо, работает.
кстати, если кому интересно - скрипт на PowerShell
$user = "admin" $pass= "password" $secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd) $rv=Invoke-WebRequest "http://my.keenetic.net/rci/system/reboot?interval=60" -TimeoutSec 3 -Credential $credential -Method Post -Body "{}" $message = "Router: $(($rv.Content |ConvertFrom-Json).message)" Write-Host $message
-
3
-
-
RCI Reboot
in 2.12
А как с помощью rci перезагрузить роутер?
/rci/system/reboot не работет
отображение сигнала
in 3.4
Posted
неверно отображается для e3372h.