PowerShell Script zur Instar Kamera Verwaltung (via CGI)

Voraussetzungen: Instar Kamera, PowerShell Version 3.0 oder neuer.
Getestet mit: Instar IN-8015 FullHD powershell_instar

Es lassen sich alle Kommandos, die per Web-UI verfügbar sind, auch per CGI Skript steuern. Ich hab ein Skript erstellt, welches die Ausführung per PowerShell ermöglicht.

Hinweis: Solltet ihr den DynDNS Service von Instar deaktiviert haben, dann solltet ihr nach Möglichkeit in eurem DNS Server einen Host Override anlegen.

Sprich <myHostName>.ddns3-instar.de auf eure lokale IP mappen. Das hat den Vorteil, dass ihr dann zumindest intern das Instar Zertifikat als “gültig” angezeigt bekommt und das Skript keine Exception wirft. Sollte das nicht gehen, dann gib es im Skript auch noch einen Workaround.

instar_wildcard_cert host_override

PowerShell Skript Download


#requires -Version 3.0

#=============================================================================================
# Modified on            2017-09-05
# Created on             2017-09-05
# Version                1.0
# Created by:            Marcus Opel
# Organization:          https://devmarc.de
# Filename:              Instar_FullHD_Cams_CGI_Examples.ps1
# comment:               Instar FullHD Cam CGI Examples
# requires:              PowerShell 3 or higher
#=============================================================================================

$secureStringFile = "$PSScriptRoot\adminSecureString.sec"
# Create secure string and store it locally
# ConvertTo-SecureString "yourTopSecretP@ssword" -AsPlainText -Force | ConvertFrom-SecureString | Out-File $secureStringFile; exit

$acctname = 'admin'
$secString = Get-Content $secureStringFile | ConvertTo-SecureString
$password = (New-Object PSCredential $acctname,$secString).GetNetworkCredential().Password # or use just a normal string (less secure)
$cameraHost = "<myHostName>.ddns3-instar.de" # or a local ip like: 192.168.178.163
$scriptTimeoutInSeconds = 60
$useSSL = $true

# Command list examples --------------------------------------------------------------------------------
# List of commands

# https://wiki.instar.de/1080p_Series_CGI_List
# Tested with Instar IN-8015 FullHD

$command = '/cgi-bin/hi3510/param.cgi?cmd=getuserinfo'                                                         # return user info
# $command = '/param.cgi?cmd=preset&-act=goto&-number=0'                                                       # goto stored postion 1 (in web gui)
# $command = '/param.cgi?cmd=preset&-act=goto&-number=1'                                                       # goto stored postion 2 (in web gui)
# $command =  '/param.cgi?cmd=getmdalarm&-aname=emailsnap'                                                     # "Send Mail" on Alarm Status (True|False)
# $command =  '/param.cgi?cmd=setmdalarm&-aname=emailsnap&-switch=off'                                         # Disable "Send Mail"
# $command =  '/param.cgi?cmd=setmdalarm&-aname=emailsnap&-switch=on'                                          # Enable "Send Mail"
# $command = '/param.cgi?cmd=setmdalarm&-aname=record&-switch=off'                                             # Disable "Save Video to SD"
# $command = '/param.cgi?cmd=setmdalarm&-aname=record&-switch=on'                                              # Enable "Save Video to SD"
# $command = '/param.cgi?cmd=setmdalarm&-aname=emailsnap&-switch=off&cmd=setmdalarm&-aname=record&-switch=off' # Disable "Send Mail" & Disable "Save Video to SD"
# $command = '/param.cgi?cmd=setmdalarm&-aname=emailsnap&-switch=on&cmd=setmdalarm&-aname=record&-switch=on'   # Enable "Send Mail" & Enable "Save Video to SD"
# command list examples --------------------------------------------------------------------------------

# Uncomment these lines, if you still have problems to get a valid certificate (https) - BEGIN
<#
    Add-Type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
    public bool CheckValidationResult(
    ServicePoint srvPoint, X509Certificate certificate,
    WebRequest request, int certificateProblem) {
    return true;
    }
    }
    "@
    [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
#>
# Uncomment these lines, if you still have problems to get a valid certificate - END

# Send command to ip camera
try {
  $output = $null
  $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $acctname,$password)))
  $uriPart = 'https'
  if ($useSSL) { $uriPart = 'https' } else { $uriPart = 'http' }
  $output = Invoke-WebRequest `
  -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo); Method = 'Get'} `
  -ContentType 'multipart/form-data' `
  -Method Get `
  -Uri "$($uriPart)://$($cameraHost)$command" `
  -TimeoutSec $scriptTimeoutInSeconds `
  -Verbose
}
catch {

  if ($_.Exception.Response.StatusCode -ne 'Unauthorized') {
    
    throw
  }
  else {
    $_.Exception.Response.StatusCode
  }

}

# Get output object
$output.StatusCode
$output.StatusDescription
$output.Content

Wer noch testen möchte, ob wirklich alles verschlüsselt übertragen wird, kann das mit einem Netzwerk Sniffer wie Wireshark tun.

Dieser Beitrag wurde unter IT abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>