Seite 1 von 1
tcpdump als Datenvolumenlogger
Verfasst: Dienstag 15. Juni 2021, 13:24
von Domroon
Hi Leute,
ich weiß, dass hat nichts direkt mit Python zu tun deswegen stelle ich die Frage hier im Offtopic-Bereich..
Ich möchte einen LTE-Stick an einem Raspberry Pi betreiben und gerne mitschneiden wie viele Megabyte an Daten gesendet und empfangen werden um das Datenvolumen (mit einem Python Script?) zu berechnen welches in einem Monat schon verbraucht wurde. Die Datenpakete möchte ich mithilfe des Kommandozeilentools "tcpdump" mitschneiden und die wahrscheinlich im Ausgabestring enthaltene Datenpaketgröße "herausschneiden" und abspeichern. (bzw. die Eingabeparameter so weit anpassen bis mir nur noch die Datenpaketgröße ausgegeben wird wenn das geht)
Bevor ich mit dem programmieren anfange wollte ich einmal fragen ob dies grundsätzlich so möglich ist wie ich mir das Vorstelle und ob "tcpdump" überhaupt dafür geeignet ist. Oder gibts da vielleicht auch schon einen fertigen Datemvolumenberechner? Ich habe zumindest nirgends was gefunden..
Vielen Dank schonmal für eure Antworten

Re: tcpdump als Datenvolumenlogger
Verfasst: Dienstag 15. Juni 2021, 14:19
von __deets__
Das ist in etwa so als ob du zum zählen von Besuchern kein Drehkreuz, sondern immer erstmal eine Magendarmspiegelung vornimmst. Geht auch. Ist aber völlig unverhältnismäßig.
Der Kernel führt Buch über die Menge an Daten, die über ein Interface gegangen sind. Tools um sich das anzuschauen wären zb iostat, nmeter oder auch „nur“ die Ausgabe von ifconfig.
Re: tcpdump als Datenvolumenlogger
Verfasst: Dienstag 15. Juni 2021, 14:59
von Domroon
@__deets___
super! genau das was ich gesucht habe, cool das der Kernel von sich aus loggt

Vielen Dank!
Re: tcpdump als Datenvolumenlogger
Verfasst: Dienstag 15. Juni 2021, 15:07
von __blackjack__
Wenn man das von Python aus abfragen möchte, geht das beispielsweise mit dem `psutils`-Modul mit der `net_io_counters()`-Funktion. Entweder für alle Schnittstellen, oder als Wörterbuch das Schnittstellennamen auf die Zählerstände für die jeweilige Schnittstelle abbildet.
Re: tcpdump als Datenvolumenlogger
Verfasst: Dienstag 15. Juni 2021, 16:45
von Domroon
@__blackjack__: noch besser! Die Funktion des Moduls werde ich auf jeden Fall verwenden. Ich will natürlich so viel wie geht in Python schreiben

Super, vielen Dank! Dann steht meinem Projekt ja nun nichts mehr im Wege

Ich halte euch auf jeden Fall auf dem laufendem

Kann nur etwas dauern, da dies Teil eines größeren Projektes werden soll.
Re: tcpdump als Datenvolumenlogger
Verfasst: Dienstag 15. Juni 2021, 17:24
von narpfel
Re: tcpdump als Datenvolumenlogger
Verfasst: Dienstag 15. Juni 2021, 19:32
von Domroon
@narpfel: Danke auch Dir
Mithilfe von psutil habe ich schonmal geschaut, dass ich die Internetgeschwindigkeit messen kann. Ich habe zum testen meines Programms den Google Speedtest mehrmals durchlaufen lassen. Scheint recht genau zu sein, falls ich nicht wieder einen gravierenden Rechenfehler gemacht habe wie ihr ihn so oft aufdeckt. Meistens sind die Dinge ja nicht so wie sie scheinen
Hier mein Code:
Code: Alles auswählen
import psutil
import time
def calculate_up_down_speed(interface):
t1 = time.time()
connection_statistics = psutil.net_io_counters(pernic=True)
megabit_sent_first = (connection_statistics[interface].bytes_sent*8)/1000000
megabit_recv_first = (connection_statistics[interface].bytes_recv*8)/1000000
time.sleep(1)
connection_statistics = psutil.net_io_counters(pernic=True)
megabit_sent = (connection_statistics[interface].bytes_sent*8)/1000000
megabit_recv = (connection_statistics[interface].bytes_recv*8)/1000000
t2 = time.time()
megabit_per_sec_sent = (megabit_sent - megabit_sent_first)/(t2-t1)
megabit_per_sec_recv = (megabit_recv -megabit_recv_first)/(t2-t1)
return megabit_per_sec_sent, megabit_per_sec_recv
def main():
while True:
upload_speed, download_speed = calculate_up_down_speed('WLAN 2')
print(f"Upload: {round(upload_speed, 2)} Mbit/s")
print(f"Download: {round(download_speed, 2)} Mbit/s")
print()
if __name__ == '__main__':
main()
Re: tcpdump als Datenvolumenlogger
Verfasst: Mittwoch 16. Juni 2021, 08:12
von rogerb
@Domroon,
Wenn es nur darum geht die Zahlenausgabe auf zwei Nachkommastellen zu runden, bietet die String - Format "Mini Language" mächtigere und performantere Möglichkeiten:
https://docs.python.org/3/library/strin ... i-language
Z.B.:
Code: Alles auswählen
print(f"Upload: {upload_speed:0.2f} Mbit/s")
print(f"Download: {download_speed:0.2f} Mbit/s")
Ich finde das auch wesentlich lesbarer.
Für Messungen von relative kurzen Zeitabständen bietet sich die präzisere Methode 'time.perf_counter()' an:
https://docs.python.org/3/library/time. ... rf_counter
Die zweite Zeitmessung würde ich direkt nach dem Holen der neuen Werte machen, da du sonst minimale Ungenauigkeit durch die zusätzliche Zeit für die Umrechnung bekommst.
Grundsätzlich würde ich die Umrechnungen auch ganz aus der Messung herausziehen und erst bei der Ausgabe vornehmen.
Die runden Klammern bei der Multiplikation und Division sind auch überflüssig.
1 B/s = 8E-6 Mbit/s
Viel Spass beim Messen!
Re: tcpdump als Datenvolumenlogger
Verfasst: Montag 21. Juni 2021, 21:08
von Domroon
@rogerb:
super, danke Dir für die Tipps
