fritzcap: Tool für Etherreal Trace und Audiodaten-Extraktion v2.0

bor2tom

Neuer User
Mitglied seit
14 Mrz 2011
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo,

es ist so weit! Nach langen "produktiven" Tests kann ich endlich mal die Version 2.0 von der fritzcap Tool vorstellen.

fritzcap ist ein "nichtkommerzielles Tool zur bequemen Erzeugung und Analyse von Etherreal/Wireshark Traces von AVM FritzBox und Speedport W701V sowie zur Extraktion der Audiodaten von VoIP Gesprächen".

fritzcap wurde ursprünglich von @spongebob als "close source" entwicklelt und ende 2010 als "open source" python Port zur verfügung gestellt (siehe da: http://www.ip-phone-forum.de/showthread.php?t=129725).

Hier kann die Version 2.0.0 heruntergeladen werden (Support für FritzBox bis Firmware 05.50):
Code:
[ATTACH]56527.vB[/ATTACH]
[ATTACH]56528.vB[/ATTACH]

Hier kann die Version 2.1.0 heruntergeladen werden (Support für FritzBox ab Firmware 05.50). Danke am @momc!:
Code:
[ATTACH]68454.vB[/ATTACH]
[ATTACH]68455.vB[/ATTACH]


Release notes Version 2.0:
- command line options added (see manual page)
- the monitor service added
- only capture of files added
- only parse of capture files added
- read the files to parse from the input stream added (pipe)
- write the debug and info log files added
- read the user config data from the config file added
- more advanced file/directory flexible naming added
- the logged phone numbers will be extended with the mapped phone number names ifrom the configuration file.
- workaround for the splited wav files added (see reduce_merge_audiofiles.py)
- the script to repair the cap files added (see repair_cap_file.py)



Hier einige Aufruf Beispiele:

Manual page:
Code:
$ fritzcap -h

usage: fritzcap [-h] [-v] [-c] [-d [file [file ...]]] [-m] [-p password]
                [--config_file path_to_file] [--logging_config path_to_file]
                [--box_name host_or_IP] [--call_service_port port]
                [--login_not_required] [--protocol protocol]
                [--cap_folder path_pattern] [--cap_file file_pattern]
                [--after_capture_time time_in_seconds]
                [--decode_workers_count int]

fritzcap - audio files analyse

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit

main arguments:
  -c, --capture_files   capture file/s. If the monitor option is not set, only
                        one file will be captured
  -d [file [file ...]], --decode_files [file [file ...]]
                        the list of captured files to decode. All the new
                        captures files will be decode automatically if the
                        --capture switch is set. Read the files from the
                        standard input if the list of files is empty and there
                        is no capture work.
  -m, --monitor_calls   start the call monitor mode. The CALL/RING/DISCONNECT
                        events will be used to start/stop the capture
                        automatically
  -p password, --password password
                        the password to login to the box. If not set and
                        --use_password is set to True, than the password will
                        be read from the console

extended defaults arguments:
  --config_file path_to_file
                        the fritzcap configuration file
                        (Default:'fritzcap.conf')
  --logging_config path_to_file
                        the fritzcap logging configuration file
                        (Default:'logging.conf')
  --box_name host_or_IP
                        the host name or IP address of the FritzBox
                        (Default:'fritz.box')
  --call_service_port port
                        the port number of the FritzBox call monitor telnet
                        service (Default:1012)
  --login_not_required  set this flag, if the login is not needed to connect
                        to the box
  --protocol protocol   the protocol to used to login to the FritzBox
                        (Default: 'http')
  --cap_folder path_pattern
                        the folder where the capture files will be stored
                        (Default:'captures/%(tcaps.Y-m-d/HMS)/')
  --cap_file file_pattern
                        the file name where the capture data will be saved
                        (Default:'capture.cap')
  --after_capture_time time_in_seconds
                        time in seconds how long the capture monitor should
                        still continue capture files after all calls were
                        finished (Default:10)
  --decode_workers_count int
                        the count parallel workers to decode captures files.
                        The minimal value is 1 (Default:2).

fritzcap in der Monitor-Modus starten, d.H.: Der Anrufmonitordienst (telnet service auf der FB) wird benutzt um die Aufzeichnungen automatisch zu starten/stoppen. "-c" steht für Aufzeichnung, "-d" steht für dekodieren und -m steht für Anrufüberwachung.
Code:
fritzcap -c -d -m


Ein "captured" Datei dekodieren:
Code:
fritzcap -d /tmp/captures/201012122121/captured.cap

Eine Liste von "captured" files über pipe (Standard Input) an der fritzcap parser übergeben:
Code:
ls /tmp/verz_mit_capdateien/ | fritzcap -d

Eine einfache Aufzeichnung (capture) starten. Aufzeichnung wird nach drücken der CTRL+C beendet:
Code:
fritzcap -c

Eine Aufzeichnung (capture) mit abschliessenden Dekodierung starten. Aufzeichnung wird nach drücken der CTRL+C beendet:
Code:
fritzcap -c -d

Eine Aufzeichnung (capture) mit abschliessenden Dekodierung + dynamisch erstellten Verzeichnis wo die Aufzeichnungsdateien gespeichert/dekodiert werden.
Code:
fritzcap -c -d --cap_folder "captures/%(tcaps.Y-m-d/HMS)"

tcaps - "capture" Startzeit
Y - Jahr
m - Monat, etc.
Siehe http://docs.python.org/library/datetime.html für andere Datetime Optionen.

Es besteht die Möglichkeit ein Konfigurationsdatei zu erstellen, z.B.: firtzcap.conf:
Code:
[settings]
# capture_files        =
# decode_files         =
# monitor_calls        =
# password             =

# logging_config       =
# box_name             = fritz.box
# call_service_port    = 1012
# login_not_required   =
# protocol             = http
cap_folder             = captures/%(tcaps.Y-m-d/HMS)/
cap_file               = capture_%(tcaps.YmdHMS).cap
# after_capture_time   = 10
# decode_workers_count = 2

default_login   = getpage=../html/de/menus/menu2.html&errorpage=../html/index.html&var:lang=de&var:pagename=home&var:menu=home&=&login:command/password=%s
sid_challenge   = getpage=../html/login_sid.xml
sid_login       = login:command/response=%s&getpage=../html/login_sid.xml
start_str       = ?start=1&start1=Start
stop_str        = ?stop=1&stop1=Stop

[phone_book]
8556694       = ZuHause
0448556694    = ZuHause
0177111222    = MeineFrau-Handy
0048177111222 = MeineFrau-Handy

welches Konfigurationsdatei benutzt wird, kann über Parameter "--config_file" gesteuert werden:
Code:
fritzcap -c -d --config_file myfritzcapconfig.conf

In der "logging.conf" Datei lassen sich die Logging-Konfiguration für die Konsole-, Info- und Debug- Ausgabedateien steuern (siehe: http://docs.python.org/release/2.5.2/lib/logging-config-fileformat.html für weitere Informationen).


Have fun and not forget:
It is not permitted by law to use the provided software for unauthorized recordings of SIP phone conversations.
 

Anhänge

  • fritzcap-2.0.0.tar.gz
    21.4 KB · Aufrufe: 420
  • fritzcap-2.0.0.zip
    36.7 KB · Aufrufe: 1,233
  • fritzcap-2.1.0.tar.gz
    21.3 KB · Aufrufe: 300
  • fritzcap-2.1.0.zip
    36.6 KB · Aufrufe: 1,214
Zuletzt bearbeitet:
Schön das das Projekt weitergeführt wird.
Bin gespannt was draus wird und werde mich im Rahmen meines Wissen und der Möglichkeiten an den Tests beteiligen.

Edit:
Eine kleine Bedienungsanleitung für deine Dateien wäre nicht schlecht.
Ein normaler Nutzer kann damit glaub ich nichts anfangen.
Oder das ganze in eine exe oder ähnlich packen.
 
Zuletzt bearbeitet:
Sehe ich auch so.

1. Schön, daß es weiterläuft, aber

2. Ein GUI wäre absolut ideal, ähnlich dem von Spongebob, welches bei einer der älteren Versionen dabei war.

Ich würde mich nicht als DAU bezeichnen, aber mit Python kann ich echt nichts anfangen.

Grüße,
FT
 
Wie sieht es mit der SessionID aus? Wird die jetzt automatisch ausgelesen oder muss man die immer noch manuell rausschreiben? ja ein win32 port mit dem automatischen start/stop skript von tomekz wäre ideal... ;) Ach ja..und kann es sein,dass die 7050 keine Capture Funktion bietet?
 
Zuletzt bearbeitet:
Installation python unter linux opensuse:
Code:
zypper install python

Installation python unter linux debian/ubunto:
Code:
aptitude install python

Installation python unter Windows:
http://www.python.org/ftp/python/2.7.1/python-2.7.1.msi
herunterladen -> installieren.

Die Skripte sind so vorbereitet, dass man nach auspacken der zip oder tar.gz Archivs damit sofort anfangen kann. Die Linux Benutzer schreiben einfach:
Code:
./fritzcap -c -d -m
in der Konsole.

die Windows Benutzer erstellen ein fritzcap.bat Datei mit folgender Inhalt:
Code:
python fritzcap.py -c -d -m
und klicken (doppelcklick) abschließend auf fritzcap.bat

Falls die FritzBox mit einem Password gesichert ist, dann soll der Password in der fritzcap.conf eingetragen werden.

Wie sieht es mit der SessionID aus? Wird die jetzt automatisch ausgelesen oder muss man die immer noch manuell rausschreiben? ja ein win32 port mit dem automatischen start/stop skript von tomekz wäre ideal... ;) Ach ja..und kann es sein,dass die 7050 keine Capture Funktion bietet?
die "-m" Option sorgt dafür das die Aufzeichnung automatisch gestartet/gestoppt wird, so wie in der Skript von @tomekz (er ist ein Klone von mir :rolleyes:) realisiert wurde. Diese Version ist viel weiter, da die Monitoring, Startet/Stoppen von der Aufzeichnung und Dekodieren voneinander unabhängig mittels Threads realisiert wurde. Die SessionID wird automatisch gelesen und benutzt.
 
SessionID - gähn ;) Auf jrden Fall schon seit der ersten Python Version drin, wenn nicht schon früher in einer der letzten Delphi Versionen...
 
Habe das Prog mal getestet. Bekomme nur 1kb cap Files, wenn die Fritzbox kein Passwort hat (login_not_required steht auf 1). Mit Passwort klappts! Einer eine Idee?
Sonst top! ;)
 
@bennykill
Ich vermute mal, das der Zugang zu Deiner Fritzbox ist mit einem Passwort gesichert ist. Wenn Du das Programm ohne Passwort startest, dann werden in der cap Datei keine Mitschnitte gespeichert, sondern nur der Fehlermeldung von der Fritzbox :doktor: Schaue einfach mit einem Editor in das cap Datei rein. Sollte etwas wie "not authorised" stehen.

Du kannst Dein Password in der Konfiguarationsdatei permanent speichern. Dann funktioniert es immer :D
 
[Edit frank_m24: Vollzitat vom Beitrag direkt darüber gelöscht, siehe Forumregeln.]

Wie geschrieben, habe ich die Fritzbox bewusst nicht mit einem Passwort gesichert! Da tritt das Problem auf! Wenn ein Passwort gesetzt ist, klappt es!
 
poste bitte hier der Inhalt der .cap Datei. Da soll der Fehlermeldung stehen.
 
Hier die Config:

[settings]
# capture_files =
# decode_files =
# monitor_calls =
# password =

# logging_config =
# box_name = fritz.box
# call_service_port = 1012
login_not_required = 1
# protocol = http
cap_folder = captures/%(tcaps.Y-m-d/HMS)/
cap_file = capture_%(tcaps.YmdHMS).cap
# after_capture_time = 10
# decode_workers_count = 2

default_login = getpage=../html/de/menus/menu2.html&errorpage=../html/index.html&var:lang=de&var:pagename=home&var:menu=home&=&login:command/password=%s
sid_challenge = getpage=../html/login_sid.xml
sid_login = login:command/response=%s&getpage=../html/login_sid.xml
start_str = ?start=1&start1=Start
stop_str = ?stop=1&stop1=Stop

Hier der Inhalt der .cap Datei:
Not authorized. Please login first..
 
Hey,


ich bekomme irgendwie das Capture nicht decoded. Das ist was im Log steht.



Code:
2011-07-13 16:04:52,750 [MainThread::5756 ] [INFO    ] [        fritzcap::<module>          ] FritzCap started.
2011-07-13 16:04:52,752 [MainThread::5756 ] [DEBUG   ] [        fritzcap::<module>          ] Command line parameters: ['X:\\StoreX\\Captures\\fritzcap-2.0.0\\fritzcap-2.0.0\\fritzcap.py', '-d', 'captures\\2011-07-13\\155716\\capture_20110713155716.cap']
2011-07-13 16:04:52,752 [MainThread::5756 ] [DEBUG   ] [        fritzcap::<module>          ] Parsed parameters:       Namespace(after_capture_time=10, box_name='fritz.box', call_service_port=1012, cap_file='capture_%(tcaps.YmdHMS).cap', cap_folder='captures/%(tcaps.Y-m-d/HMS)/', capture_files=None, config_file=<open file 'fritzcap.conf', mode 'r' at 0x024818B8>, decode_files=['captures\\2011-07-13\\155716\\capture_20110713155716.cap'], decode_workers_count=2, default_login='getpage=../html/de/menus/menu2.html&errorpage=../html/index.html&var:lang=de&var:pagename=home&var:menu=home&=&login:command/password=%s', logging_config='logging.conf', login_not_required=None, monitor_calls=None, password=None, protocol='http', sid_challenge='getpage=../html/login_sid.xml', sid_login='login:command/response=%s&getpage=../html/login_sid.xml', start_str='?start=1&start1=Start', stop_str='?stop=1&stop1=Stop')
2011-07-13 16:04:52,753 [MainThread::5756 ] [DEBUG   ] [  capfile_worker::__init__          ] CapfileWorker(worker_id:0, decode_work_queue:<Queue.Queue instance at 0x029B5C88>).
2011-07-13 16:04:52,753 [MainThread::5756 ] [DEBUG   ] [  capfile_worker::__init__          ] CapfileWorker(worker_id:1, decode_work_queue:<Queue.Queue instance at 0x029B5C88>).
2011-07-13 16:04:52,753 [  Thread-2::5680 ] [DEBUG   ] [  capfile_worker::run               ] Thread started.
2011-07-13 16:04:52,753 [  Thread-2::5680 ] [INFO    ] [  capfile_worker::process           ] Decode process started  (worker_id:1, file:'captures\2011-07-13\155716\capture_20110713155716.cap')
2011-07-13 16:04:52,852 [  Thread-1::992  ] [DEBUG   ] [  capfile_worker::run               ] Thread started.
2011-07-13 16:04:52,854 [  Thread-1::992  ] [DEBUG   ] [  capfile_worker::run               ] Became None element, put a None element to the queue for the others workers and break the work.
2011-07-13 16:04:52,854 [  Thread-1::992  ] [DEBUG   ] [  capfile_worker::run               ] Thread stopped.
2011-07-13 16:04:52,921 [  Thread-2::5680 ] [INFO    ] [  capfile_worker::process           ] Decode process finished (worker_id:1, file:'captures\2011-07-13\155716\capture_20110713155716.cap')
2011-07-13 16:04:52,921 [  Thread-2::5680 ] [DEBUG   ] [  capfile_worker::run               ] Became None element, put a None element to the queue for the others workers and break the work.
2011-07-13 16:04:52,921 [  Thread-2::5680 ] [DEBUG   ] [  capfile_worker::run               ] Thread stopped.
2011-07-13 16:04:53,953 [MainThread::5756 ] [DEBUG   ] [        fritzcap::<module>          ] There is no more active threads. Exiting.
2011-07-13 16:04:53,953 [MainThread::5756 ] [INFO    ] [        fritzcap::<module>          ] FritzCap finished.

Am Ende steht nur, fritzcap finished und es hat sich nichtsgetan. Weis einer was das Problem ist?
 
Version 2 - argparse missing

Habe heute mal die Version 2 ausgecheckt. Leider läuft die nicht unter Python 2.7.1 Windows. Module argparse is missing.

Also - fritzcap sollte irgendwie schon selfcontained sein oder zumindest die benötigten Module mitführen.
 
Hmmm. Läuft fritzcap denn auf freetz? Es gibt doch für freetz python laufzeitungebung oder nicht?

Hat das jemand schon mal ausprobiert?
 
Habe heute mal die Version 2 ausgecheckt. Leider läuft die nicht unter Python 2.7.1 Windows. Module argparse is missing.

Also - fritzcap sollte irgendwie schon selfcontained sein oder zumindest die benötigten Module mitführen.

Habe auf der Homepage des Projektes jetzt eine "Featured" Version zum Download abgelegt. Diese entspricht dem von mir initial eingecheckten Release 12, was funktional der GUI Version 1.9.0 entspricht. Daher auch die Version 1.9.1. Dieses Paket ist selfcontained und braucht nichts weiter, als ein Python 2.x.
 
Das funktioniert auch nicht.

Ich bekomme die folgende Fehlermeldung:

Code:
  File "X:\StoreX\Captures\fritzcap-1.9.1_r12\fritzcap-1.9.1_r12\fritzcap.py", l
ine 110, in main
    command = urllib.urlopen(protocol + '://' + boxname + '/cgi-bin/webcm', defa
ult_login % password)
  File "C:\Program Files (x86)\Python\lib\urllib.py", line 86, in urlopen
    return opener.open(url, data)
  File "C:\Program Files (x86)\Python\lib\urllib.py", line 207, in open
    return getattr(self, name)(url, data)
  File "C:\Program Files (x86)\Python\lib\urllib.py", line 435, in open_https
    h.endheaders(data)
  File "C:\Program Files (x86)\Python\lib\httplib.py", line 937, in endheaders
    self._send_output(message_body)
  File "C:\Program Files (x86)\Python\lib\httplib.py", line 797, in _send_output

    self.send(msg)
  File "C:\Program Files (x86)\Python\lib\httplib.py", line 759, in send
    self.connect()
  File "C:\Program Files (x86)\Python\lib\httplib.py", line 1140, in connect
    self.timeout, self.source_address)
  File "C:\Program Files (x86)\Python\lib\socket.py", line 553, in create_connec
tion
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
IOError: [Errno socket error] [Errno 11004] getaddrinfo failed
 
Da stimmt einfach die IP oder der Name der Box nicht ... Von alleine läuft das sicher nicht. Da musst Du schon etwas konfigurieren in der "Configuration" Sektion von Fritzcap.py
 
Ich habe IP und passwort der Box angepasst. Es kommt trotzdem der Fehler.
 
Tja, was soll ich sagen? Ich bin weder Support hier, noch sitze ich vor der Kiste. Die Fehlermeldung ist ___EINDEUTIG___ und weist auf ein Netzwerkproblem hin. Keine Verbindung, falscher Name, falsche IP, falsches Protokoll.... was weiss ich.
 

Statistik des Forums

Themen
246,084
Beiträge
2,245,795
Mitglieder
373,539
Neuestes Mitglied
Horst Fürst
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.