Python sendto scheint nicht zu senden

Ich bin neu in Python und versuche, ein Byte-Array als Rohpaket über einen Socket zu senden. Meine IP ist192.168.0.116 und das Gerät, an das ich das sende, ist192.168.0.64. Dieses Client-Gerät ist ein Mikrocontroller-basiertes Gerät, das meinen Code ausführt, um einfach die Ethernet-Pakete zu durchsuchen und nach einem bestimmten Muster zu suchen. Ich verwende UDP-Pakete und habe versucht, mithilfe der clientseitigen Firmware 'Ostinato' auf meinem PC ein unformatiertes UDP-Paket zu senden. Ich verwende Wireshark, um den Netzwerkpaketfluss zu überwachen. Der Client scheint mit von Ostinato gesendeten Paketen gut zu funktionieren.

Wenn ich jedoch versuche, dasselbe Paket mit Python zu senden (mit den folgenden Raw-Paketen), werden die Bytes nicht ausgespuckt, da auf Wireshark nichts zu sehen ist und der Client keine Daten erhält. Aber der Rückgabewert vonsendto() ist richtig. Es sieht also so aus, als würde Python das Byte-Array einem Puffer zuführen, der gesendet werden soll (vom Betriebssystem?).

import socket
CLNT_UDP_IP = '192.168.0.64'
CLNT_UDP_PORT = 5005
svr_sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)

send_data = [0x00, 0x11...]
send_data_arr = bytearray (send_data)
svr_sock.bind (('192.168.0.116',0))  
bytes_send = svr_sock.sendto (send_data_arr, (CLNT_UDP_IP, CLNT_UDP_PORT))
svr_sock.close()

Ich habe die try-except-Blöcke aus Gründen der Übersichtlichkeit entfernt.

Eine andere Sache, die ich bemerkt habe, ist, dass das Schließen der Steckdose einige Zeit in Anspruch nimmt. Wenn ich die sendto-Anweisung auskommentiere, wird sie sofort beendet. Es scheint also, als ob der Socket close versucht, die Sendepuffer zu leeren, die das Paket nicht gesendet haben.

Irgendwelche Ideen

Antworten auf die Frage(2)

Ihre Antwort auf die Frage