Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2004.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

IP-Adressverwaltung mit IP-Scanner

Christoph Spielmann, Düsseldorf

In modernen Netzwerken wird heutzutage fast ausschließlich das TCP/IP-Protokoll zur Übertragung von Daten eingesetzt. Eine Besonderheit dieses Protokolls ist, dass jedes Endgerät durch eine eindeutige IP-Adresse gekennzeichnet ist. Die im vorliegenden Beitrag vorgestellte Lösung hilft Ihnen bei der Verwaltung der IP-Adressen Ihres Netzwerks. Außerdem erfahren Sie hier Grundlegendes zum Thema TCP/IP und lernen, IP-Adressen per VBA auszulesen.

Grundlagen zum
TCP/IP-Protokoll

Die Übertragung von Daten innerhalb eines Netzwerks wird als Schichtmodell abgebildet, das in der Theorie aus mehreren einzelnen Schichten besteht. Eine Schicht basiert jeweils auf den Diensten der darunter liegenden Schicht und fügt dieser weitere Funktionen hinzu.

Die unterste Schicht ist in der Regel das physikalische Protokoll, mit dem einzelne Datenbits durch Stromimpulse - oder beim W-LAN über elektromagnetische Wellen - übertragen werden. Beim weit verbreiteten Ethernet kommt zum Beispiel das CSMA/CD-Verfahren zum Einsatz ("Carrier Sense Multiple Access/Collision Detection"). Dieses Verfahren regelt zum Beispiel, wie Kollisionen vermieden werden, wenn mehrere PCs gleichzeitig über ein einzelnes Kabel senden möchten.

Aus diesem Verfahren stammt auch die bekannte MAC-Adresse, mit der jede Netzwerkkarte ausgestattet ist. Mit ihrer Hilfe kann ein Sender einen Empfänger eindeutig adressieren. Die MAC-Adressen werden hierbei bei der Produktion einer Ethernet-Karte zentral vergeben. So ist sichergestellt, dass jede weltweit produzierte Karte eine eindeutige Adresse besitzt.

Auf dem CSMA/CD-Protokoll können nun weitere unterschiedliche Protokolle aufsetzen. Dazu zählen beispielsweise das von Microsoft und IBM entwickelte NetBIOS-Protokoll, das IPX/SPX-Protokoll von Novell, aber auch das inzwischen mehr als 30 Jahre alte TCP/IP-Protokoll.

IP steht als Abkürzung für "Internet Protocol" und TCP als Abkürzung für "Transmission Control Protocol". Das IP-Protokoll hat die Aufgabe, einzelne Datenpakete vom Sender zum Empfänger zu senden. Die Pakete sind hierbei sehr klein und umfassen in der Regel nur wenige KByte an Daten. Wenn größere Datenmengen aus einer Datei übertragen werden sollen, müssen mehrere IP-Pakete nacheinander versendet werden.

Insbesondere bei der Übertragung von Daten über das Internet kann es vorkommen, dass einzelne Pakete unterschiedliche Wege nehmen und sich so die Reihenfolge der Pakete beim Empfänger ändert. Das TCP-Protokoll sorgt nun dafür, dass diese wieder in der richtigen Reihenfolge zusammengesetzt werden. Sollten hierbei Pakete verloren gehen oder beschädigt werden, fordert das TCP-Protokoll diese neu beim Sender an, sodass eine übertragene Datei wieder hergestellt werden kann.

Insbesondere bei Live-Multimedia-Übertragungen kommt an Stelle des TCP-Protokolls ein weiteres Protokoll namens UDP zum Einsatz. Die Besonderheit ist hier zum Beispiel, dass fehlende Pakete nicht neu angefordert werden. Wenn beispielsweise eines von 24 Bildern pro Sekunde einen Fehler aufweist, macht es keinen Sinn, dieses Bild einige Sekunden später noch einmal in einer korrekten Form zu empfangen. Statt dessen wird das defekte Bild einfach ausgelassen, was dem Betrachter kaum auffällt.

Die IP-Adresse

Grundlage für das Funktionieren des IP-Protokolls ist, dass Sender und Empfänger eine eindeutige Adresse besitzen. Dies ist die IP-Adresse. Eine IP-Adresse ist nichts anderes als eine ganzzahlige Nummer, die innerhalb eines Netzwerkes eindeutig sein muss.

Da diese Nummer einen großen Wertebereich hat und damit schwer zu merken ist, werden IP-Adressen in der Regel in vier Teilen angegeben, die jeweils durch einen Punkt getrennt sind, wie zum Beispiel 192.168.1.7.

Die einzelnen Teile der IP-Adresse dürfen einen Wertebereich von 0 bis 255 aufweisen, sodass 0.0.0.0 die kleinste und 255.255.255.255 die größte IP-Adresse ist.

Wenn man bedenkt, dass in Zukunft vom Fernseher über das Handy bis zum Auto jedes elektrische Gerät eine IP-Adresse haben soll, wird deutlich, dass der Adressbereich bald aufgebraucht sein wird. Hier wird das neue IP-Protokoll in der Version 6 Abhilfe schaffen, das einen wesentlich größeren Adressbereich anbietet. Jeder Quadratmeter der Erdoberfläche kann hier mit mehr als 1000 IP-Adressen ausgestattet werden, was für einige Zeit ausreichen dürfte.

Jeder IP-Adresse ist üblicherweise ein Name zugewiesen, der sich einfacher merken lässt. Diese Zuweisung wird von einem so genannten "Domain Name Server" verwaltet. Dieser kann zu jedem Namen eine IP-Adresse zurückgeben (DNS-Lookup). Der umgekehrte Weg ist ebenfalls möglich (Reverse DNS-Lookup). Schließlich ist es einfacher, über den Link http://www.microsoft.de auf die Web-Seite von Microsoft zu gelangen, als den Link http://212.184.80.190 zu verwenden.

Verwalten von IP-Adressen

Die in dieser Musterlösung vorgestellte Verwaltung von IP-Adressen basiert auf einer einzelnen Tabelle namens tblIPAdressen. Die Tabelle hat den folgenden Aufbau:

Feldname

Beschreibung

IPAdresse

Zahl des Typs Long Integer

IPString

IP-Adresse als Zeichenkette

Name

DNS-Name

Beschreibung

Beschreibung zur Adresse

AngelegtAm

Anlage des Datensatzes

LetztePrüfungAm

Letzte Prüfung des Datensatzes

IstErreichbar

Ja/Nein-Feld, das die Erreichbarkeit des Endgeräts angibt

Tab. 1: Die Felder der Tabelle tblIPAdressen

Das Feld IPAdresse ist der Primärschlüssel der Tabelle. Hier werden die IP-Adressen als Zahl abgelegt. Das Feld IPString dient der besseren Lesbarkeit der Adresse, da diese hier in der gewohnten Art und Weise mit dem Punkt als Trennzeichen angegeben ist. Das Feld Name nimmt den DNS-Namen des Geräts auf, sofern dieser verfügbar ist. Bei Bedarf kann das Gerät mit einer benutzerdefinierten Beschreibung kommentiert werden.

Die beiden folgenden Datumsfelder nehmen das Anlagedatum des Datensatzes sowie das Datum der letzten Prüfung durch den IP-Scanner auf. Das letzte Ja/Nein-Feld gibt schließlich an, ob das Gerät erreichbar war.

Dies ist beispielsweise dann erforderlich, wenn der DNS zwar zu einer IP-Adresse einen Namen liefert, das Gerät jedoch momentan ausgeschaltet ist.

Public Property Get Adresse() As Long

    Adresse = m_Adresse

End Property

Public Property Let Adresse(Value As Long)

    m_Adresse = Value

    m_BatFilename = "C:\ping" + CStr(m_Adresse) + ".bat"

    m_ResultFilename = "C:\pingresult" + CStr(m_Adresse) + ".txt"

End Property

Quellcode 1

Public Sub Scan(DoDBUpdate As Boolean, Async As Boolean)

    Dim IPString As String

    IPString = modIPTools.IPLongToString(m_Adresse)

    If Dir(m_ResultFilename) <> "" Then Kill m_ResultFilename

    If Dir(m_BatFilename) <> "" Then Kill m_BatFilename

    Dim ExitCode As Long

    Dim FreeFileID As Integer

    Dim ReadLine As String

    Dim Command As String

    Command = "ping.exe -a -n 3 " + IPString + " >" + m_ResultFilename

    FreeFileID = FreeFile

    Open m_BatFilename For Output As #FreeFileID

        Print #FreeFileID, Command

    Close #1

    m_InstanceID = Shell(m_BatFilename, vbHide)

    m_ProcessID = OpenProcess(PROCESS_QUERY_INFORMATION, False, m_InstanceID)

    If Async = False Then

        Do

            Call GetExitCodeProcess(m_ProcessID, ExitCode)

            DoEvents

        Loop While ExitCode = STATUS_PENDING

        If Dir(m_ResultFilename) <> "" Then

            FreeFileID = FreeFile

            Open m_ResultFilename For Input As #FreeFileID

                Do While Not EOF(FreeFileID)

                     Line Input #FreeFileID, ReadLine

                     m_ResultText = m_ResultText + ReadLine + vbCrLf

                Loop

            Close #1

            If Dir(m_ResultFilename) <> "" Then Kill m_ResultFilename

            If Dir(m_BatFilename) <> "" Then Kill m_BatFilename

            If DoDBUpdate Then

                UpdateDatabase

            End If

        End If

    End If

End Sub

Quellcode 2

Der IP-Scanner

Das Füllen der vorgestellten Tabelle soll möglichst automatisch erfolgen. Idealerweise soll die Tabelle nach Abschluss des Scan-Vorgangs eine Übersicht über alle im lokalen Netzwerk angeschlossenen Geräte liefern.

Um Informationen über die Erreichbarkeit eines Netzwerkgeräts zu erhalten, eignet sich der DOS-Befehl "Ping". Dieser sendet über ein spezielles IP-Protokoll namens ICMP (Internet Control Message Protocol) eine Anfrage an ein Gerät mit der Bitte, diese zu beantworten.

Da es sich um einen DOS-Befehl handelt, kann dieser von Access aus prinzipiell mit Hilfe der Shell-Funktion ausgeführt werden. Der Nachteil ist jedoch, dass das Ergebnis der Funktion nicht abgefragt werden kann. Der IP-Scanner bedient sich daher einiger Tricks, um an das Ergebnis zu gelangen.

Den kompletten Quellcode des Scanners finden Sie in dem Klassenmodul clsScanner der Beispieldatenbank zu dieser Musterlösung.

Hinweis

Die im vorliegenden Beitrag vorgestellte Musterlösung finden Sie auf der Heft-CD unter dem Dateinamen IPDatabase.mdb (nur für Access 2000 und höher). (

Damit die Klasse weiß, welche IP-Adresse sie untersuchen soll, besitzt sie eine private Variable namens m_Adresse:

Private m_Adresse As Long

Um die Variable von außen zugänglich zu machen, stellt die Klasse zwei entsprechende Property-Prozedure zum lesenden und schreibenden Zugriff zur Verfügung (s. Quellcode 1).

Beim schreibenden Zugriff werden unter anderem die beiden Variablen m_ResultFilename und m_BatFilename initialisiert. Die Bedeutung lernen Sie später noch kennen. Die Kernfunktion der Klasse trägt den Namen Scan (s. Quellcode 2).

Zunächst wird die in der Variablen m_Adresse gespeicherte IP-Adresse in eine Zeichenkette umgewandelt, sodass diese später mit dem DOS-Befehl Ping eingesetzt werden kann. Als weitere Vorbereitung werden die beiden temporären Dateien gelöscht, falls diese bereits vorhanden sind.

Als Nächstes wird die komplette Anweisung zur Ausführung der Ping-Anweisung erstellt und das Ergebnis in der Variablen Command abgelegt.

Der komplette Befehl besteht hierbei aus dem Teil ping.exe, einigen Parametern, die die Häufigkeit der Ping-Versuche steuern und die Ausgabe des DNS-namens bewirken, sowie einer Umleitung des Ergebnisses mittels ">"-Operator in den in der Variablen m_ResultFilename angegebenen Dateinamen. Damit mehrere Scanner gleichzeitig arbeiten können, enthält der Dateiname zusätzlich auch die IP-Adresse.

Der fertige Befehl kann nun leider nicht direkt mit der Shell-Anweisung ausgeführt werden, da hierbei aus unerklärlichen Gründen das Ergebnis nicht in die Datei m_ResultFilename geschrieben wird. Als Workaround wird daher zunächst unter dem in der Variablen m_BatFilename abgelegten Namen eine Batch-Datei angelegt, mit dem Befehl gefüllt, gespeichert und schließlich ausgeführt.

Abrufen des Ping-Ergebnisses

Nach dem Start der Batch-Datei mittels Shell-Funktion setzt Access die Ausführung des Programms fort, obwohl die Ping-Anweisung noch nicht beendet und damit das Ergebnis noch nicht vorhanden ist. Diese Art der Ausführung wird auch als asynchrone Ausführung bezeichnet.

Der nachfolgende Anweisungsblock ermittelt daher die interne Prozess-ID der Batch-Datei mit Hilfe von API-Funktionen. Mittels einer Do Loop-Schleife wird nachher regelmäßig geprüft, ob die Ping-Anweisung ihre Arbeit abgeschlossen hat.

Damit diese Endlosschleife nicht zu viel Rechenleistung benötigt, wird innerhalb der Schleife neben der Abfrage des aktuellen Prozessstatus auch die Anweisung DoEvents ausgeführt, die allen anderen Windows-Anweisungen, darunter auch der Ping-Anweisung, genügend Rechenleistung zur Erledigung ihrer Aufgaben gibt.

Public Property Get Name() As String

    Dim IPString As String

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Google Earth ferngesteuert, Teil II

© 2003-2015 André Minhorst Alle Rechte vorbehalten.