Instantly share code, notes, and snippets.

Embed
What would you like to do?
Powershell FritzBox Dialer
#IBJS.net 20160803, in Anlehnung an fb_dial.vbs von Michael Engelke 2012
#Fritz!Box Wählhilfe mit Powershell von Joachim Schubert ibjs.net 2016
#Der Fritz-Box Benutzername für diesen Konstellation lautet NAS-Read
#Das encrypted Fritz-Box Passwort ist vorher in einer Datei Securestring.fb abzulegen.
#ConvertFrom-SecureString (read-host -AsSecureString -Prompt "Passwort ") >SecureString.fb
#Als Default Rufnummer nehme ich hier die Zeitansage der Telekom, die aber kostenpflichtig ist
#Alternativ nehme ich zum Testen eine interne Nummer wie **610, damit kann ich es zwar klingeln lassen,
#kann aber bisher die internen Gespräche nicht an das Wahlgerät **613 übergeben, es legt sofort auf.
#Zum Aufbau einer Verbindung lege ich eine sonst unbenutzte Festnetznummer auf das Zielgerät.
#Erprobung an Windows 7/ Powershell 5/ Gigaset A415 **613, Gigaset SL1 **610/ FritzBox 6360/Unity Media VoIP
#Die Übergabe des Anrufs erfolgt so:
#Das Script baut die Verbindung auf und zeigt es mit einem Rufzeichen= 3x Kammerton an.
#Sobald zu hören, am Wahlgerät die grüne Rufannahmetaste solange drücken, bis Wählhilfe Nummer am Display erscheint (ca. 1s)
#Das Rufzeichen ist am Wählgerät zu hören.
#
#Einbindung als Telefondienst per Registry:
#HKEY_CLASSES_ROOT\tel\shell\open\command
#[Reg_SZ]: "C:\WINDOWS\System32\WScript.exe" "C:\Windows\fb_dial.vbs" '%1' # altes vbs script wird nun ersetzt:
#[Reg_SZ]: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "C:\Windows\fb-dial.ps1" '%1'
#Dieses Script und SecureString.fb kommen nach C:\windows
#mit tel:01804100100 kann nun gewählt werden
#
Param([string]$Nummer="0180 4100100") #Zeitansage Telecom für 20 ct
#
function md5($text){
$md5 = New-Object System.Security.Cryptography.MD5CryptoServiceProvider
$md5.ComputeHash([Text.Encoding]::utf8.getbytes($text))|%{$HC=''}{$HC+=$_.tostring("x2")}{$HC}
}
#
#Achtung [string] im Parameter nicht vergessen sonst wird aus 0175… -> 175…
#und sie lernen einen Anschluss Ihrer Nachbarschaft kennen
#
Function dial([string]$Nummer){
if (!$Nummer){$Nummer="**610"}
#Nummernumwandlungfür Fritz in De, ohne Telefonanlage
$Nummer=([regex]::Replace($Nummer,"(?i)^tel:",""))
$Nummer=([regex]::Replace($Nummer,"^\+","00"))
$Nummer=[regex]::Replace($Nummer,"[^0-9*]","")
$Nummer=[regex]::Replace($Nummer,"0049","0")
$Password=get-content .\securestring.fb|ConvertTo-SecureString
$user="NAS-Read"
$hostfb="http://fritz.box" #$Host wird vom OS genutzt
$page_login= "/login_sid.lua"
$page_dial= "/fon_num/fonbook_list.lua?dial="+$Nummer+"&sid="
$page_logout="/fon_num/fonbook_list.lua?logout=1&sid="
$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)
$pass=[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($Ptr)
$R1 = Invoke-WebRequest ($hostfb+$page_login)
$Challenge=([xml]$R1).sessioninfo.challenge
$Code1=$Challenge+"-"+$Pass
$Code2=[char[]]$Code1|%{$Code2=""}{$Code2+=$_+[Char]0}{$Code2}
$Response= "response=" + $Challenge + "-" + $(md5($Code2))
$Response+="&username="+$user #Response ist die Antwort auf die Challenge
$R2=Invoke-WebRequest -Uri ($hostfb+$page_login) -Method Post -Body $Response
$SID=([xml]($R2.Content)).ChildNodes.sid
$URiDial= $hostfb+$page_dial+$SID
$URILogout=$hostfb+$page_logout+$SID
$RequestCall=Invoke-WebRequest -Uri $URIDial
$RequestLogout=Invoke-WebRequest -Uri $URILogout
1..3|%{[console]::beep(440,1000);start-sleep(1)}
}
dial $Nummer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment