TCP Port der Fritz Box abhören?

  • Hallo,

    ich habe nun schon erste Erfahrungen mit Autoit gemacht und es ist wirklich ein täglicher Helfer geworden. Nun würde ich gerne einen eigenen kleinen Anrufmonitor für die Fritzbox schreiben. Die Box kann ja auf Port 1012 abgehört werden. Habe nun schon mal versucht mit den Funktionen TCP... zu arbeiten aber irgendwie klappt da nichts. Ist diese Funktion überhaupt möglich?

    Gruß
    pino

  • Die Frage ist WIE und WAS willst du da abhören?

    Ich denke, dass es da bestimmt eine Statusseite in Form einer Webseite gibt. Die Box wird wohl kaum per Broadcast ihre Anruferdaten ins Netzwerk posaunen ^^

    Also Webinterface nutzen, Einloggen - Daten abfragen, du kansnt ja AutoIt dann benutzen, um dir die Daten aus der Website zu ziehen. Das wäre wohl das Einfachste denke ich ;)

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • hmmm, da hast Du nicht unrecht was den Broadcast angeht ;)
    Wie verbindet man sich denn zu einem Port und fragt dann folgende Daten ab?
    Ausgehende Anrufe: datum;CALL;ConnectionID;Nebenstelle;GenutzteNummer;AngerufeneNummer;
    Eingehende Anrufe: datum;RING;ConnectionID;Anrufer-Nr;Angerufene-Nummer;
    Zustandegekommene Verbindung: datum;CONNECT;ConnectionID;Nebenstelle;Nummer;
    Ende der Verbindung: datum;DISCONNECT;ConnectionID;dauerInSekunden;

    Ich denke das ich nur den Grundaufbau bzw. einmal das Verständnis benötige und den Rest dann umsetzen kann.

    Gruß
    pino

  • ein Blick in die Hilfe offenbart folgendes:

    TCPStartup

    TCPConnect

    TCPSend / TCPRecv

    TCPShutdown

    schau dir am Besten das Client/Server Beispiel an, damit hast du eigentlich alles was du brauchst

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • Genau an diesem Beispiel verzweifel ich... :(
    Ich dachte mir das es ungefähr so geht:

    [autoit]


    $IP = "192.168.2.1"

    [/autoit][autoit][/autoit][autoit]

    TCPStartUp()

    [/autoit][autoit][/autoit][autoit]

    $socket = TCPConnect( $IP, 1012 )

    [/autoit][autoit][/autoit][autoit]

    While 1
    ToolTip("Info: " & $IP & $socket ,10,10)
    Sleep(1000)
    WEnd

    [/autoit]

    Mir fehlt einfach der Durchbruch wie ich an die Info komme :wacko:
    Kannst Du mir sagen wie ich nach dem Aufbau der IP-Verbindung die Info abrufen muss?

  • Ohne die Box wohl kaum - und ich denke nach wie vor nicht, dass dir die Box ohne Authentifizierung irgendetwas sagen wird.

    Es sei denn sie hat einen speziellen Management Port (Serieller Anschluss / Com Port ...)

    Und in deinem Beispiel wird nichts gesendet oder empfangen.

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • Ich hatte auch schon das Bsp. von Funktion TCPRecvTCPRecv genutzt aber auch dieses hat leider nicht geklappt.
    Naja, schade. Hatte mir das ganze ein wenig simpler vorgestellt.

  • Nein ist es nicht!

    Mit TCPRecv ($socket, 2048) könntest Du z.B. gucken was gesendet wird. Kannst ja mal versuchen dich z.B. über Port 21 an einem FTP Server anzumelden. Bzw. gucken was der Server die so zur Begrüßung sendet.
    ---
    Nur da du keine Ahnung hast, WAS die Box von dir hören will ...

    Nutze also das Webinterface ;)

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • Du könntest auch per Telnet auf eine Fritz!Box zugreifen.
    Standardmäßig ist dies deaktiviert und läßt sich per Telefon einschalten:

    #96*7* Telnet an
    #96*8* Telnet aus

    Das mit Port 1012 sollte eigentlich funktionieren, darüber läuft z.B auch jFritz .
    (braucht natürlich das Paßwort)

    Läßt sich auch der wieder per Tel- umschalten:
    #96*5* an
    #96*4* aus

  • Bin jetzt einen Schritt weiter. Wenn ich mit Putty eine Verbindung öffne auf die IP und Port 1012 erscheinen sofort die Infos ohne Passworteingabe. Nun meine Frage ann alle Autoit-Profis. Kann ich hier etwas vergleichbares aufrufen?
    02.04.09 13:51:06;CALL;1;4;12345;67890;SIP0;
    02.04.09 13:51:07;DISCONNECT;1;0;

    Einmal editiert, zuletzt von pino (2. April 2009 um 13:54)

  • @pino
    hier mal mein Code Schnipsel um die Anrufe der Fritz in ein Array zu packen.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #AutoIt3Wrapper_Res_Fileversion=81207.0.0.3

    [/autoit] [autoit][/autoit] [autoit]

    #include <array.au3>
    #include <SQLite.au3>
    #include "_ArrayMultiDisplay.au3"

    [/autoit] [autoit][/autoit] [autoit]

    #include<StaticConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #include<StructureConstants.au3>
    #include<WindowsConstants.au3>
    #include <GUIListView.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hQuery, $aRow, $bRow, $a[1] = [0], $aTmp[1] = [0]
    $sEigeneVorwahl = "040"
    Global $ACurrentItem[2], $sTitle, $hListView, $sID, $sSpaltenName

    [/autoit] [autoit][/autoit] [autoit]

    If $CmdLine[0] = 0 Then
    $obj = ObjCreate ("winhttp.winhttprequest.5.1")

    [/autoit] [autoit][/autoit] [autoit]

    $obj.open ("POST", "http://fritz.box/cgi-bin/webcm", False)
    $obj.SetRequestHeader ("Content-Type", "application/x-www-form-urlencoded")
    $POST = "getpage=../html/de/menus/menu2.html&var%3Alang=$LANG&var%3Amenu=fon&var%3Apagename=foncalls&login%3Acommand%2F" _
    & "password=DeinPasswort"
    ; Telefonbuch http://fritz.box/cgi-bin/webcm?…ar%3Aweckernr=1
    ;$POST = "getpage=../html/de/FRITZ!Box_Anrufliste.csv&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=$LANG&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=fon&var%3Apagemaster=&time%3Asettings%2Ftime=1136559837%2C-60"
    ;$POST &= "DeinPasswort"
    $obj.Send($POST)

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(0,"",$obj.ResponseText)
    $obj.open ("POST", "http://fritz.box/cgi-bin/webcm", False)
    $obj.SetRequestHeader ("Content-Type", "application/x-www-form-urlencoded")
    $POST = "getpage=../html/de/FRITZ!Box_Anrufliste.csv&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=fon&var%3Apagemaster=&time%3Asettings%2Ftime=1136559837%2C-60"
    $obj.Send($POST)
    ;If FileExists("dummi.txt") Then FileDelete("dummi.txt")
    ;~ XXXXXXXX FileWrite("f:\admin\fritz\auTelefonListe.txt", $obj.ResponseText)
    $aTmp = StringSplit($obj.ResponseText, @LF)
    ;~ _ArrayDisplay($aTmp)
    _ArrayDelete($aTmp, 0) ; => Anzahl der Array Eintäge
    _ArrayDelete($aTmp, 0) ; => sep;
    _ArrayDelete($aTmp, 0) ; => Typ; Datum; Name; Rufnummer; Nebenstelle; Eigene Rufnummer; Dauer
    ;_ArrayDisplay($aTmp)
    For $iI = 1 To UBound($aTmp)-1 ; Seit Firmware-Version 54.04.63-12365 werden zwei @LF pro Datensatz geliefert
    ConsoleWrite (Asc(StringLeft($aTmp[$iI], 1)) & @LF)
    If Not Asc(StringLeft($aTmp[$iI], 1)) = 0 Then _ArrayAdd($a, $aTmp[$iI]) ; $a[0] ; => Anzahl der Array Eintäge
    Next
    Else
    $a[0] = "1;15.09.08 12:43;;04071312345;Anrufbeantworter;040890123456;0:12"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDelete($a, 0) ; => Anzahl der Array Eintäge
    ;~ _ArrayDisplay($a)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    Gruß Paule

  • ...wenn man weiss wie es geht :-))

    [autoit]


    ; Port 1012 für Fritzbox abhören.

    [/autoit][autoit][/autoit][autoit]

    #include <GUIConstants.au3>
    Local $GUI_SS_DEFAULT_EDIT, $ES_READONLY

    [/autoit][autoit][/autoit][autoit]

    TCPStartup ()
    GuiCreate("Telnet Client", 500, 390,-1, -1 )

    [/autoit][autoit][/autoit][autoit]

    $Edit = GuiCtrlCreateEdit("", 10, 10, 480, 330,$GUI_SS_DEFAULT_EDIT + $ES_READONLY)

    [/autoit][autoit][/autoit][autoit]

    $Host = "192.168.2.1"
    $PortI = "1012"

    [/autoit][autoit][/autoit][autoit]

    GUISetState ()

    [/autoit][autoit][/autoit][autoit]

    ;Mit Host Connecten
    $Conection = TCPConnect ( $Host, $PortI )
    If @error Then Exit

    [/autoit][autoit][/autoit][autoit]

    While 1
    $msg = GuiGetMsg()
    If $msg = $GUI_EVENT_CLOSE And ( MsgBox(36,"AutoIt Telnet","Sitzung wirklich beenden?") = 6 ) Then Exit
    $recv = TCPRecv ( $Conection,2048 )

    If $recv <> "" Then
    $recv = StringReplace($recv, @LF, @CRLF)
    $recv = StringReplace($recv, @CRLF&@CR, @CRLF)
    $text = GUICtrlRead ( $Edit )
    GUICtrlSetData ( $Edit,$text & $recv)
    GUICtrlSendMsg($edit, 0x00B7,0,0)

    EndIf

    [/autoit][autoit][/autoit][autoit]

    WEnd

    Func OnAutoItExit()
    TCPCloseSocket($Conection)
    TCPShutdown()
    EndFunc

    [/autoit]

    Jetzt müßte ich es nur noch schaffen das es auch nach einem Standby noch funktioniert und ich wäre glücklich 8o

  • Freut mich Du auch so begeistert bist ;)
    Hast Du evtl eine Idee wie das ganze einen Standby überlebt?
    Wenn der PC aus seinem schlaf erwacht wird leider nichts mehr angezeigt...

  • Das denke ich auch. Hab ich denn die Möglichkeit abzufragen ob die Verbindung noch besteht?

    • Offizieller Beitrag

    Ich hatte heute die Möglichkeit, das Script von pino (Post #13) an einer "FritzBox 7270" auszuprobieren und muss leider sagen, dass es dort nicht funktioniert (kein Connect, beendet sich sofort wieder).
    Hier bei mir mit einer 7170 funktioniert es einwandfrei. Jemand 'ne Idee, waran das evtl. liegen kann? Falscher Port? Oder wurde dort etwas grundlegend geändert?