VirtualNetwork

English version

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.



      Download C++ Sourcecode samt Treber und Doku
      Download Demo mit LWIP TCP-Stack

    Installations Hinweise:


      Extrahiere alle Zip-Dateien in deinem Verzeichnis MyProjects.
      Installiere den Treiber laut den Anweisungen in ./Install/Installation.htm
      Der neuen virtuellen Netzwerkskarte muss die IP-Adresse 192.168.99.10  / 255.255.255.0 zugewiesen werden
      Eine Dokumentation zur API findet man in VirtualNetwork.chm
      Das Projekt VirtualNetwork.dsw öffnen, kompilieren und starten
      Über die Konsole kann das Demo über die virtuellen Netzwerkskarte auf IP-Adresse 192.168.99.80 angepingt werden.
      Zusätzlich das Projekt NtpRouter.dsw öffnen, kompilieren und starten.
      Jetzt kann das VirtualNetwork Demoprogramm eine Zeitsynchronisation über NtpRouter abschicken.
      Ein kleiner WEB-Server ist auf "http://192.168.99.80" zu finden.
       

      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.
       

    Treiber erstellen:

    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