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
Powershell-Funktion: Send-FritzBoxCommands
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
}
}
Beispiele zur Anwendung
Übermitteln eines einzelnen Befehls
Send-FritzBoxCommands -password 'GeheimesPasswort' -commands 'ls -la'
Übermitteln mehrerer Befehle auf einmal
Send-FritzBoxCommands -password 'GeheimesPasswort' -commands 'help','ls -la','free'
Übergabe der IP oder des Hostnamens der Fritzbox
Send-FritzBoxCommands -hostname "192.168.178.1" -password 'GeheimesPasswort' -commands 'ls -la','free'
Ausgabe
Ausgegeben wird der gesamte Output der Befehle.
Hinweise
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.
Eine Übersicht der möglichen Telnet-Befehle für die Fritzbox findet man auf folgenden Seiten:
- 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
Updates
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: 05.04.2025 um 19:04 Uhr