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