2009-04-20 8 views
6

Ich portiere eine Kommunikationsbibliothek von Linux zu Windows. Ich weiß, was mein Ansatz zum größten Teil ist. Die Bibliothek verwendet alle Roh-Ethernet-Rahmen für die gesamte Kommunikation.Raw Ethernet Frames mit Winsock

Die Bibliothek, von der ich portiere, verwendet die PF_PACKET-Familie und die Struktur sockaddr_ll. Nach dem Durchsuchen der MSDN Winsock-Site habe ich keine entsprechende Familie/Struktur gefunden. Was soll mein Ansatz hier sein?

Ich habe ein paar Ideen, aber ich bin mir nicht sicher, ob sie gute Ideen sind Ich könnte PF_UNSPEC, für nicht näher bezeichnet. Ich könnte einfach übergeben die Nummer PF_PACKET darstellt (es ist ein unsigned kurz) Ich könnte auch nur meine eigene Sockadddr_ll-Struktur in Windows.

Keine dieser Ideen scheinen mir gut, sie scheinen nur wie Hacks, die nicht wirklich funktionieren werden.

Wenn jemand irgendwelche Vorschläge hat, würde ich es begrüßen.

Antwort

3

Ich nehme an, Sie beziehen sich auf Raw Sockets (wo Sie die Netzwerkschicht, Transportschicht und Anwendungsebene Informationen schreiben müssen). Neue Windows-Versionen (ab XP SP2) haben eine eingeschränkte Unterstützung für Raw-Sockets mit vielen Einschränkungen.

More info (nach unten scrollen zu „Einschränkungen auf Raw Sockets“)

Die Lösung, glaube ich, ist WinPcap, zu verwenden, die Sie send raw packets auf diesen Systemen ermöglicht.

+0

ok, die Einschränkungen für rohe Sockets gelten nicht für mich. Meine Anwendung geht nur so hoch wie die zweite Schicht. Das heißt, ich muss nur Ethernet-Frames rendern/empfangen, es wird kein TCP/UDP/IP benötigt. – devin

+1

Eigentlich tut es das. Schauen Sie sich das Beispiel an und senden Sie rohe Pakete mit WinPcap, und Sie werden finden, was Sie brauchen :) – Aziz

+0

Nichts unter Schicht 3 ist in den Fenstern erlaubt. – Aziz