Forum: PC-Programmierung Virtueller Netzwerkadapter programmieren


von Iceman (Gast)


Lesenswert?

Hallo,

hab folgendes Problem:

ich würde gerne einen virtuellen Netzwerkadapter mit C softwaremäßig 
implementieren. Ich hab irgendwo gelesen, dass es möglich ist, Daten von 
einem virtuellen Netzwerkadapter mithilfe einer VPN-Software zu 
verschlüsseln und einer physikalischen Netzwerkkarte zu übergeben. Hat 
jemand Erfahrung wie eine solche VPN-Software aufgebaut ist, bzw. Ideen 
wie man sowas programmieren könnte? Mein Ziel ist es IP-Pakete zu 
verschicken ohne Ethernet-Rahmen, sondern mit einem eigenen Schicht 
2-Rahmen/Protokoll.
Könnte das vlt. auch mit WinSock funktionieren bzw. mit einer 
Open-Socket-Programmieren (gibt es sowas?)
Vlt. auch eine Art Windows-/Linus-Treiber-Programmierung?

Über Ideen und Anregungen wäre ich sehr erfreut;)
Schönes WE euch!

von ozo (Gast)


Lesenswert?

Als Einstiegslektüre empfehlen wir Ihnen heute:
http://www.xml.com/ldd/chapter/book/ch14.html

von Iceman (Gast)


Lesenswert?

Vielen Dank erstmal.

Ich werd zunächst mal sehen, ob das was für mich ist;)

Grüße

von Iceman (Gast)


Lesenswert?

Ist sowas vlt. auch unter Windows möglich? Die Hardware, die ich 
verwende, verwendet wiederum Windows-kompatible Software bzw. Quellcode 
der nur Windows-spezifisch ist (Zum Beispiel wird die WinAPI teilw. 
verwendet).

Kann mir da jmd. helfen?

Vielen Dank

von Stephan M. (stephanm)


Lesenswert?

Iceman schrieb:
> Mein Ziel ist es IP-Pakete zu
> verschicken ohne Ethernet-Rahmen, sondern mit einem eigenen Schicht
> 2-Rahmen/Protokoll.
> [...] Linus [...]

Unter Linux gibts tun/tap, damit kannst Du virtuelle Netzwerkadapter 
erzeugen, die Daten landen dann in Deinem Programm. Handhabung ist 
einfach, Dokumentation in den Manual Pages ausreichend. Wird IIRR von 
manchen VPN-Implementierungen verwendet.

Stephan

von Iceman (Gast)


Lesenswert?

Danke Stephan für die Info;)

Ich muss mich nochmal in meiner Fragestellung korrigieren. Es spielt bei 
meiner Übertragung keine Rolle, ob es sich um IP-Pakete handelt. Die 
Technologie sollte jedoch kompatibel zu Ethernet (802.3 oder 802.11) 
sein.
Dazu müsste ich dann das TAP verwenden. Kannst du OpenVPN empfehlen? Da 
soll das tun/tap schon dabei sein?

Viele Grüße

von Stephan M. (stephanm)


Lesenswert?

Iceman schrieb:
> Dazu müsste ich dann das TAP verwenden.

Jup.

> Kannst du OpenVPN empfehlen? Da
> soll das tun/tap schon dabei sein?

"tun/tap schon dabei sein" schön&gut, OpenVPN ist ja auch nur ne 
Software für einen gaaanz besonderen Zweck. Das heisst:

- Hinter "tun"/"tap" verstecken sich im Prinzip Treiber, die der 
Linux-Kernel zur Verfügung stellt. Was Du/er/sie/es damit anfänsgt 
bleibt Dir/ihm/ihr/ihnen überlassen.

- OpenVPN nutzt tap zur Übertragung von Datenpaketen gemäß des 
GRE-Protokolls. Das ist eine mögliche Anwendung des tap-Devices. Wie 
auch immer man griffig auf Deutsch sagen würde, im englischen hiesse es 
in etwa "OpenVPN complements the kernel-side tap device with user-space 
functionality to build up a virtual private network between two (or 
more) peers". (Das Wort des Tages ist hier `complements'). Sprich: tap 
ist ein generischer (d.h. allgemein verwendbarer kernelseitiger 
Gerätetreiber) und OpenVPN eine Userspace-Anwendung, die dieses Gerät in 
spezieller Weise benutzt und dabei auf ganz bestimmten Semantiken dieses 
Gerätes aufbaut.

In diesem Sinne bietet tap nur eine (von vielen) Möglichkeiten, quasi 
beliebige Datenpakete zu übertragen; tap ist halt IIRR auf 
Ethernet-Frames als Layer-X-Protokoll festgenagelt.

Wie das ganze unter Windows aussieht? Bestimmt ganz anders, keine Ahnung 
:-)

Stephan

von Iceman (Gast)


Lesenswert?

Danke Stephan, für die Infos.

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Auf youtube habe ich das Sample geholt.
einfach in youtube nach Winsocket suchen.
Gruss Holger.

von Holger (Gast)


Lesenswert?

Auf youtube habe ich das Sample geholt.
einfach in youtube nach Winsocket suchen.
Gruss Holger.

von Holger (Gast)


Lesenswert?

Multiclient Chat.
Gruss Holger.

von Holger (Gast)


Lesenswert?

Warum geht der Anhang nicht.

lvjlej



clödfvlkdfjvljlvje
Immer nach der Vorschau ist der Anhang weg.

von Iceman (Gast)


Lesenswert?

Hallo Stephan,

das Winsock Beispiel konnt ich problemlos runterladen;) Danke dafür. 
Allerdings wird mir das wahrscheinlilch nicht so sehr weiterhelfen, wenn 
ich doch unter Linux den virtuellen Netzwerkadapter programmiere... Ich 
werd mal sehen wie sich das entwickelt. Hast du noch 
Infos/Tools/Literatur über die tun/tap Geschichte, die mir weiterhelfen 
könnten?

Danke im Voraus

Gruss

von ... (Gast)


Lesenswert?

OpenVPN nutzt unter Windows ebenfalls tun/tap und bringt passenderweise 
den entsprechenden virtuellen Netzwerkkartentreiber TAP-Win32 gleich 
selbst mit.
Und dank Open Source kann man sich den dann auch noch im Quellcode 
anschauen.

Der Urahn von TAP-Win32 war wohl Cipe:
http://cipe-linux.sourceforge.net
http://cipe-win32.sourceforge.net


http://de.wikipedia.org/wiki/TUN/TAP
http://en.wikipedia.org/wiki/TUN/TAP

von Iceman (Gast)


Lesenswert?

Danke für die Info ;)

von Christoph P. (sirbundy)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
Ich bin beim stöbern auf diesen Thread gestoßen und habe eigentlich ein 
ganz ähnliches Problem wie Iceman. Um das Problem zu verdeutlichen habe 
ich schon mal ein Blockbild angehangen.
Ich möchte ebenfalls über Ethernet/IP von außen auf ein privates 
(drahtloses) Netzwerk mit eigenem Protokollstapel zugreifen. Dieses 
Netzwerk ist per USB-Adapter mit meinem Rechner (Linux) verbunden. Über 
ein zu erstellendes C-Programm soll nun eine Kommunikation zwischen 
eigenem drahtlosen Netzwerk und dem virtuellen Netzwerkadapter (VTUN) 
hergestellt werden (Übergabe der Nutzdaten, Hinzufügen/Entfernen der 
entsprechen Header etc.).
Meine Fragen sind nun eigentlich, ob dieser Denkansatz und die 
Verwendung eines virtuellen Netzwerkadapters richtig ist, und ob die 
Kommunikation und das Weiterleiten der Pakete zwischen virtueller und 
realer Netzwerkkarte automatisch (durch den Kernel oder VTun?!) 
übernommen wird?

Vielen Dank schon mal.

von Εrnst B. (ernst)


Lesenswert?

Christoph P. schrieb:
> ob die
> Kommunikation und das Weiterleiten der Pakete zwischen virtueller und
> realer Netzwerkkarte automatisch (durch den Kernel oder VTun?!)
> übernommen wird?

Ja, müssen halt entsprechende Routes, NAT rules, etc eingestellt sein.

Christoph P. schrieb:
> ob dieser Denkansatz und die
> Verwendung eines virtuellen Netzwerkadapters richtig ist

Eigentlich nicht. Was du willst ist eigentlich ein Kernel-Treiber der 
dein USB-Gerät als Netzwerk-Device verfügbar macht. Dein Ansatz kopiert 
die Daten erstmal über Tun/Tap vom Kernel- in den Userspace, nur damit 
der "Treiber" dort es wieder zurück, über die USB-Devicenodes, in den 
Kernel-Space verschiebt.

Wenn du das USB-Device selber entwickelst: Mal an CDC-Ethernet gedacht?

von Christoph P. (sirbundy)


Lesenswert?

Hallo Ernst und danke erstmal für die aufschlussreiche Antwort.
Ich hatte im Grunde auch schon die Ahnung, dass mein Weg etwas 
umständlich ist und es evtl. andere Umsetzungsmöglichkeiten gibt.
CDC Ethernet kannte ich noch nicht, werde ich mir am Montag aber 
gleichmal genauer anschauen und mich dann zur gegebenen Zeit 
zurückmelden.
Schönes Wochenende noch!

von Christoph P. (sirbundy)


Lesenswert?

Hallo,
Ich habe mir CDC Ethernet mal angeschaut. Da es eigentlich nicht 
angedacht ist, die USB-Firmware bzw. den Stack anzupassen (und um CDC 
Ethernet zu erweitern), ist das wohl nicht ganz der passende 
Ansatzpunkt.

Zweite Idee war folgende:
Zwar kann ich wohl auch von Haus aus dem Linux-Kernel sagen, dass er 
meinem USB-Gerät eine IP-Adresse geben soll und als Netzwerkgerät 
einhängt, müsste dann aber auch in diesem Fall wieder die 
Geräte-Firmware um einen IP-Stack erweitern. Hm, da beißt sich die Katze 
wohl ein bisschen in den Schwanz.
Gibt es keine reine PC-seitige Softwarelösung?

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.