Jump to content

VladimirTs

Forum Members
  • Content Count

    23
  • Joined

  • Last visited

  • Days Won

    1

VladimirTs last won the day on April 1

VladimirTs had the most liked content!

Community Reputation

8 Neutral

About VladimirTs

  • Rank
    Member

Equipment

  • Keenetic
    Ultra, 4G

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. 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. VladimirTs

    Привет, а можно на код посмотреть? Сделал не 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
  3. VladimirTs

    @OmegaTron а можешь примером кода поделиться? Хочу то же самое на powershell сделать. Та да проблема.
  4. Появились ли Новости? @Le ecureuil
  5. VladimirTs

    Все заработало, спасибо!
  6. Может уже обсуждалось, но что-то не могу найти ответа. Есть 2 кинетика: Ultra (белый IP,) 192.168.1.0; Giga (Серый IP), 192.168.2.0 Оба NDMS 2.11, объединенные IP-IP тонелем, весь траффик прозрачно ходит сежду подсетями, все работает. Нужно создать VPN содеинение для клиентов Windows и IOS, которые будут подключаться к Ultra через белый IP. С удаленного устройства должны быть видны обе сети. Какой выбрать протокол VPN? Как правильно настроить? Спасибо!
  7. Спасибо за разъяснение, а что если мне нужно получить доступ к 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
  8. Спасибо, а есть пример на каком-нибудь языке? В принципе наверное можно запрограммировать и токен в заголовке.
  9. Перестал работать следующий код на 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
  10. VladimirTs

    Спасибо! Привыкнем
  11. VladimirTs

    Подскажите, пожалуйста, как откатиться на старый?
  12. VladimirTs

    Еще может быть полезен скрипт для добавления маршрутов
  13. VladimirTs

    Поделюсь с сообществом скриптом, сделано через отправку параметров в 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
  14. VladimirTs

    Добрый, не подскажите, как с помощью RCI добавить маршрут? URL понятен, http://192.168.1.1/rci/ip/route, а что и как отправить POST в body?
  15. VladimirTs

    то что в поиске понятно, спасибо. загрузка файла с маршрутами не сработала. а есть пример использования rci для добавления маршрута?
×