pyshark mit python öffnen, Ringbuffer erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fabio
User
Beiträge: 4
Registriert: Dienstag 25. August 2020, 11:02

Hallo zusammen,

ich versuche gerade über Python PyShark zu öffnen. Ich habe über Simple GUI eine grafische Oberfläche erstellt, um die Anwendung über einen Button zu öffnen.
Funktioniert alles soweit. Aufzeichnung startet, jedoch läuft alles über einen Kern d.h. meine GUI reagiert nicht mehr und ich muss das Programm über die Konsole schließen. Das Abspeichern der Datei funktioniert dann auch problemlos. Ich arbeite über die bib pyshark. Bei subprocess gibt es die Funktion popen, gibt es das auch was für Pyshark?
dankbar für alle Lösungsvorschläge
ps Python Neuling :lol:


Kleiner Ausschnitt aus meinem Code
Alles aus kommentierte sind Versuche, da habe ich es auch schon mal mit subprocess versucht, da hat es auch schon funktioniert jedoch konnte ich nur das Programm öffnen und konnte nicht direkt eine Aufzeichnung starten.

und gleich als nächstes würde ich gerne noch einen Ring Buffer erstellen. Alles schon in einer PowerShell ausprobiert bekomme es jedoch nicht in Python hin.

while True:
(event, value) = fenster.read()

print(event)

if event == buttonStartRecord:

#wireSharkRootPath = r"C:\Program Files\Wireshark\Wireshark.exe"
# subprocess.Popen([wireSharkRootPath])

capture = pyshark.LiveCapture("Ethernet", only_summaries=True,output_file=r"C:\Users\xxxx\Desktop\WireShark\Mein_erster_test.pcapng")
# capture = pyshark.LiveRingCapture(interface="WLAN",only_summaries=True,ring_file_name= r"C:\Users\xxxx\Desktop\WireShark\log.pcapng")
# capture.sniff(timeout=50)
for packet in capture:
print(packet)

elif event == "Programm Beenden" or event == sg.WIN_CLOSED:
break
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Das Problem ist die GUI. Jedes mir bekannte GUI-Rahmenwerk benutzt eine Hauptschleife, die dafür sorgt, dass die GUI gezeichnet wird. Diese darf man am besten gar nicht - wenn überhaupt nur wirklich kurz - unterbrechen.
Du schickst hier dein Programm aber in eine Endlosschleife. Die GUI kann also nicht mehr reagieren.

Programmierung von GUIs ist nicht trivial. Da wirst du dich - je nach Rahmenwerk - intensiv einarbeiten müssen.
Verzichte vorerst auf eine Oberfläche und schreib ein Konsolenprogramm, bis du die Grundlagen behrrscht.
fabio
User
Beiträge: 4
Registriert: Dienstag 25. August 2020, 11:02

hey hey,

erst mal danke für die Antwort. Leider schreibe ich gerade meine Technikerarbeit und es ist die Vorgabe das es eine GUI geben muss, das heißt ich komme leider nicht drum herum.
Als Konsolen Programm habe ich es schon geschrieben.

grüße Fabio
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@fabio: IMHO versuchst Du mit Simple GUI schon Dich um GUI-Programmierung zu drücken, denn das versucht die ereignisbasierte Programmierung wieder in einen linearen Programmablauf zu zwängen. Wenn das aber sowieso nicht geht, weil Du selbst *dann* noch nebenläufige Programmierung braucht, kannst Du auch ein ganz normales GUI-Rahmenwerk verwenden, was nicht versucht Komplexität zu verstecken.

Du wirst objektorientierte Programmierung (OOP) brauchen, nebenläufige Programmierung mit Threads, und den jeweiligen Mechanismus des verwendeten GUI-Rahmenwerks um zwischen den Threads zu kommunizieren. Denn neben der Anforderung, dass man bei GUI-Rahmenwerken immer nur kurz auf Ereignisse reagieren darf, und da keinen blockierenden Code bei der Ereignisbehandlung haben darf, haben solche Rahmenwerke auch die Anforderung, dass die GUI selbst nur in dem Thread manipuliert werden darf, in dem die GUI-Hauptschleife läuft.

Nachtrag: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten