Hallo und guten Morgen, für Testzwecke habe ich einen TCP Server zusammengestellt. Dieser zeigt alle Nachrichten an. Nun ist es so das in der while True Schleife das ganze extrem schnell durchrattert. Wenn nicht empfangen wird dann erscheint trotzdem b''. Was könnte ich tun damit nur die empfangen Daten angezeigt werden?
he schrieb: > Was könnte ich tun damit nur die empfangen Daten angezeigt werden? Vor der Verarbeitung prüfen, ob packet eine Größe >0 hat
Funktioniert nicht
1 | if packet[0] > 0: |
TypeError: '>' not supported between instances of 'bytes' and 'int'
he schrieb: > Funktioniert nicht > >
1 | > if packet[0] > 0: |
2 | >
|
> > TypeError: '>' not supported between instances of 'bytes' and 'int' Prüft man so die Länge von packet? Was ist mit **data_size** in dem Programm.
Ok ich prüfe nun data_size > 0. Trotzdem erhalte ich immer noch Nachrichten obwohl ich bewusst nichts versendet habe.
UNd das hier könnte für dich auch interessant sein, denn mit den dort beschriebenen Problemem wirst du danach zu tun haben: https://stackoverflow.com/a/1716173
Was ich eigentlich brauche ist nur eine Möglichkeit zu prüfen ob TCP Daten gesendet wurden. Quasi einen SNiffer Das mit tcpdump - i eth0 tcp funktioniertt ja auch nicht.
he schrieb: > Nach wie vor werden Daten angezeigt obwohl ich nichts versendet habe. Wie sieht dein Code denn jetzt aus mit Längen- und vor allem auch der Plausibilitätsprüfung der Pakete? he schrieb: > Quasi einen SNiffer Wireshark?
he schrieb: > Das mit tcpdump - i eth0 tcp funktioniertt ja auch nicht. tcpdump funktioniert definitiv. (Es sollte übrigens -i sein, nicht - i. Und es muss natürlich das richtige Interface angegeben werden. Bei 127.0.0.1 wäre das normalerweise lo). Bei dem hier: https://www.mikrocontroller.net/attachment/highlight/559996 Fehlt da nicht noch was? Normalerweise hat man doch listen(), um auf Verbindungen zu warten, und Accept, um diese anzunehmen, daten liest man dann von der Verbindung zum Client. Und dann noch an die Mods, da scheint ein Bug im Forum zu sein. https://www.mikrocontroller.net/attachment/highlight/559996 (Codeansicht) und https://www.mikrocontroller.net/attachment/559996/python_tcp_server.py (raw/Download) zeigen nicht den selben Code.
Ja das mit bind und listen funktioniert bei mir auch nicht. Entweder es erscheint die Meldung
1 | Traceback (most recent call last): |
2 | File "tcpServer2.py", line 12, in <module> |
3 | sock.listen(5) |
4 | OSError: [Errno 95] Operation not supported |
python script:
1 | import socket |
2 | import sys |
3 | |
4 | sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) |
5 | |
6 | host = socket.gethostname() |
7 | |
8 | server_address = (host, 50000) |
9 | sock.bind(server_address) |
10 | |
11 | sock.listen(5) |
Der TCP Server soll auf dem raspberry pi laufen. Da kann ich nicht Windows Wireshark benutzten.
he schrieb: > Da kann ich nicht > Windows Wireshark benutzten. Und wie sieht es mit Unix Wireshark aus?
he schrieb: > Der TCP Server soll auf dem raspberry pi laufen. Da kann ich nicht > Windows Wireshark benutzten. Wenn du dem tcpdump Commando "-w test.pcap" mitgibst, kannst du die test.pcap nachher im Wireshark öffnen.
Ein TCP-Server benutzt normalerweise einen SOCK_STREAM, keinen SOCK_RAW. Raw-Sockets sind ziemlich störrische Biester ...
foobar schrieb: > Raw-Sockets sind ziemlich störrische Biester ... und benötigen spezielle Rechte, d.h. du müsstest dein Programm z.B. als user 'root' laufen lassen. Michael
he schrieb: > Trotzdem erhalte ich immer noch Nachrichten obwohl ich bewusst nichts > versendet habe. Wenn du einen Raw-Socket aufmachst, bekommst du eben die Rohdaten und nicht nur deine Nutzdaten. he schrieb: > Der TCP Server soll auf dem raspberry pi laufen. Da kann ich nicht > Windows Wireshark benutzten. Warum willst du denn auch ausgerechnet die Windows-Version benutzen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.