Powershell: Fritz!Box Telnet-Befehle ausführen lassen
Für alle die es brauchen können und keine externen Tools außer nativer Powershell verwenden möchten, hier eine Funktion die das automatische Einloggen und Absetzen von einzelnen oder mehreren Telnet-Kommandos auf einer Fritzbox beherrscht.
Ausgegeben wird der gesamte Output der Befehle.
Eventuell ist es nötig den Parameter -waittime je nach Befehlsdauer zu erhöhen. Standardmäßig beträgt dieser 1 Sekunde (1000ms) - das Script wartet also nach jedem Befehl 1 Sekunde bevor der nächste ausgeführt wird.
Viel Spaß damit.
Grüße @colinardo
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
function Send-FritzBoxCommands{
param(
[string]$hostname = "fritz.box",
[parameter(mandatory=$true)][string]$password,
[parameter(mandatory=$true)][string[]]$commands,
[int]$waittime = 1000 # waittime between commands
)
try{
$tcpclient = new-object System.Net.Sockets.TcpClient($hostname,23) -ErrorAction Stop
if ($tcpClient){
write-host "Connected to $hostname" -ForegroundColor Green
$stream = $tcpclient.GetStream()
$writer = new-Object System.IO.StreamWriter($stream)
$buffer = new-Object Byte 1024
$encoding = new-Object System.Text.ASCIIEncoding
# Login -----------
write-host "Login ..." -ForegroundColor Green
# wait for login prompt
$strtemp =""
while($strtemp -notmatch 'password:'){
[int32]$bytes = $stream.Read($buffer,0,$buffer.length);$strtemp += $encoding.GetString($buffer,0,$bytes)
}
$writer.WriteLine($password);$writer.Flush()
# wait for shell prompt
$strtemp =""
while($strtemp -notmatch '(?m)^#|login failed'){
[int32]$bytes = $stream.Read($buffer,0,$buffer.length);$strtemp += $encoding.GetString($buffer,0,$bytes)
}
if ($strtemp -match 'login failed'){write-host "Login failed (wrong password?)" -ForegroundColor Red; return $false}
# -------------
# invoke remote commands
$commands | %{
write-host "Invoking Command: $_" -ForegroundColor Yellow
$writer.WriteLine($_)
$writer.Flush()
sleep -Milliseconds $waittime
}
$output = ""
while ($stream.DataAvailable){
[int32]$bytes = $stream.Read($buffer,0,$buffer.length)
$output += $encoding.GetString($buffer,0,$bytes)
}
# release resources
$writer.Close();$writer.Dispose();$tcpclient.Close(); $tcpclient.Dispose()
# return output
write-host "Response:`n" -ForegroundColor Black -BackgroundColor Yellow
return $output
}
}catch{
write-host $_.Exception.Message -ForegroundColor Red
return $false
}
}
Send-FritzBoxCommands -password 'GeheimesPasswort' -commands 'ls -la'
Send-FritzBoxCommands -password 'GeheimesPasswort' -commands 'help','ls -la','free'
Send-FritzBoxCommands -hostname "192.168.178.1" -password 'GeheimesPasswort' -commands 'ls -la','free'
Ausgegeben wird der gesamte Output der Befehle.
Eventuell ist es nötig den Parameter -waittime je nach Befehlsdauer zu erhöhen. Standardmäßig beträgt dieser 1 Sekunde (1000ms) - das Script wartet also nach jedem Befehl 1 Sekunde bevor der nächste ausgeführt wird.
- AVM spezifische Befehle: http://www.wehavemorefun.de/fritzbox/AVM-Befehle
- Liste der User-Interface-Module mit denen man fast alles auslesen und einstellen kann (für den Befehl ctlmgr_ctl) : http://www.wehavemorefun.de/fritzbox/User-Interface-Module
- Basis-Busybox Befehle: http://www.wehavemorefun.de/fritzbox/BusyBox-Befehle
Viel Spaß damit.
Grüße @colinardo
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Datum | Änderung |
---|---|
05.05.2015 | Login optimiert und Fehler bei falschem Passwort abgefangen |
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 271025
Url: https://administrator.de/knowledge/powershell-fritzbox-telnet-befehle-ausfuehren-lassen-271025.html
Ausgedruckt am: 08.06.2025 um 06:06 Uhr