Mit VirtualNetwork kann auf Windows eine virtuelle Netzwerkskarte installiert werden, an der ein 4-Port-Switch simuliert wird. Über ein API können Pakete auf MAC-Ebenen auf den Switch-Port empfangen und gesendet werden.
VirtualNetwork ist geeignet
Netzwerkprotokolle auf MAC-Ebene direkt auf Windows zu simulieren und zu testen. Weiters können
eigene TCP-Stacks wie zum Beispiel
LWIP an einer VirtualNetwork
Schnittstelle angeschlossen werden. Im Gegensatz zum Loopback-Interface das nur
auf IP-Ebene ansprechbar ist, können bei VirtualNetwork alle Pakete auf
MAC-Ebene empfangen und versendet werden. Der gesamte Netzwerksverkehr kann mit
Tools wie Wireshark aufgezeichnet
werden.
Im Source-Code sind die folgende Dateien enthalten :
Datei Funktion VirtualNetworkTools.h Header für das VirtualNetwork API VirtualNetworkTools.c Sourcen für das VirtualNetwork API SimpleNetwork.cpp Kleiner UDP Stack mit Ping NtpTools.cpp Plugin für das NTP Protokoll ScannerTools.cpp Plugin für das SCN Protokoll Main.cpp Demoprogramm für VirtualNetwork NtpRouter.cpp Router für NTP-Pakete von Port 124 ins Internet Driver/* Sourcen vom VirtualNetwork Treiber System/* Sourcen für Threads und Sockets Install/* Installationsanleitung und Dokumentation
Das folgende Beispiel zeigt wie auf VirtualNetwork zugegriffen werden kann :
BYTE
aPacket[1514];
LPBYTE
pMac;
VnetHandle
hVnet;
unsigned
uTurn;
int
iSize;
int
iRet;
hVnet
=
VnetOpen();
if(!hVnet)
// open a port on the virtual switch
{
printf("can't
open
driver
(err=%i)\n",VnetLastError());
return
-1;
}
pMac
=
VnetMac(hVnet);
printf("connected
to
the
port
%i\n",VnetPort(hVnet));
printf("own
mac:
%02X-%02X-%02X-%02X-%02X-%02X\n",pMac[0],pMac[1],pMac[2],pMac[3],pMac[4],pMac[5]);
memcpy(aPacket+0
,"\xFF\xFF\xFF\xFF\xFF\xFF",6);
memcpy(aPacket+6
,pMac,6);
memcpy(aPacket+12,"\x99\x88\x77\x66",4);
iRet = VnetSend(hVnet,aPacket,16); // send a packet
for(uTurn=0;uTurn<1000;uTurn++)
// loop for receiving packets
{
iSize
=
VnetRecv(hVnet,aPacket,sizeof(aPacket));
if(iSize<=0)continue;
printf("receive
%04i
bytes\n",iSize);
}
VnetClose(hVnet);
printf("connection closed\n");
Das LWIP-Demo enthält eine Portierung des
LWIP TCP-Stacks
1.4.1 mit einigen Erweiterungen. Es ist möglich verschiedene TCP-Port
priorisiert zu behandeln. Die Sockets für die select Funktion wurden optimiert.
Im ganzen Stack können Echtzeit-Log gemacht werden (siehe TcpTester.cpp)
die im *.tte Format abgespeichert werden. Der Viewer für dieses Format ist nicht
im Demo enthalten.
Extrahiere das LWIP-Demo aus der ZIP-Dateien in deinem Verzeichnis MyProjects.
Kompiliere und starte das Projekt LwipDemo.dsw.
Auf der IP-Adresse 192.168.99.33 am TCP-Port 7 ist dann ein ECHO-Server
installiert.
Ein WDK (Windows Driver Kit) muss installiert sein.
Starte ./Driver/makeall.bat und die *.sys Dateien des Treibers werden in ./Driver/obj????/<cpu>/... erstellt
Anton Zechner |