Forum: PC-Programmierung python3 tcp server


von he (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Sebastian R. (sebastian_r569)


Lesenswert?

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

von he (Gast)


Lesenswert?

Funktioniert nicht
1
if packet[0] > 0:

TypeError: '>' not supported between instances of 'bytes' and 'int'

von Dirk B. (dirkb2)


Lesenswert?

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.

von he (Gast)


Lesenswert?

Ok ich prüfe nun data_size > 0.
Trotzdem erhalte ich immer noch Nachrichten obwohl ich bewusst nichts 
versendet habe.

von Sebastian R. (sebastian_r569)


Lesenswert?

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

von he (Gast)


Lesenswert?

Nach wie vor werden Daten angezeigt obwohl ich nichts versendet habe.

von he (Gast)


Lesenswert?

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.

von Sebastian R. (sebastian_r569)


Lesenswert?

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?

von he (Gast)


Angehängte Dateien:

Lesenswert?

Hier der COde

von 🐧 DPA 🐧 (Gast)


Lesenswert?

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.

von he (Gast)


Lesenswert?

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)

von he (Gast)


Lesenswert?

Der TCP Server soll auf dem raspberry pi laufen. Da kann ich nicht 
Windows Wireshark benutzten.

von Sebastian R. (sebastian_r569)


Lesenswert?

he schrieb:
> Da kann ich nicht
> Windows Wireshark benutzten.

Und wie sieht es mit Unix Wireshark aus?

von 🐧 DPA 🐧 (Gast)


Lesenswert?

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.

von foobar (Gast)


Lesenswert?

Ein TCP-Server benutzt normalerweise einen SOCK_STREAM, keinen SOCK_RAW. 
Raw-Sockets sind ziemlich störrische Biester ...

von Michael D. (nospam2000)


Lesenswert?

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

von Rolf M. (rmagnus)


Lesenswert?

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
Noch kein Account? Hier anmelden.