Implementieren Sie Raw Ethernet in Winsock
-
13-09-2019 - |
Frage
Ich mache ein Projekt, bei dem ich benutzerdefinierte Pakete herstellen muss. Das heißt, ich muss die Kontrolle über jeden Paketheader haben. Ich versuche dies mit Sockets zu tun. Grundsätzlich muss ich Folgendes tun:
SOCKET s = socket(PF_UNSPEC, SOCK_RAW, ethernet_type);
Das Ethernet_Type ist etwas, das nicht standardisiert ist, wie 0xaaaa. Ich benutze htons (). Außerdem ist es mir sehr vorzuziehen, WinPCap nicht zu verwenden.
Im Moment erhalte ich Fehler 10043, Protokoll nicht unterstützt.
Die Fehlermeldung scheint darauf hinzudeuten, dass ich das Protokoll in mein System konfigurieren kann, aber ich habe keine Ahnung, wie das geht.
Es sagt:
Protokoll nicht unterstützt. Das angeforderte Protokoll wurde nicht in das System konfiguriert oder es gibt keine Implementierung dafür. Ein Socket -Anruf fordert beispielsweise einen Sock_dgram -Socket an, gibt jedoch ein Stream -Protokoll an.
Es gibt hier ein paar verschiedene Probleme. Wenn also jemand überhaupt Input hat, würde ich es wirklich zu schätzen wissen.
Andere Tipps
Ich denke, dass es ziemlich schwierig ist, neue Protokolle zum Socket -Anruf hinzuzufügen. Sie müssen sicherstellen, dass der Socket diesen Anruf unterstützt. Ich denke, Sie müssten die Socket -Funktion neu kompilieren und ich denke nicht, dass sie unter Windows leicht möglich ist.
Wenn Sie benutzerdefinierte Pakete basteln, müssen Sie kein neues Protokoll erstellen
Ich denke, dass die richtige Art der Angabe einer rohen Steckdose so ist
SOCKET s;
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
Wenn Sie wirklich versuchen, mit Raw Ethernet zu spielen, wie Ihre Variablennamen vorschlagen, verwenden Sie entweder den WinPCap -Treiber oder schreiben Sie Ihr eigener Fahrer
Ich glaube nicht, dass es eine andere "einfache" Lösung für Raw Ethernet gibt. WinpCap ist ziemlich einfach, also möchten Sie es sich vielleicht ansehen