Scripting-Handbuch

Transcription

Scripting-Handbuch
Scripting-Handbuch
Die Informationen in diesem Dokument dienen ausschließlich Informationszwecken und werden in
der vorliegenden Form ohne (ausdrückliche oder stillschweigende) Haftung jeglicher Art
bereitgestellt, insbesondere ohne Gewährleistung der Marktgängigkeit, der Eignung für einen
bestimmten Zweck oder der Nichtverletzung von Rechten. GFI Software haftet nicht für etwaige
Schäden, einschließlich Folgeschäden, die sich aus der Nutzung dieses Dokuments ergeben. Die
Informationen stammen aus öffentlich zugänglichen Quellen. Trotz sorgfältiger Prüfung der Inhalte
übernimmt GFI keine Haftung für die Vollständigkeit, Richtigkeit, Aktualität und Eignung der
Daten. Des Weiteren ist GFI nicht für Druckfehler, veraltete Informationen und Fehler
verantwortlich. GFI übernimmt keine Haftung (ausdrücklich oder stillschweigend) für die
Richtigkeit oder Vollständigkeit der in diesem Dokument enthaltenen Informationen.
Nehmen Sie mit uns Kontakt auf, wenn Ihnen in diesem Dokument Sachfehler auffallen. Wir werden
Ihre Hinweise sobald wie möglich berücksichtigen.
Alle hier aufgeführten Produkte und Firmennamen sind Marken der jeweiligen Eigentümer.
GFI LanGuard unterliegt dem urheberrechtlichen Schutz von GFI SOFTWARE LTD. - 1999–2014 GFI
Software Ltd. Alle Rechte vorbehalten.
Dokumentenversion: 11.3
Zuletzt aktualisiert (Monat/Tag/Jahr): 09/05/2014
1 Einführung
GFI LanGuard ermöglicht Benutzern das Erstellen von eigenen Skripten, mit denen nach
Schwachstellen gesucht werden kann. Skripte können plattformabhängig oder plattformunabhängig
sein:
Plattformabhängig (die Skripte werden auf dem gescannten Computer ausgeführt):
UNIX Shell-Skripte werden per SSH ausgeführt – Remote-Computer müssen auf UNIX basieren
und Remote-Verbindungen über SSH zulassen
Plattformunabhängig (die Skripte werden auf dem Computer ausgeführt, auf dem GFI LanGuard
installiert ist):
Visual Basic-Skripte – In diesem Handbuch wird ausführlich erklärt, wie Sie benutzerdefinierte
Skripte für Schwachstellenprüfungen in Visual Basic schreiben, debuggen und einrichten können.
Python-Skripte – Weitere Informationen finden Sie im Kapitel zu Python-Scripting in diesem
Handbuch.
Themen in diesem Kapitel:
1.1 Vorteile eines Script Debugger
4
1.2 Funktionen des GFI LanGuard Script Debugger
4
1.1 Vorteile eines Script Debugger
Der Vorteil eines Editors besteht darin, dass Sie damit sicherer und schneller funktionierende Skripte
erstellen und korrigieren können. Bei Verwendung eines Editors können Sie sicherstellen, dass das
Skript funktioniert, bevor Sie es in einer Produktionsumgebung ausführen. GFI LanGuard Mit Script
Debugger können Sie das Skript genau wie in einer Produktionsumgebung ausführen. Der GFI LanGuard
Script Debugger verfügt über alle gebräuchlichen Funktionen einer integrierten
Entwicklungsumgebung. Dazu gehören:
Haltepunkte
Einzelschritte
Prozedurschritte
Angabe spezifischer Parameter für richtiges Testen.
Wichtig
Es wird nicht empfohlen, das Skript ohne vorheriges Debugging in GFI LanGuard
auszuführen. Wenn das Skript nicht funktionieren sollte, sind Sie nicht in der Lage
herauszufinden, warum. Außerdem können durch fehlerhafte Programmierung
Endlosschleifen entstehen, die den GFI LanGuard-Scanner zum Stillstand bringen.
1.2 Funktionen des GFI LanGuard Script Debugger
Die nachfolgende Tabelle zeigt die wichtigsten Funktionen des GFI LanGuard Script Debugger:
GFI LanGuard
1 Einführung | 4
Funktion
Beschreibung
Unterstützung für die Überwachung von Variablen
Echtzeitüberwachung der Werte der verwendeten Variablen
Einzelschritt-/Prozedurschrittfunktion
Ermöglicht das zeilenweise Debugging Ihrer Skripte. Dabei können Sie mitverfolgen, was bei der Ausführung geschieht.
Syntaxdarstellung
Vereinfacht die Programmierung von Skripten sowie die Fehlersuche.
Ausführliche Fehlermeldungen
Angabe des Fehlerstyps und der Stelle, an der der Fehler auftritt. Hilft beim Aufspüren von Fehlern, die durch Variablentypen verursacht werden.
Haltepunkte
Der Debugger unterstützt Haltepunkte, mit deren Hilfe Sie an interessanten Stellen zur zeilenweisen Ausführung übergehen können.
Ausführung/Debugging mit
alternativen
Anmeldeinformationen
Dadurch können Sie das Skript während der Entwicklung und des Debugging mit
unterschiedlichen Anmeldeinformationen testen und ausführen.
GFI LanGuard
1 Einführung | 5
2 Visual Basic Script (VBScript)
Dieses Kapitel enthält Informationen zu VBScript und zum Erstellen von Skripten mithilfe des GFI
LanGuard Script Debugger. Eine vollständige Sprachreferenz der von GFI LanGuard verwendeten
Programmiersprache Visual Basic finden Sie hier: http://go.gfi.com/?pageid=lan_vbs
Themen in diesem Kapitel:
2.1 Wichtige Hinweise zu VBScript
6
2.2 Von GFI LanGuard unterstützte VBScript-Funktionen
6
2.3 Häufige Fehler und Fallstricke
7
2.4 Tipps und Tricks
8
2.5 Entwickeln von Skripten mit GFI LanGuard Script Debugger
9
2.6 Hinzufügen einer neuen skriptbasierten Schwachstellenüberprüfung zum Scanner
11
2.1 Wichtige Hinweise zu VBScript
Jedes erstellte Skript muss eine Funktion mit der Bezeichnung Main enthalten. GFI LanGuard
sucht nach dieser Funktion und beginnt an dieser Stelle mit der Ausführung, wenn das Skript ausgeführt wird.
Die Funktion Main gibt einen booleschen Wert (true oder false) an das Scripting-Modul zurück. Die
Zuweisung des Rückgabewerts erfolgt durch Zuweisen des Ergebniswerts an eine Variable, die den
gleichen Namen wie die Funktion trägt (Beispiel: Wenn die Funktion die Bezeichnung MyFunction trägt, wird der Rückgabewert mit MyFunction = true zugewiesen). Der Rückgabewert
wird grundsätzlich am Ende der Funktion zugewiesen.
Beispiel
Function Main
'Text im Scanner-Aktivitätsfenster anzeigen
echo „Skript wurde erfolgreich gestartet"
'Ergebnis zurückgeben
Main = true
End Function
2.2 Von GFI LanGuard unterstützte VBScript-Funktionen
GFI LanGuard unterstützt sämtliche VBScript-Funktionen und Scripting-Methoden. Weitere
Informationen finden Sie in den folgenden Ressourcen zu VBScript:
http://go.gfi.com/?pageid=vbs_r1
http://go.gfi.com/?pageid=vbs_r2
http://go.gfi.com/?pageid=vbs_r3
http://go.gfi.com/?pageid=vbs_r4
GFI LanGuard
2 Visual Basic Script (VBScript) | 6
2.3 Häufige Fehler und Fallstricke
VBScript kennt zwei Arten von Variablen:
Variablentyp
Beschreibung
Einfach
Variablen sind echte Typen wie Integer, Boolean, String.
Objekte
Dies sind zusammengesetzte Elemente, deren Funktionen über die Schnittstelle von Automatisierungsobjekten bereitgestellt werden.
Automatisierungsobjekttypen müssen als Objekte deklariert werden, bevor diesen Werte zugewiesen
werden.
Wichtig
Es wird dringend empfohlen, allen deklarierten Variablen und/oder Objekten einen Wert
zuzuweisen.
Beispiel
Function Main
'zu verwendendes Objekt deklarieren
Dim nameStr As String
'der Variable einen Wert zuweisen
nameStr = "Dies ist eine Testzuweisung von Text"
'Ergebnis im Scanner-Aktivitätsfenster der Zuweisung anzeigen
echo nameStr
'Ergebnis zurückgeben
Main = true
End Function
Das folgende Skript enthält ein etwas komplexeres Beispiel, bei dem die auf dem Zielcomputer
installierten Dienste aufgelistet werden (localhost = 127.0.0.1). Kopieren Sie den folgenden Text,
fügen Sie ihn im Script Debugger ein, und führen Sie ihn aus (F5). Im Debug-Fenster wird eine Liste der
auf dem lokalen Computer installierten Dienste angezeigt.
Function main
'Erforderliche Objekte deklarieren
Dim wmi As Object
Dim objswbemobject As Object
'Benötigte andere Variablen deklarieren
Dim strComputer As String
Dim cr As String
strComputer = "127.0.0.1"
'Wagenrücklauf
cr = Chr(13) + Chr(10)
GFI LanGuard
2 Visual Basic Script (VBScript) | 7
'Hook für das wmi-Objekt
Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'Überprüfen, ob Hook erfolgreich erstellt wurde
If wmi is Nothing Then echo ("Fehler 1")
'Service-Instanz von wmi zurückliefern
Set wmiinst=wmi.instancesof("Win32_Service")
'Überprüfen, ob Instanz verfügbar ist
If wmiinst is Nothing Then echo ("Fehler 2")
'Alle Instanzen durchlaufen
For Each objswbemobject In wmiinst
echo("Service-Name= ")
'Services anzeigen
echo(objswbemobject.DisplayName+cr)
Next
End Function
Hinweis
Wenn Sie versuchen, ein Automatisierungsobjekt zu verwenden, ohne es zuvor zu
deklarieren, schlägt die Kompilierung des Skripts fehl. Stellen Sie sich als Beispiel den
gleichen Code vor, jedoch ohne vollständige Deklaration der Objektvariable „wmi“.
Wenn Sie versuchen, das Skript auszuführen, werden sofort eine Fehlermeldung und ein
Hinweis auf die genaue Zeile angezeigt, in der der Fehler auftrat:
Function main
Dim wmi 'WARNING : missing “as object”
Dim objswbemobject As Object
…
…
…
End Function
2.4 Tipps und Tricks
Wenn Sie Fortschrittsinformationen im Scanner-Aktivitätsfenster anzeigen möchten (unteres Fenster
des Scanners oder linkes Fenster des Script Debugger), können Sie den Befehl echo verwenden.
Beispiel
Function Main
'Text im Scanner-Aktivitätsfenster anzeigen
echo „Skript wurde erfolgreich gestartet"
'Ergebnis zurückgeben
Main = true
GFI LanGuard
2 Visual Basic Script (VBScript) | 8
End Function
2.5 Entwickeln von Skripten mit GFI LanGuard Script Debugger
Dieser Abschnitt enthält Informationen zum Erstellen von VB-Skripten mithilfe des GFI LanGuard
Script Debugger. Weitere Informationen finden Sie unter:
Erstellen von VB-Skripten
Ausführen von Skripten
Debugging-Haltepunkte – Einzelschrittfunktion
Überwachen der in Variablen gespeicherten Werte
Debugging unter alternativen Benutzersitzungen
Übergeben von Parametern an ein Skript
2.5.1 Erstellen von Skripten
In diesem Abschnitt wird ein Skript erstellt. Das Skript überprüft, ob der Nachrichtendienst auf dem
lokalen Computer ausgeführt wird oder nicht. Die Entwicklung des Skripts erfolgt mithilfe des Script
Debugger, wobei gleichzeitig einige seiner Funktionen vorgestellt werden.
Beispiel
Function main
'Erforderliche Objekte deklarieren
Dim wmi As Object
Dim objswbemobject As Object
'Benötigte andere Variablen deklarieren
Dim strComputer As String
Dim cr As String
strComputer = "127.0.0.1"
'Wagenrücklauf
cr = Chr(13) + Chr(10)
'Hook für das wmi-Objekt
Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'Überprüfen, ob Hook erfolgreich erstellt wurde
If wmi is Nothing Then echo ("Fehler 1")
'Service-Instanz von wmi zurückliefern
Set wmiinst=wmi.instancesof("Win32_Service")
'Überprüfen, ob Instanz verfügbar ist
If wmiinst is Nothing Then echo ("Fehler 2")
'Alle Instanzen durchlaufen
For Each objswbemobject In wmiinst
If objswbemobject.DisplayName = "Messenger" Then
echo("Service-Name= ")
GFI LanGuard
2 Visual Basic Script (VBScript) | 9
'Services anzeigen
echo(objswbemobject.DisplayName+cr)
echo("Service-Status= ")
'Status anzeigen
echo(objswbemobject.State+cr)
If objswbemobject.State = "Running" Then main = true
If objswbemobject.State = "Running" Then main = true
End If
Next
End Function
2.5.2 Ausführen von Skripten
Drücken Sie zum Ausführen des Skripts F5, oder klicken Sie auf Fehlersuche > Los.
2.5.3 Debugging-Haltepunkte – Einzelschrittfunktion
Mithilfe des Script Debugger können Sie die Ausführung an einer bestimmten Stelle des Skripts
stoppen. So können Sie zum Beispiel einen Haltepunkt setzen, der ausgeführt wird, wenn die Variable
mit dem Anzeigenamen des Dienstes den Wert „Nachrichtendienst“ enthält.
Im Beispielskript würden Sie zu Zeile 17 navigieren, (“echo("Service Name= ")”) und den
Haltepunkt (F9 drücken) direkt unter der IF-Anweisung setzen. Drücken Sie während der Ausführung
F10 (Einzelschritt), um den restlichen Code Zeile für Zeile auszuführen.
2.5.4 Überwachen der in Variablen gespeicherten Werte
Um die in Variablen enthaltenen Werte zu überwachen, müssen Sie eine Überwachung für die
jeweilige Variable hinzufügen. So überwachen Sie den Inhalt einer Variable:
1. Erweitern Sie den Bereich „Status“ unten.
2. Klicken Sie mit der rechten Maustaste auf die erste leere Zeile unter Variable.
3. Klicken Sie auf Überwachung hinzufügen, und geben Sie den Namen der zu überwachenden
Variable ein. Wiederholen Sie diesen Schritt, um Überwachungen für weitere Variablen hinzuzufügen.
4. Wenn Sie eine Überwachung löschen möchten, klicken Sie mit der rechten Maustaste auf die
Überwachung, und wählen Sie Überwachung löschen.
2.5.5 Debugging unter alternativen Benutzersitzungen
So testen Sie das Skript mit alternativen Anmeldeinformationen:
1. Starten Sie den GFI LanGuard Script Debugger
2. Wählen Sie aus der Dropdown-Liste Mit den Eintrag Alternative Anmeldeinformationen aus.
3. Geben Sie in den Textfeldern einen Benutzernamen und ein Kennwort ein.
2.5.6 Übergeben von Parametern an ein Skript
Der GFI LanGuard-Scanner übergibt bei der Ausführung von Skripten Parameter an die Skripte.
Beispiele sind der Name und die IP-Adresse des Zielcomputers, der auf Schwachstellen geprüft werden
soll. Beim Debuggen von Skripten möchten Sie Ihre Skripte unter Umständen mit verschiedenen
Werttypen für diese Parameter testen. Unter Optionen > Parameter können Sie für diese Parameter
alternative Werte festlegen.
GFI LanGuard
2 Visual Basic Script (VBScript) | 10
Um in einem Skript auf diese Parameter zuzugreifen, müssen Sie eine Spezialfunktion von GFI
LanGuard mit der Bezeichnung GetParameter aufrufen und dieser Funktion den Namen des
gewünschten Parameters übergeben. Beispiel:
Function main
'Erforderliche Objekte deklarieren
Dim wmi As Object
Dim objswbemobject As Object
'Benötigte andere Variablen deklarieren
Dim strComputer As String
Dim cr As String
strComputer = "127.0.0.1"
'Wagenrücklauf
cr = Chr(13) + Chr(10)
'Hook für das wmi-Objekt
Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'Überprüfen, ob Hook erfolgreich erstellt wurde
If wmi is Nothing Then echo ("Fehler 1")
'Service-Instanz von wmi zurückliefern
Set wmiinst=wmi.instancesof("Win32_Service")
'Überprüfen, ob Instanz verfügbar ist
If wmiinst is Nothing Then echo ("Fehler 2")
'Alle Instanzen durchlaufen
For Each objswbemobject In wmiinst
echo("Service-Name= ")
'Services anzeigen
echo(objswbemobject.DisplayName+cr)
Next
End Function
2.6 Hinzufügen einer neuen skriptbasierten Schwachstellenüberprüfung zum Scanner
Im folgenden Beispiel wird erläutert, wie eine neue Schwachstellenüberprüfung erstellt und ein Skript
ausgeführt wird, um einen Test auf die neue Schwachstelle hin durchzuführen. Das Skript zeigt im
Scanner-Aktivitätsfenster die Meldung Skript erfolgreich ausgeführt an und informiert GFI LanGuard
darüber, dass eine Schwachstelle erkannt wurde und der Administrator benachrichtigt werden sollte.
Dazu sind folgende Schritte erforderlich:
Schritt 1 – Skript erstellen, das auf die Schwachstelle überprüft (siehe vorherigen Abschnitt)
Schritt 2 – Neue Schwachstelle zur Ausführung des Skripts erstellen
GFI LanGuard
2 Visual Basic Script (VBScript) | 11
2.6.1 Schritt 1: Skript erstellen, das auf die Schwachstelle überprüft
1. Öffnen Sie den GFI LanGuard Script Debugger unter Start > Programme > GFI LanGuard 2012 >
GFI LanGuard Script Debugger.
2. Klicken Sie auf Datei > Neu.
3. Fügen Sie im Debugger folgenden Text ein:
Function Main
echo „Skript wurde erfolgreich gestartet"
Main = true
End Function
4. Speichern Sie die Datei in einem Verzeichnis Ihrer Wahl, zum Beispiel unter
c:\meinSkript.vbs.
2.6.2 Schritt 2: Neue Schwachstelle zur Ausführung des Skripts erstellen
1. Starten Sie die GFI LanGuardStart > Programme > GFI LanGuard 2014> GFI LanGuard 2014.
2. Klicken Sie auf die Hauptoptionsschaltfläche, und wählen Sie Konfiguration > Scan-Profil-Editor.
Sie können auch die Tasten STRG + P drücken, um den Scan-Profil-Editor zu starten.
3. Klicken Sie unter Allgemeine Aufgaben auf Neues Scan-Profil, oder wählen Sie ein vorhandenes
Scan-Profil aus, das Sie bearbeiten möchten.
4. Geben Sie einen Profilnamen und optional eine Beschreibung des Profils ein.
5. (Optional) Klicken Sie auf Alle Einstellungen von einem vorhandenen Profil kopieren, und wählen
Sie im Dropdown-Menü Profil ein vorhandenes Scan-Profil aus, das Sie duplizieren möchten.
6. Klicken Sie auf OK.
Hinweis
Das neue Scan-Profil wird im Bereich Profile auf der linken Seite hinzugefügt.
7. Wählen Sie das neue Scan-Profil aus, und klicken Sie im rechten Bereich auf Hinzufügen…. Dadurch
wird der Dialog „Schwachstelle hinzufügen“ geöffnet.
8. Geben Sie auf der Registerkarte Allgemein allgemeine Angaben wie Name und Typ der neuen
Schwachstelle ein.
9. Klicken Sie auf die Registerkarte Bedingungen > Hinzufügen.
10. Wählen Sie den Prüfungstyp Unabhängige Prüfungen > VB Script-Test. Klicken Sie auf Weiter.
11. Geben Sie den Speicherort für das Skript an (Beispiel:
<ProductDataDir>\Scripts\neueschwachstelle.vbs). Klicken Sie auf Weiter.
12. Wählen Sie das Attribut, für das Sie eine Bedingung festlegen möchten, den gewünschten Operator
und den Wert der Skriptausführung.
Hinweis
Für jedes Skript werden im Abschnitt Beschreibung die unterstützten Werte angezeigt.
13. Klicken Sie auf Fertig stellen.
GFI LanGuard
2 Visual Basic Script (VBScript) | 12
Die Schwachstellenüberprüfung wird hinzugefügt und in die Liste der Schwachstellen aufgenommen,
die beim nächsten Scan eines Computers überprüft werden.
Scannen Sie zum Testen einfach Ihren lokalen Computer (127.0.0.1). Im Scanergebnis wird unter dem
Knoten „Schwachstellen“ im Bereich „Diverses“ ein Warnhinweis zu einer Schwachstelle angezeigt.
GFI LanGuard
2 Visual Basic Script (VBScript) | 13
3 Python-Skripte
In diesem Kapitel erhalten Sie die erforderlichen Informationen zur Erstellung und Ausführung von
Python-Skripten. Ab Version 9.0 unterstützt GFI LanGuard Python-basierte Schwachstellenprüfungen.
Diese Prüfungen finden Sie unter Unabhängige Prüfungen.
Themen in diesem Kapitel:
3.1 Was ist die Skriptsprache Python?
14
3.2 Erstellen einer neuen Schwachstellenprüfung mit Python-Skript-Tests
14
3.3 In Python-Skripten verfügbare Application Programming Interfaces (APIs)
15
3.4 Debugging von Python-Skripten
18
3.5 Python-Bibliotheken und Wiederverwendung von Code
18
3.1 Was ist die Skriptsprache Python?
Python ist eine interpretierte Programmiersprache, die 1990 von Guido van Rossum entwickelt
wurde. In Python erfolgt die Typisierung dynamisch und die Speicherverwaltung automatisch.
Beachten Sie: In Python wird der Verlauf von Codeblöcken nicht durch Satzzeichen oder
Schlüsselwörter, sondern durch die Einrückung gekennzeichnet. Beispiel für eine Fakultätsfunktion in
Python:
def factorial(x):
if x == 0:
return 1
else:
return x * factorial(x-1)
3.2 Erstellen einer neuen Schwachstellenprüfung mit Python-Skript-Tests
Zum Erstellen eines neuen Python-Skript-Tests müssen Sie:
Schritt 1: Erstellen des Skripts
Schritt 2: Die neue Schwachstellenprüfung erstellen
3.2.1 Schritt 1: Erstellen des Skripts
1. Starten Sie GFI LanGuard Script Debugger über Start > Programme > GFI LanGuard2014 > GFI
LanGuard Script Debugger.
2. Klicken Sie auf Datei > Neu.
3. Kopieren Sie das folgende Skript, und fügen Sie es in den Script Debugger ein:
#PythonSuccessfullCheck.py
"""
Einzelheiten dazu finden Sie in der Datei
<ProductDataDir>\Scripts\lpy.py
"""
def main():
"""Return values:
GFI LanGuard
3 Python-Skripte | 14
* 0 - false, failed
* 1 - true, success"""
result = 0
#Hier steht Ihr Code…
result = 1
return(result)
4. Speichern Sie das Skript am gewünschten Speicherort.
3.2.2 Schritt 2: Erstellen Sie die neue Schwachstellenprüfung.
1. Starten Sie die GFI LanGuardStart > Programme > GFI LanGuard 2014> GFI LanGuard 2014.
2. Klicken Sie auf die Hauptoptionsschaltfläche, und wählen Sie Konfiguration > Scan-Profil-Editor.
Sie können auch die Tasten STRG + P drücken, um den Scan-Profil-Editor zu starten.
3. Klicken Sie unter Allgemeine Aufgaben auf Neues Scan-Profil, oder wählen Sie ein vorhandenes
Scan-Profil aus, das Sie bearbeiten möchten.
4. Klicken Sie im Scan-Profil-Editor auf Optionen zur Schwachstellenbewertung > Schwachstellen.
5. Erweitern Sie in der Schwachstellentypenliste Schwachstellen, und wählen Sie Diverse. Klicken Sie
auf Hinzufügen. Dadurch wird der Dialog „Schwachstelle hinzufügen“ geöffnet.
6. Geben Sie auf der Registerkarte Allgemein allgemeine Informationen wie Name, Typ und
Beschreibung der neuen Schwachstelle ein.
7. Klicken Sie auf die Registerkarte Bedingungen > Hinzufügen.
8. Wählen Sie Unabhängige Prüfungen > Unabhängiger Python-Skript-Test. Klicken Sie auf Weiter.
9. Geben Sie den Speicherort für das Skript an (Beispiel:
<ProductDataDir>\Scripts\neueschwachstelle.vbs). (Laden Sie das erstellte Skript aus
Schritt 1: Skript erstellen, das auf die Schwachstelle überprüft).
10. Wählen Sie im Dropdown-Menü die Anzahl der Objekte, die die Bedingung erfüllen müssen, damit
die Prüfung TRUE ergibt. Klicken Sie auf Weiter.
11. Geben Sie im Eingabefeld Wert den Wert ein, den das Python-Skript zurückgeben soll, wenn die
Schwachstelle erkannt wird.
Hinweis
Für jedes Skript werden im Abschnitt Beschreibung die unterstützten Werte angezeigt.
12. Klicken Sie auf Fertig stellen.
3.3 In Python-Skripten verfügbare Application Programming Interfaces (APIs)
GFI LanGuard integriert einen Großteil der standardmäßigen Python-Implementation (auch als
CPython bekannt, erhältlich unter http://go.gfi.com/?pageid=pythorg). Derzeit verwenden wir
Python in der Version 2.5. Daher funktionieren die meisten vorhandenen Python-Skripte mit
geringfügigen Anpassungen auch in GFI LanGuard. Die wichtigste Anpassung besteht darin, dass
Skripte eine Funktion main()enthalten müssen, die entweder 1 oder 0 zurückliefert.
GFI LanGuard
3 Python-Skripte | 15
Alle Python-Skripte, die von Sicherheitsscannermodulen verwendet werden (Schwachstellenprüfungen
und Informationen über Sicherheitsanwendungen), haben Zugriff auf die folgenden globalen
Variablen:
ComputerIP
ComputerName
LNSSDir
localProgramFilesPath
localWindowsPath
localSystem32Path
User
Kennwort
Beispiel
ComputerIP = '127.0.0.1'
ComputerName = 'WXPSandbox"
LNSSDir = 'C:\\Programme\\GFI\\LanGuard 2011\\'
localProgramFilesPath = 'C:\\Programme'
localWindowsPath = 'C:\\WINDOWS'
localSystem32Path = 'C:\\WINDOWS\\system32'
User = ''
Password = ''
Über diese globalen Variablen können Sie auf den Namen oder die IP-Adresse des gescannten
Computers sowie auf die Anmeldeinformationen zugreifen, die Sie für die Verbindung mit dem
gescannten Computer benötigen.
Die globalen GFI LanGuard-Funktionen stehen in Python-Skripten als Methoden des GlobalFunctionsObjekts zur Verfügung. D. H.:
# Verwendung globaler Funktionen.
def main():
"""Return values:
* 0 - false, failed
* 1 - true, success"""
result = 0
# Text anzeigen
GlobalFunctions.echo("Hallo!")
# Übergebenen Text in Protokolldatei schreiben
GlobalFunctions.writetolog("Python-Skript gestartet.")
# Übergebenen Text in der Statusleiste anzeigen
GlobalFunctions.statusbar("Hallo StatusBar!")
GFI LanGuard
3 Python-Skripte | 16
# Fügt für den zweiten Parameter einen untergeordneten Knoten in die
aktuelle Schwachstelle ein
GlobalFunctions.addlistitem("", "Beschreibung der Schwachstelle.")
# Beschreibung der aktuellen Schwachstelle ändern
GlobalFunctions.setdescription("Liste der installierten Modems")
GlobalFunctions.writetolog("Python-Skript beendet.")
result = 1
return(result)
GFI LanGuard bietet auch eine COM-Client-API für Python-Skripte in Form von pywin32.
Hinweis
Alle GFI LanGuard-COM-Scripting-Bibliotheken stehen via win32com.client für PythonSkripte zur Verfügung. Weitere Informationen finden Sie unter Scripting-Objekte (page
20).
Beispiel
# DNS-Lookup mit dem LanGuard-COM-Objekt GlbObj.Socket
def main():
"""Return values:
* 0 - false, failed
* 1 - true, success"""
result = 0
import win32com.client
socket = win32com.client.Dispatch("GlbObj.Socket.1")
print(socket.DnsLookup('gfi.com'))
result = 1
return(result)
3.3.1 Pywin32
# Hallo Welt für Pywin32
def main():
"""Return values:
* 0 - false, failed
* 1 - true, success"""
result = 0
import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch
("WbemScripting.SWbemLocator")
GFI LanGuard
3 Python-Skripte | 17
objSWbemServices = objWMIService.ConnectServer
(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_
PhysicalMemory")
for objItem in colItems:
print("Kapazität: %s\n" % objItem.Capacity)
result = 1
return(result)
Hinweis
Zusätzliche Dokumentation zu Pywin32 finden Sie unter:
http://go.gfi.com/?pageid=pywin32
http://go.gfi.com/?pageid=pythres
3.4 Debugging von Python-Skripten
GFI LanGuard Script Debugger bietet keine Unterstützung für das Debugging von Python-Skripten.
Beliebige Python-IDEs, Debugger oder Kommandozeileninterpreter, auf denen Python-Skripte mit den
derzeit unterstützten Python 2.5- und pywin32-Distributionen für Windows ausgeführt werden
können, unterstützen Sie beim Schreiben funktionierender Python-Skripte für GFI LanGuard.
Hier einige Python-IDEs bzw. Interpreter, die gut zum Bearbeiten und Debuggen von Python-Skripten
geeignet sind:
PythonWin
Winpdb
SPE IDE – Python Editor
IDLE und der standardmäßig in der Python-Distribution enthaltene Python-Interpreter
Python-Skripte können in einer GFI LanGuard-ähnlichen Umgebung ausgeführt werden, indem Sie die
Skripte mit der Datei lpy.pyaus dem Verzeichnis „Scripts“ von GFI LanGuard ausführen:
C:\ProgramData\GFI\LanGuard11\Scripts
Beispiel
<Python25Folder>\python.exe "<ProductDataDir>\Scripts\lpy.py"
<NameOfPythonScriptFileToTest>
3.5 Python-Bibliotheken und Wiederverwendung von Code
Python bietet die Möglichkeit, Bibliotheken mit häufig in Skripten verwendeten Funktionen zu
erstellen. Solche Bibliotheken fassen häufig verwendete Funktionen zusammen und können von
beliebig vielen Skripten verwendet werden. Dieser Abschnitt enthält folgende Informationen:
Erstellen einer Bibliothek
Verwenden von Bibliotheken
GFI LanGuard
3 Python-Skripte | 18
3.5.1 Erstellen einer Bibliothek
Erstellen Sie eine Python-Skriptdatei, in der Python-Funktionen oder -Objekte definiert werden.
Kopieren Sie die Datei nach <Hauptverzeichnis von LanGuard>\Library, zum Beispiel:
C:\Programme\GFI\LanGuard 11 Agent
Beispieldatei für eine Bibliothek
"""
„Hallo Welt“-Python-Bibliothek
Kopieren Sie diese Datei nach <Hauptverzeichnis von LanGuard>\Library.
"""
def EchoString(text):
"""Gibt den übergebenen Text aus."""
GlobalFunctions.echo(text)
print(text)
3.5.2 Verwenden von Bibliotheken
Damit Sie eine zuvor erstellte Python-Bibliothek verwenden können, müssen Sie diese dem
standardmäßigen Importmechanismus von Python entsprechend importieren.
Beispiel mit der obigen Bibliothek
"""
LibraryTester.py
Benötigt EchoLibrary.py im Verzeichnis <Installationsverzeichnis von
LanGuard>\Library
"""
def main():
"""Return values:
* 0 - false, failed
* 1 - true, success"""
result = 0
from EchoLibrary import EchoString
EchoString("Schwachstellenprüfung erfolgreich ausgeführt.")
result = 1
return(result)
GFI LanGuard
3 Python-Skripte | 19
4 Scripting-Objekte
Dieses Kapitel enthält Informationen zu verschiedenen Funktionen und Objekten, die vom GFI
LanGuard Script Debugger unterstützt werden und die Sie in Ihren Skripten verwenden können.
Themen in diesem Kapitel:
4.1 Socket-Objekte
20
4.2 SNMP-Objekte
29
4.3 File-Objekte
32
4.4 Registrierungsobjekte
41
4.5 HTTP-Objekte
47
4.6 HTTPHeaders-Objekte
60
4.7 FTP-Objekte
63
4.8 Encode-Objekte
80
4.1 Socket-Objekte
Das Socket-Objekt wird zur Kommunikation mit TCP-Servern und UDP-Sockets verwendet. Es
unterstützt verschiedene Funktionen, zum Beispiel eine konfigurierbare Zeitüberschreitung, DNSAuflösung und Rückwärts-DNS-Auflösung. Darüber hinaus beherrscht das Socket-Objekt beim Senden
und Empfangen den Umgang mit verschiedenen Datentypen. Es kann sowohl Strings als auch rohe
Binärdaten verarbeiten. Strings werden als normale String-Variablen und Binärdaten als Arrays von
Bytes verarbeitet. Für die Empfangsfunktion (als Recv bezeichnet) kann ein Parameter angegeben
werden, der festlegt, welcher Datentyp zurückgegeben werden soll. Auf diese Weise kann der
Benutzer angeben, ob er Daten als String oder in binärer Form empfangen möchte.
Dieser Abschnitt enthält Informationen zu den folgenden Socket-Objekten:
OpenTcp
OpenUdp
Close
Recv
Send
SendTo
SetTimeout
DnsLookup
ReverseDnsLookup
4.1.1 OpenTcp
OpenTcp wird verwendet, um eine Verbindung zu einem entfernten Server über TCP herzustellen.
Syntax
OpenTcp(ip, port)
GFI LanGuard
4 Scripting-Objekte | 20
Rückgabewert
Socket-Objekt.
Beispiel
Dieses Skript zeigt das Banner eines FTP-Servers, der lokal ausgeführt wird. Durch Einsetzen eines
anderen Wertes für die Variable „ip“ funktioniert es mit jedem beliebigen FTP-Server:
Function Main
Dim SocketObject As Object
Dim ip As String
Dim port As String
Dim strResponse As String
Ip = "127.0.0.1"
Port = "21"
Socket.SetTimeout 5000,5000
Set SocketObject = Socket.OpenTcp(Ip,Port)
If Not SocketObject is Nothing Then
'überprüfen, ob das Objekt erfolgreich zurückgegeben wurde
strResponse = SocketObject.Recv(1024)
echo(strResponse)
SocketObject.Close
End If
End Function
4.1.2 OpenUdp
OpenUdp wird verwendet, um eine Verbindung zu einem entfernten Server über UDP herzustellen.
Syntax
OpenUdp()
Rückgabewert
Socket-Objekt.
Beispiel
Dieses Skript stellt eine Verbindung zu einem in der Variable IP angegebenen DNS-Server her, führt
eine Abfrage nach www.gfi.com durch und zeigt anschließend das Ergebnis an:
Function Main
Dim SocketObject As Object
Dim ip As String
Dim port As String
Dim rawdata As Variant
Dim Response As Variant
Ip = "172.16.130.40"
GFI LanGuard
4 Scripting-Objekte | 21
Port = "53"
strRequest="www.gfi.com"
rawdata = Array(0,3,1,0,0,1,0,0,0,0,0,0,3,&H77, &H77, &H77, &H03,
&H67, &H66, &H69, &H03, &H63, &H6F,&H6D, 0,0,1,0,1)
'^^^^^^^^^^
'Dieser Teil ist der Paketheader unserer Anfrage, er enthält Daten
wie zum Beispiel Flags
'^^^^^^^^^^
‚Dies ist die Anfrage selbst, www.gfi.com, beachten Sie, dass '.'
nicht durch &H2E, sondern durch &H03 dargestellt werden
'^^^^^^^^^^
'Dies ist der Endheader unseres Pakets
Set SocketObject = Socket.OpenUdp()
If Not SocketObject is Nothing Then
'überprüfen, ob das Objekt erfolgreich zurückgegeben wurde
SocketObject.SendTo IP,port,rawdata
Response = SocketObject.Recv(1024)
For a = UBound(response)-3 To UBound(response)
echo(Response(a))
If a <> UBound(response) Then
echo(".")
End If
Next a
SocketObject.Close
End If
End Function
4.1.3 Close
Close dient zum Schließen eines zuvor zugewiesenen Socket-Objekts.
Syntax
Close
Rückgabewert
Keine Rückgabedaten.
Beispiel
Dieses Skript zeigt das Banner eines FTP-Servers, der lokal ausgeführt wird. Durch Einsetzen eines
anderen Wertes für die Variable „ip“ funktioniert es mit jedem beliebigen FTP-Server:
Function Main
Dim SocketObject As Object
Dim ip As String
GFI LanGuard
4 Scripting-Objekte | 22
Dim port As String
Dim strResponse As String
Ip = "127.0.0.1"
Port = "21"
Socket.SetTimeout 5000,5000
Set SocketObject = Socket.OpenTcp(Ip,Port)
If Not SocketObject is Nothing Then
'überprüfen, ob das Objekt erfolgreich zurückgegeben wurde
strResponse = SocketObject.Recv(1024)
echo(strResponse)
SocketObject.Close
End If
End Function
4.1.4 Recv
Recv dient zum Abrufen der Daten eines Sockets (wird sowohl für TCP- als auch für UDPÜbertragungen verwendet).
Syntax
Recv(SizeInBytes, [DataType])
Weitere Informationen
Der Parameter SizeInBytes gibt an, wie groß der zurückgegebene Teil des Puffers ist. Mithilfe des
optionalen Parameters „DataType“ kann das Format festgelegt werden, in dem der Puffer
zurückgegeben werden soll. Wenn kein Datentyp angegeben ist, wird der Puffer analysiert, und es
wird automatisch ein geeigneter Datentyp festgelegt.
Folgende Werte können für den Parameter DatenTyp angegeben werden:
0 – Puffer als Array von Bytes zurückgeben (ideal für Rohdaten)
1 – Puffer als String zurückgeben (ideal, wenn Sie wissen, dass der Puffer aus Rohtext besteht)
2 – Puffer als String zurückgeben, nicht druckbare Zeichen werden in „.“ umgewandelt Optimal,
wenn Sie wissen, dass der Puffer eine Mischung aus reinem Text und Sonderzeichen enthält, Sie
aber nur den reinen Text benötigen.
Rückgabewert
String oder ein Array von Bytes.
Beispiel
Dieses Skript zeigt das Banner eines FTP-Servers, der lokal ausgeführt wird. Durch Einsetzen eines
anderen Wertes für die Variable „ip“ funktioniert es mit jedem beliebigen FTP-Server:
Function Main
Dim SocketObject As Object
Dim ip As String
Dim port As String
GFI LanGuard
4 Scripting-Objekte | 23
Dim strResponse As String
Ip = "127.0.0.1"
Port = "21"
Socket.SetTimeout 5000,5000
Set SocketObject = Socket.OpenTcp(Ip,Port)
If Not SocketObject is Nothing Then
'überprüfen, ob das Objekt erfolgreich zurückgegeben wurde
strResponse = SocketObject.Recv(1024)
echo(strResponse)
SocketObject.Close
End If
End Function
4.1.5 Send
Send wird verwendet, um über eine TCP-Verbindung Daten an den gegenwärtig geöffneten Socket zu
senden.
Syntax
Send (data, [SizeInBytes])
Rückgabewert
Die Anzahl der tatsächlich gesendeten Bytes.
Weitere Informationen
Die Funktion Send kann nur mit einem geöffneten Socket-Objekt verwendet werden, das durch
Herstellen einer TCP-Verbindung geöffnet wurde. Informationen zum Senden von Daten über UDPVerbindungen finden Sie im Abschnitt zur Funktion SendTo weiter unten in diesem Dokument.
Für die Funktion Send kann ein optionaler Parameter angegeben werden (SizeInBytes). Dieser
Parameter legt fest, welcher Anteil des als Datenfeld übergebenen Puffers tatsächlich gesendet
werden soll. Wenn dieser optionale Parameter nicht angegeben ist, wird die Größe automatisch
berechnet.
Beispiel
Dieses Skript zeigt die Standardseite eines lokal ausgeführten Webservers in HTML-Rohform an. Das
Skript kann an jeden beliebigen Webserver angepasst werden, indem einfach der Wert der Variablen
„ip“ entsprechend geändert wird:
Function Main
Dim SocketObject As Object
Dim ip As String
Dim port As String
Dim req As String
Dim strResponse As String
Ip = "172.16.130.112"
Port = "80"
GFI LanGuard
4 Scripting-Objekte | 24
req = "GET / HTTP/1.0"
'Wagenrücklauf und Zeilenvorschub
cr = Chr(13) + Chr(10)
req = CStr(req +cr +cr)
Socket.SetTimeout 5000,5000
Set SocketObject = Socket.OpenTcp(Ip,Port)
'überprüfen, ob das Objekt erfolgreich zurückgegeben wurde
If Not SocketObject is Nothing Then
SocketObject.Send(CStr(req))
strResponse = SocketObject.Recv(1024)
While Len(CStr(strResponse)) <> 0
echo(strResponse)
StrResponse = SocketObject.Recv(1024)
Wend
echo(strResponse)
End If
End Function
4.1.6 SendTo
SendTo wird verwendet, um über eine UDP-Verbindung Daten an den gegenwärtig geöffneten Socket
zu senden.
Syntax
SendTo (ip, port, data, [SizeInBytes])
Rückgabewert
Die Anzahl der tatsächlich gesendeten Bytes.
Weitere Informationen
Die Funktion SendTo kann nur mit einem geöffneten Socket-Objekt verwendet werden, das durch
Herstellen einer UDP-Verbindung geöffnet wurde. Informationen zum Senden von Daten über eine
TCP-Verbindung finden Sie im Abschnitt zur Funktion Send weiter oben in diesem Dokument.
Für die Funktion SendTo kann ein optionaler Parameter angegeben werden (SizeInBytes). Dieser
Parameter legt fest, welcher Anteil des als Datenfeld übergebenen Puffers tatsächlich gesendet
werden soll. Wenn dieser optionale Parameter nicht angegeben ist, wird die Größe automatisch
berechnet.
Beispiel
Dieses Skript stellt eine Verbindung zu einem in der Variable IP angegebenen DNS-Server her, führt
eine Abfrage nach www.gfi.com durch und zeigt anschließend das Ergebnis an:
Function Main
Dim SocketObject As Object
Dim ip As String
GFI LanGuard
4 Scripting-Objekte | 25
Dim port As String
Dim rawdata As Variant
Dim Response As Variant
Ip = "172.16.130.40"
Port = "53"
strRequest="www.gfi.com"
rawdata = Array(0,3,1,0,0,1,0,0,0,0,0,0,3, &H77, &H77, &H77, &H03,
&H67, &H66, &H69, &H03, &H63, &H6F,&H6D, 0,0,1,0,1)
Set SocketObject = Socket.OpenUdp()
If Not SocketObject is Nothing Then
'überprüfen, ob das Objekt erfolgreich zurückgegeben wurde
SocketObject.SendTo IP,port,rawdata
Response = SocketObject.Recv(1024)
For a = UBound(response)-3 To UBound(response)
echo(Response(a))
If a <> UBound(response) Then
echo(".")
End If
Next a
SocketObject.Close
End If
End Function
4.1.7 SetTimeout
Der Standardwert für die Zeitüberschreitung beim Senden bzw. Empfangen von Daten beträgt
2 Sekunden. Mithilfe von SetTimeout kann ein anderer Wert für die Zeitüberschreitung festgelegt
werden. Der Wert gilt sowohl für das Senden als auch für das Empfangen von Daten.
Syntax
SetTimeout(SendTimeout, RecieveTimeout)
Rückgabewert
Keine Rückgabedaten.
Weitere Informationen
Der Wert für SetTimeout muss festgelegt werden, bevor das Objekt erstellt wird, das zum Senden
und Empfangen verwendet wird. Der Parameter für die Zeitüberschreitung wird in Millisekunden
übergeben. Wenn der Wert -1 übergeben wird, wird der gegenwärtig eingestellte Wert für die
Zeitüberschreitung verwendet.
Beispiel
Dieses Skript zeigt das Banner eines FTP-Servers, der lokal ausgeführt wird. Durch Einsetzen eines
anderen Wertes für die Variable „ip“ funktioniert es mit jedem beliebigen FTP-Server:
GFI LanGuard
4 Scripting-Objekte | 26
Function Main
Dim SocketObject As Object
Dim ip As String
Dim port As String
Dim strResponse As String
Ip = "127.0.0.1"
Port = "21"
Socket.SetTimeout 5000,5000
Set SocketObject = Socket.OpenTcp(Ip,Port)
If Not SocketObject is Nothing Then
'überprüfen, ob das Objekt erfolgreich zurückgegeben wurde
strResponse = SocketObject.Recv(1024)
echo(strResponse)
SocketObject.Close
End If
End Function
4.1.8 DnsLookup
DnsLookup dient zum Auflösen von Hostnamen in IP-Adressen. Diese Funktion wird hauptsächlich
verwendet, um Verbindungen zu Servern herzustellen, deren IP-Adresse unbekannt ist.
Syntax
DnsLookup(hostname)
Rückgabewert
String (IP-Adresse).
Beispiel
Sehr einfacher DNS-Lookup und Reverse Lookup:
Function Main
Dim SocketObject As Object
Dim ServerName As String
Dim IP As String
Dim ResolvedName As String
'Wagenrücklauf und Zeilenvorschub
cr = Chr(13) + Chr(10)
ServerName = "whois.networksolutions.com"
echo("Wird gesucht"+cr)
Socket.SetTimeout 5000,5000
ip = socket.DnsLookup(ServerName)
echo(ServerName + "entspricht der IP-Adresse:"+cr )
GFI LanGuard
4 Scripting-Objekte | 27
echo(ip +cr)
ResolvedName = Socket.ReverseDnsLookup(ip)
echo(cr)
echo("IP-Adresse "+ip+ "entspricht "+cr)
echo(ResolvedName+cr)
End Function
4.1.9 ReverseDnsLookup
ReverseDnsLookup dient zum Auflösen von IP-Adressen in Hostnamen.
Syntax
ReverseDnsLookup(IP)
Rückgabewert
String, der den zurückgegebenen Hostnamen enthält.
Beispiel
Sehr einfacher DNS-Lookup und Reverse Lookup:
Function Main
Dim SocketObject As Object
Dim ServerName As String
Dim IP As String
Dim ResolvedName As String
'Wagenrücklauf und Zeilenvorschub
cr = Chr(13) + Chr(10)
ServerName = "whois.networksolutions.com"
echo("Wird gesucht"+cr)
Socket.SetTimeout 5000,5000
ip = socket.DnsLookup(ServerName)
echo(ServerName + "entspricht der IP-Adresse:"+cr )
echo(ip +cr)
ResolvedName = Socket.ReverseDnsLookup(ip)
echo(cr)
echo("IP-Adresse "+ip+ "entspricht "+cr)
echo(ResolvedName+cr)
End Function
GFI LanGuard
4 Scripting-Objekte | 28
4.2 SNMP-Objekte
Mithilfe des SNMP-Objekts können Benutzer eine SNMP-Verbindung herstellen, um Werte abzufragen
und festzulegen. Außerdem können mit diesem Objekt Objektbezeichner (OID) aufgelistet werden.
SNMP wird im Allgemeinen verwendet, um Systeminformationen zu einem Dienst oder einem Gerät
abzurufen. Viele Geräte verfügen über einen integrierten SNMP-Server. Mit dem SNMP-Objekt können
verschiedene Eigenschaften dieser Geräte abgefragt werden. Dadurch können mögliche
Sicherheitslücken, Schwachstellen und Fehlkonfigurationen auf diesen Geräten erkannt werden.
Dieser Abschnitt enthält Informationen zu den folgenden SNMP-Objekten:
Connect
Get
GetNext
Set
Close
4.2.1 Connect
Connect wird verwendet, um eine Verbindung zu einem entfernten Server herzustellen und ein SNMPObjekt für diese Verbindung zurückzugeben.
Syntax
Connect(ip, community_string)
Rückgabewert
SNMP-Objekt.
Beispiel
Sehr einfacher SNMP-Client, der den SysName eines Computers mit installiertem SNMP-Server abruft:
Function Main
Dim snmp1 As Object
'Wagenrücklauf und Zeilenvorschub
cr = Chr(13) + Chr(10)
Set snmp1 = SNMP.Connect("127.0.0.1", "public")
'OID des sysName
Val1 = "1.3.6.1.2.1.1.5.0"
'OID des systems-Objekts
root = "1.3.6.1.2.1.1."
snmp1.Get Val1
echo "Oid: '"+Val1 + "'"+cr
echo "Wert: '"+snmp1.Get(Val1)+"'"+cr
snmp1.Close
End Function
GFI LanGuard
4 Scripting-Objekte | 29
4.2.2 Get
Get dient zum Abruf des Strings, der zum angegebenen OID gehört.
Syntax
Get (oid)
Rückgabewert
String.
Beispiel
Sehr einfacher SNMP-Client, der den SysName eines Computers mit installiertem SNMP-Server abruft:
Function Main
Dim snmp1 As Object
'Wagenrücklauf und Zeilenvorschub
cr = Chr(13) + Chr(10)
Set snmp1 = SNMP.Connect("127.0.0.1", "public")
'OID des sysName
Val1 = "1.3.6.1.2.1.1.5.0"
'OID des systems-Objekts
root = "1.3.6.1.2.1.1."
snmp1.Get Val1
echo "Oid: '"+Val1 + "'"+cr
echo "Wert: '"+snmp1.Get(Val1)+"'"+cr
snmp1.Close
End Function
4.2.3 GetNext
GetNext wird verwendet, um den nächsten String abzurufen, der zum angegebenen OID gehört.
Syntax
GetNext (oid)
Rückgabewert
String.
Beispiel
Sehr einfacher SNMP-Client, der alle Strings abruft, die zum System-Objekt eines Computers mit
installiertem SNMP-Server gehören. Rohdaten wie die Betriebsdauer OID 1.3.5.1.2.1.1.3.0
werden in Hundertstelsekunden angezeigt:
Function Main
Dim snmp1 As Object
'Wagenrücklauf und Zeilenvorschub
cr = Chr(13) + Chr(10)
GFI LanGuard
4 Scripting-Objekte | 30
Set snmp1 = SNMP.Connect("127.0.0.1", "public")
'OID des sysName
Val1 = "1.3.6.1.2.1.1.1.0"
'OID des systems-Objekts
root = "1.3.6.1.2.1.1."
'snmp1.Get Val1
While Val1 <> ""'
echo "Oid: '"+Val1 + "'"+cr
echo "Wert: '"+snmp1.Get(Val1)+"'"+cr
Val1 = snmp1.GetNext(Val1)
If InStr(Val1, root) <> 1 Then Val1 =""
Wend
snmp1.Close
End Function
4.2.4 Set
Set dient zum Festlegen des Werts für einen angegebenen OID.
Syntax
Set (oid, String)
Rückgabewert
True, wenn erfolgreich, sonst False.
Beispiel
Sehr einfacher SNMP-Client, der die SysLocation eines Computers mit installiertem SNMP-Server auf
„Malta“ setzt. Beachten Sie, dass dieses Skript in jedem Fall fehlschlägt, weil auf die öffentliche
Community nur lesender Zugriff möglich ist:
Function Main
Dim snmp1 As Object
'Wagenrücklauf und Zeilenvorschub
cr = Chr(13) + Chr(10)
Set snmp1 = SNMP.Connect("127.0.0.1", "public")
'OID des sysName
Val1 = "1.3.6.1.2.1.1.6.0"
root = "1.3.6.1.2.1.1." 'OID des systems-Objekts
If snmp1.Set(Val1, "Malta") = true Then
echo("Wert erfolgreich festgelegt")
Else
echo("Festlegen des Werts fehlgeschlagen")
End If
snmp1.Close
GFI LanGuard
4 Scripting-Objekte | 31
End Function
4.2.5 Close
Close dient zum Schließen offener SNMP-Sitzungen.
Syntax
Close
Rückgabewert
Keine Rückgabedaten.
Beispiel
Sehr einfacher SNMP-Client, der den SysName eines Computers mit installiertem SNMP-Server abruft:
Function Main
Dim snmp1 As Object
'Wagenrücklauf und Zeilenvorschub
cr = Chr(13) + Chr(10)
Set snmp1 = SNMP.Connect("127.0.0.1", "public")
'OID des sysName
Val1 = "1.3.6.1.2.1.1.5.0"
'OID des systems-Objekts
root = "1.3.6.1.2.1.1."
snmp1.Get Val1
echo "Oid: '"+Val1 + "'"+cr
echo "Wert: '"+snmp1.Get(Val1)+"'"+cr
snmp1.Close
End Function
4.3 File-Objekte
Mit dem File-Objekt können Benutzer Dateien sowohl remote als auch lokal öffnen und lesen bzw.
schreiben. Dateien können in verschiedenen Modi geöffnet werden, vom Erstellen einer neuen Datei
über das Öffnen einer vorhandenen Datei bis hin zum Öffnen einer Datei und dem Löschen ihres
Inhalts. Dateien können außerdem zum Lesen, Schreiben oder im Abfragemodus geöffnet werden (in
dem Sie lediglich die Größe und Attribute der Datei abrufen, jedoch nicht die Datei selbst lesen oder
schreiben können). Neben den Schreib- und Lesevorgängen unterstützt das File-Objekt auch
allgemeine Dateioperationen wie die Überprüfung der Dateigröße, Dateiattribute sowie die Änderung
der Schreib-/Leseposition innerhalb der Datei.
Dieser Abschnitt enthält Informationen zu den folgenden File-Objekten:
Connect
Open
Close
Read
GFI LanGuard
4 Scripting-Objekte | 32
Write
WriteLine
Seek
Löschen
Size
FileVersion
ProductVersion
Attribute
4.3.1 Connect
Mit Connect können Sie eine Verbindung zu einem Computer (entweder lokal oder remote) herstellen,
auf dem Sie Dateien öffnen möchten.
Syntax
Connect (IP-Adresse oder NetBIOS-Name)
Rückgabewert
File-Objekt
Beispiel
Dieses Skript öffnet eine Datei (test.txt) auf der lokalen Festplatte C und schreibt zwei Zeilen in die
Datei:
Function Main
Dim textfile As Object
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\test.txt", GENERIC_WRITE, CREATE_ALWAYS) Then
textfile.WriteLine("Hallo, das ist eine Testdatei.")
textfile.WriteLine("Sie wurde mit einem GFI LanGuard-Skript
erstellt.")
textfile.Close
End If
End Function
4.3.2 Open
Opens öffnet eine Datei zum Schreiben bzw. Lesen.
Syntax
Open (Dateiname, Modus, Vorgang)
GFI LanGuard
4 Scripting-Objekte | 33
Rückgabewert
True, falls der Vorgang erfolgreich ausgeführt wird, ansonsten False.
Weitere Informationen
Modus:
0 – Datei wird im Abfragemodus geöffnet. Sie können die Attribute abrufen, jedoch nicht auf die
Datei selbst zugreifen.
GENERIC_READ – Datei zum Lesen öffnen
GENERIC_WRITE – Datei zum Schreiben öffnen
Vorgang
CREATE_NEW – Neue Datei erstellen Der Vorgang schlägt fehl, falls die angegebenen Datei bereits
vorhanden ist.
CREATE_ALWAYS – Neue Datei erstellen Wenn die Datei bereits vorhanden ist, wird sie überschrieben.
OPEN_EXISTING – Datei öffnen Der Vorgang schlägt fehl, wenn die Datei nicht vorhanden ist.
OPEN_ALWAYS – Datei öffnen, falls vorhanden Wenn die Datei nicht vorhanden ist, wird sie neu
erstellt.
TRUNCATE_EXISTING – Datei öffnen Nach dem Öffnen wird die Datei auf eine Größe von 0 Byte
gekürzt.
Beispiel
Dieses Skript öffnet eine Datei (test.txt) auf der lokalen Festplatte C und schreibt zwei Zeilen in die
Datei:
Function Main
Dim textfile As Object
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\test.txt", GENERIC_WRITE, CREATE_ALWAYS) Then
textfile.WriteLine("Hallo, das ist eine Testdatei.")
textfile.WriteLine("Sie wurde mit einem GFI LanGuard-Skript
erstellt.")
textfile.Close
End If
End Function
4.3.3 Close
Mit Close können Sie eine Instanz einer geöffneten Datei schließen.
Syntax
Close
Rückgabewert
Keine Rückgabedaten.
GFI LanGuard
4 Scripting-Objekte | 34
Beispiel
Dieses Skript öffnet eine Datei (test.txt) auf der lokalen Festplatte C und schreibt zwei Zeilen in die
Datei:
Function Main
Dim textfile As Object
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\test.txt", GENERIC_WRITE, CREATE_ALWAYS) Then
textfile.WriteLine("Hallo, das ist eine Testdatei.")
textfile.WriteLine("Sie wurde mit einem GFI LanGuard-Skript
erstellt.")
textfile.Close
End If
End Function
4.3.4 Read
Mit Read können Sie einen String der Länge (x) aus einer Datei auslesen.
Syntax
Read(number_of_bytes, [DataType])
Rückgabewert
String.
Weitere Informationen
DatenTyp ist ein optionaler Parameter. Wenn Sie den Datentyp nicht angeben, wird dieser
automatisch vom System ermittelt.
Folgende Werte können für den Parameter DatenTyp angegeben werden:
0 – Puffer als Array von Bytes zurückgeben (ideal für Rohdaten)
1 – Puffer als String zurückgeben (ideal, wenn Sie wissen, dass der Puffer aus Rohtext besteht)
2 – Puffer als String zurückgeben, nicht druckbare Zeichen werden ignoriert. Diese Option ist optimal, wenn Sie wissen, dass der Puffer eine Mischung aus reinem Text und Sonderzeichen enthält,
Sie aber nur den reinen Text benötigen.
Beispiel
Das folgende Skript zeigt den Inhalt der Datei hosts an:
Function Main
Dim textfile As Object
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\windows\system32\drivers\etc\hosts", GENERIC_
READ, Open_Existing) Then
echo(textfile.read(1024,1))
textfile.Close
GFI LanGuard
4 Scripting-Objekte | 35
End If
End Function
4.3.5 Write
Mit Write können Sie einen String in eine Datei schreiben, ohne am Ende des Strings CRLF
(Wagenrücklauf und Zeilenvorschub) anzuhängen.
Syntax
Write(string, [number_of_bytes])
Rückgabewert
Keine Rückgabedaten.
Weitere Informationen
anzahl_bytes ist ein optionaler Parameter. Wenn Sie diesen auslassen, wird der Wert der Größe des
übergebenen Strings entsprechend berechnet.
Beispiel
Dieses Skript öffnet eine Datei (test.txt) auf der lokalen Festplatte C und schreibt zwei Zeilen in die
Datei:
Function Main
Dim textfile As Object
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\test.txt", GENERIC_WRITE, CREATE_ALWAYS) Then
textfile.WriteLine("Hallo, das ist eine Testdatei.")
textfile.WriteLine("Sie wurde mit einem GFI LanGuard-Skript
erstellt.")
textfile.Close
End If
End Function
4.3.6 WriteLine
Mit WriteLine können Sie einen String in eine Datei schreiben, wobei am Ende des Strings CRLF
(Wagenrücklauf und Zeilenvorschub) angehängt wird.
Syntax
WriteLine(string)
Rückgabewert
Boolescher Wert: True (ungleich Null) bei Erfolg, ansonsten False (Null)
Beispiel
Dieses Skript öffnet eine Datei (test.txt) auf der lokalen Festplatte C und schreibt zwei Zeilen in die
Datei:
Function Main
Dim textfile As Object
GFI LanGuard
4 Scripting-Objekte | 36
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\test.txt", GENERIC_WRITE, CREATE_ALWAYS) Then
textfile.WriteLine("Hallo, das ist eine Testdatei.")
textfile.WriteLine("Sie wurde mit einem GFI LanGuard-Skript
erstellt.")
textfile.Close
End If
End Function
4.3.7 Seek
Mit Seek können Sie die Schreib-/Leseposition innerhalb der Datei ändern.
Syntax
Seek(Entfernung, Methode)
Rückgabewert
Aktuelle Position innerhalb der Datei
Weitere Informationen
Entfernung bestimmt die Anzahl der Zeichen, um die Sie den Cursor verschieben möchten.
Für Methode können Sie folgende Werte angeben:
0 – Cursor vom Dateianfang um die angegebene Anzahl Bytes verschieben
1 – Cursor von der aktuellen Position aus um die angegebene Anzahl Bytes bewegen
2 – Cursor vom Dateiende aus um die angegebene Anzahl Bytes bewegen
Beispiel
Das folgende Skript zeigt den Inhalt der Datei hosts an, nachdem der Cursor um 50 Zeichen Richtung
Dateiende verschoben wurde:
Function Main
Dim textfile As Object
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\windows\system32\drivers\etc\hosts", GENERIC_
READ, Open_Existing) Then
Textfile.Seek 50,0
echo(textfile.read(1024))
textfile.Close
End If
End Function
4.3.8 Löschen
Mit Delete können Sie Dateien auf der Festplatte löschen.
Syntax
Delete (Dateipfad)
GFI LanGuard
4 Scripting-Objekte | 37
Weitere Informationen
Sie müssen eine Verbindung mit dem Computer herstellen, bevor Sie die Datei löschen können.
Hinweis
Öffnen Sie keine Dateien, die Sie löschen möchten. Ansonsten wird die Datei gesperrt,
und der Löschvorgang schlägt fehl.
Rückgabewert
True, falls der Löschvorgang erfolgreich ist, ansonsten False.
Beispiel
Dieses Skript löscht die Datei (test.txt) auf der lokalen Festplatte C, falls diese vorhanden ist:
Function Main
Dim textfile As Object
Set textfile = File.Connect("127.0.0.1")
If textfile.Delete("c:\test.txt") = true Then
echo("Datei erfolgreich gelöscht")
else
echo("Löschvorgang fehlgeschlagen")
End If
End Function
4.3.9 Size
Gibt die Größe einer Datei zurück.
Syntax
Size ([highpart])
Rückgabewert
Größe der Datei (lowpart-Eigenschaft der Dateigröße).
Weitere Informationen
Die Dateigröße besteht aus zwei Teilen. Einem oberen und einem unteren Teil. Standardmäßig gibt
die Funktion den unteren Teil zurück. highpart ist ein optionaler Parameter, mit dem Sie die highpartEigenschaft der Dateigröße abfragen können, falls Sie diese benötigen.
Beispiel
Größe der Datei hosts anzeigen:
Function Main
Dim textfile As Object
Dim size As Integer
Set textfile = File.Connect("127.0.0.1")
GFI LanGuard
4 Scripting-Objekte | 38
If textfile.Open("c:\windows\system32\drivers\etc\hosts", GENERIC_
READ, Open_Existing) Then
size = Textfile.Size
echo("Ihre host-Datei hat die Größe: " & size & "Byte")
textfile.Close
End If
End Function
4.3.10 FileVersion
FileVersion gibt die Version einer Datei zurück, falls die entsprechenden Eigenschaften zugewiesen
wurden.
Syntax
FileVersion (String)
Rückgabewert
Version der Datei, wenn Versionsinformationen zur Datei vorliegen (liefert einen String).
Beispiel
Anzeige der Dateiversion von calc.exe:
Function Main
Dim textfile As Object
Dim ver As String
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\windows\system32\calc.exe", GENERIC_READ,
Open_Existing) Then
ver = Textfile.FileVersion
echo("Dateiversion von Calc.exe: " & ver)
textfile.Close
End If
End Function
4.3.11 ProductVersion
ProductVersion gibt die Produktversionseigenschaft einer Datei zurück, falls diese Information
vorliegt.
Syntax
ProductVersion
Rückgabewert
String.
Beispiel
Anzeige der Produktversion von calc.exe:
Function Main
GFI LanGuard
4 Scripting-Objekte | 39
Dim textfile As Object
Dim ver As String
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\windows\system32\calc.exe", GENERIC_READ,
Open_Existing) Then
ver = Textfile.ProductVersion
echo("Produktversion von Calc.exe: " & ver)
textfile.Close
End If
End Function
4.3.12 Attribute
Gibt die Attribute einer Datei zurück.
Syntax
Attribute
Rückgabewert
Integer: enthält die kodierten Dateiattribute.
Weitere Informationen
Attributwerte
Schreibgeschützt – Datei kann nur gelesen werden:
Versteckt – Datei oder Verzeichnis ist versteckt.
System – Bei der Datei oder dem Verzeichnis handelt es sich um eine Systemdatei bzw. ein Systemverzeichnis.
16 – Verzeichnis – Dieses Element ist ein Verzeichnis.
32 – Archiv – Bei der Datei oder dem Verzeichnis handelt es sich um eine Archivdatei bzw. ein
Archivverzeichnis.
64 – Gerät – Reserviert, darf nicht verwendet werden.
128 – Normal – Die Datei hat keine Attribute.
256 – Temporäre Datei – Diese Datei ist als temporär gekennzeichnet.
512 – Sparse-Datei – Für diese Datei ist das Sparse-Attribut gesetzt.
1024 – Analysepunkt – Der Datei oder dem Verzeichnis ist ein Analysepunkt zugeordnet.
2048 – Komprimiert – Die Datei oder das Verzeichnis ist komprimiert.
4096 – Offline – Die Datei wurde in den Offline-Speicher verschoben. Die Daten sind derzeit nicht
verfügbar.
8192 – Kein Index – Diese Datei wird nicht indiziert.
16384 – Verschlüsselt – Diese Datei ist verschlüsselt.
GFI LanGuard
4 Scripting-Objekte | 40
Hinweis
Wenn eine Datei über mehrere dieser Attribute verfügt, werden die jeweiligen Werte
addiert. Beispiel: Für ein Archiv, das zugleich schreibgeschützt und versteckt ist, würde
der Wert 35 zurückgeliefert (32 für das Archiv, 1 für schreibgeschützt und 2 für
versteckt).
Beispiel
Anzeige der Dateiattribute von calc.exe:
Function Main
Dim textfile As Object
Dim att As Integer
Set textfile = File.Connect("127.0.0.1")
If textfile.Open("c:\windows\system32\calc.exe", GENERIC_READ,
Open_Existing) Then
att = Textfile.Attributes
echo("Calc.exe hat den Attributwert: " & att)
textfile.Close
End If
End Function
4.4 Registrierungsobjekte
Das Registrierungsobjekt enthält Funktionen, mit denen Benutzer Registrierungsdaten auslesen und
festlegen können, und zwar sowohl lokal als auch auf entfernten Systemen. Das Objekt unterstützt
alle Datentypen, die in der Registrierung verwendet werden: (reg_dword, reg_sz,,reg, multi_sz, reg_
binary). Zusätzlich stellt das Objekt Funktionen zur Auflistung und zum Löschen von Schlüsseln und
Werten bereit.
Dieser Abschnitt enthält Informationen zu den folgenden Registrierungsobjekten:
Connect
Read
Write
GetFirstValue
GetNextValue
GetFirstKey
GetNextKey
DeleteValue
DeleteKey
4.4.1 Connect
Dient zum Herstellen einer Verbindung mit der Registrierung des angegebenen Computers.
GFI LanGuard
4 Scripting-Objekte | 41
Syntax
Connect (IP-Adresse oder NetBIOS-Name)
Rückgabewert
Registrierungsobjekt.
Beispiel
Dieses Skript ermittelt die Version von Internet Explorer, indem es den Wert direkt aus der
Registrierung ausliest.
Function Main
Dim Ro As Object
Dim ie_version as string
Set Ro = Registry.Connect("127.0.0.1")
ie_version = ro.Read("SOFTWARE\Microsoft\Internet Explorer\Version
Vector", "IE")
echo "IE-Version: " + ie_version
End Function
4.4.2 Read
Die Funktion Read dient zum Lesen der Werte von Registrierungsschlüsseln.
Syntax
Read(Path, ValueName)
Rückgabewert
Long – wenn der Registrierungswert vom Typ REG_DWORD ist
String – wenn der Registrierungswert vom Typ REG_SZ ist
Array von Strings – wenn der Registrierungswert vom Typ REG_MULTI_SZ ist
Array von Bytes – wenn der Registrierungswert vom Typ REG_BINARY ist
Beispiel
Dieses Skript ermittelt die Version von Internet Explorer, indem es den Wert direkt aus der
Registrierung ausliest.
Function Main
Dim Ro As Object
Dim ie_version as string
Set Ro = Registry.Connect("127.0.0.1")
ie_version = ro.Read("SOFTWARE\Microsoft\Internet Explorer\Version
Vector", "IE")
echo "IE-Version: " + ie_version
End Function
4.4.3 Write
Die Funktion Write dient zum Schreiben von Registrierungsschlüsseln.
GFI LanGuard
4 Scripting-Objekte | 42
Syntax
Write(Path, ValueName, Value)
Rückgabewert
Keine Rückgabedaten.
Weitere Informationen
Verwenden Sie folgende Deklarationen, um den richtigen Typ von Werten sicherzustellen:
Long – wenn der Registrierungswert vom Typ REG_DWORD ist
String – wenn der Registrierungswert vom Typ REG_SZ ist
Array von Strings – wenn der Registrierungswert vom Typ REG_MULTI_SZ ist
Arrays müssen als Variant deklariert werden, und die Wertzuweisung muss mithilfe der Funktion
array() erfolgen. Beispiel:
Dim test as variant
Test = array(10,2,10)
Wenn der Schlüssel nicht vorhanden ist, wird er erstellt.
Beispiel
Das Skript schreibt den Wert „Test“ in den folgenden Schlüssel:
SOFTWARE\Microsoft\testkey\testsubkey:
Function Main
Dim Ro As Object
Dim test As String
test = "Testwert"
Set Ro = Registry.Connect("127.0.0.1")
ro.write "SOFTWARE\Microsoft\testkey", "testsubkey",test
End Function
4.4.4 GetFirstValue
Der Zweck der Funktion GetFirstValue besteht darin, die Auflistung eines Registrierungspfads zu
initiieren.
Syntax
GetFirstValue(Path, ValueName)
Rückgabewert
Long – wenn der Registrierungswert vom Typ REG_DWORD ist
String – wenn der Registrierungswert vom Typ REG_SZ ist
Array von Strings – wenn der Registrierungswert vom Typ REG_MULTI_SZ ist
Array von Bytes – wenn der Registrierungswert vom Typ REG_BINARY ist
GFI LanGuard
4 Scripting-Objekte | 43
Weitere Informationen
ValueName muss eine Variable des Typs Variant sein. GetFirstValue gibt den Namen des Attributs
zurück, das den Wert enthält, der innerhalb der Variable ValueName zurückgegeben wird.
Beispiel
Dieses Skript zeigt alle Programme, die beim Systemstart ausgeführt werden:
Function Main
Dim Ro As Object
Dim valueName as variant
cr = Chr(13) + Chr(10)
Set Ro = Registry.Connect("127.0.0.1")
Value = ro.GetFirstValue
("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", valueName)
While Value <> ""
Echo "ValueName: " & valueName & " = " & value & cr
Value = ro.GetNextValue(valueName)
Wend
End Function
4.4.5 GetNextValue
Die Funktion GetNextValue wird bei der Auflistung von Registrierungspfaden verwendet. Sie gibt die
Folgewerte einer Sequenz aus, die mit GetFirstValue begonnen wurde.
Syntax
GetNextValue(ValueName)
Rückgabewert
Long – wenn der Registrierungswert vom Typ REG_DWORD ist
String – wenn der Registrierungswert vom Typ REG_SZ ist
Array von Strings – wenn der Registrierungswert vom Typ REG_MULTI_SZ ist
Array von Bytes – wenn der Registrierungswert vom Typ REG_BINARY ist
Weitere Informationen
ValueName muss eine Variable des Typs Variant sein. GetNextValue gibt den Namen des Attributs
zurück, welches den Wert enthält, der innerhalb der Variable ValueName zurückgegeben wird.
Beispiel
Dieses Skript zeigt alle Programme, die beim Systemstart ausgeführt werden:
Function Main
Dim Ro As Object
Dim valueName as variant
cr = Chr(13) + Chr(10)
Set Ro = Registry.Connect("127.0.0.1")
GFI LanGuard
4 Scripting-Objekte | 44
Value = ro.GetFirstValue
("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", valueName)
While Value <> ""
Echo "ValueName: " & valueName & " = " & value & cr
Value = ro.GetNextValue(valueName)
Wend
End Function
4.4.6 GetFirstKey
Dient zum Starten der Auflistung von Schlüsseln, die in einem Registrierungspfad enthalten sind.
Syntax
GetFirstKey(Path)
Rückgabewert
String – Name des ersten Schlüssels.
Beispiel
Dieses Skript zeigt alle Schlüssel von Microsoft:
Function Main
Dim Ro As Object
cr = Chr(13) + Chr(10)
Set Ro = Registry.Connect("127.0.0.1")
Value = ro.GetFirstKey("SOFTWARE\Microsoft")
While Value <> ""
Echo "Keyname = " & value & cr
Value = ro.GetNextKey
Wend
End Function
4.4.7 GetNextKey
GetNextKey dient zum Fortsetzen der Auflistung von Schlüsseln, die mit der Funktion GetFirstKey
gestartet wurde.
Syntax
GetNextKey
Rückgabewert
String, der den Namen des Schlüssels enthält.
Beispiel
Dieses Skript zeigt alle Schlüssel von Microsoft:
Function Main
Dim Ro As Object
GFI LanGuard
4 Scripting-Objekte | 45
cr = Chr(13) + Chr(10)
Set Ro = Registry.Connect("127.0.0.1")
Value = ro.GetFirstKey("SOFTWARE\Microsoft")
While Value <> ""
Echo "Keyname = " & value & cr
Value = ro.GetNextKey
Wend
End Function
4.4.8 DeleteValue
Die Funktion DeleteValue dient zum Löschen von Werten aus Registrierungsschlüsseln.
Syntax
DeleteValue(Path, ValueName)
Rückgabewert
0 – bei erfolgreichem Löschen, Fehlernummer bei Fehlschlag.
Beispiel
Dieses Skript löscht den Registrierungswert, der im obigen Beispiel für das Schreiben von Werten
erstellt wurde:
Function Main
Dim Ro As Object
Dim result As Integer
Set Ro = Registry.Connect("127.0.0.1")
result = ro.DeleteValue("SOFTWARE\Microsoft\Testschlüssel",
"Testunterschlüssel")
If result = 0 Then
Echo "Wert erfolgreich gelöscht"
Else
Echo "Löschen des Werts fehlgeschlagen. Fehlercode: " & result
End If
End Function
4.4.9 DeleteKey
Die Funktion DeleteKey dient zum Löschen von Registrierungssschlüsseln.
4.4.10 Syntax
DeleteKey(Path)
Rückgabewert
0 – bei erfolgreichem Löschen, Fehlernummer bei Fehlschlag.
Beispiel
Dieses Skript löscht einen Registrierungsschlüssel:
GFI LanGuard
4 Scripting-Objekte | 46
Function Main
Dim Ro As Object
Dim result As Integer
Set Ro = Registry.Connect("127.0.0.1")
result = ro.DeleteKey("SOFTWARE\Microsoft\Testschlüssel")
If result = 0 Then
Echo "Wert erfolgreich gelöscht"
Else
Echo "Löschen des Werts fehlgeschlagen. Fehlercode: " & result
End If
End Function
4.5 HTTP-Objekte
Dieses Objekt enthält eine Reihe von Funktionen, die den Benutzer bei der Durchführung von
Webanforderungen unterstützen. Das Objekt unterstützt verschiedenste Szenarios, darunter
Authentifizierung, Verwendung von Proxys, Proxy-Authentifizierung und Anpassung von Headern. Für
den Abruf werden sowohl die Get- als auch die Post-Methode unterstützt.
Zusätzlich erlaubt das Objekt auch das Festlegen benutzerdefinierter Header und Verben. Alle
Anforderungen liefern nicht nur die Header und den Textkörper der jeweiligen Anforderung, sondern
darüber hinaus auch den Rückgabewert des Vorgangs zurück. Wenn der Zweck des Skripts also darin
besteht, festzustellen, ob eine Seite vorhanden ist oder nicht, muss der Benutzer nicht die Antwort
auswerten, sondern lediglich den Rückgabecode überprüfen. Wenn zum Beispiel der Code 404
zurückgegeben wird, bedeutet dies, dass die angeforderte Seite nicht vorhanden ist.
Dieser Abschnitt enthält Informationen zu den folgenden HTTP-Objekten:
Connect
GetURL
PostURL
SendRequest
AddHeader
Verb
HTTPVersion
IP
Port
RawResponseHeaders
Body
Authentication
ProxyUser
ProxyPassword
GFI LanGuard
4 Scripting-Objekte | 47
HttpUser
HttpPassword
ResponseHeaders
4.5.1 Connect
Connect wird verwendet, um den Hostnamen oder die IP-Adresse sowie den Port des HTTP-Servers im
Objekt festzulegen.
Syntax
HTTP.Connect (STRING hostname, LONG port)
Bedeutung der Parameter:
Hostname – kann die IP-Adresse oder den Hostnamen enthalten (Beispiel: 192.168.11.11 oder
www.gfi.com)
Port – eine ganze Zahl zwischen 1 und 65535
Rückgabewert
HTTP-Objekt.
Beispiel
Dieses Skript setzt eine GET-Anforderung ab und gibt den Rückgabecode aus:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
' Um durch den Proxy mit automatischer Authentifizierung zu
gelangen,
' muss die Authentifizierung auf den Wert 1 festgelegt werden.
HTTPobj.Authentication = 1
' GET-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
echo "Ergebnis: " + cstr(HTTPResponse)
End Function
4.5.2 GetURL
GetUrl dient zum Initiieren von GET-Anforderungen an HTTP-Server. GET-Anforderungen werden zum
Abruf von Dokumenten verwendet, die sich auf dem HTTP-Server befinden.
Syntax
GetUrl (STRING document)
Bedeutung der Parameter:
GFI LanGuard
4 Scripting-Objekte | 48
Document – eine Zeichenfolge (Beispiel: index.html)
Rückgabewert
Keine Rückgabedaten.
Beispiel
Dieses Skript zeigt alle Schlüssel von Microsoft:
Function Main
Dim Ro As Object
cr = Chr(13) + Chr(10)
Set Ro = Registry.Connect("127.0.0.1")
Value = ro.GetFirstKey("SOFTWARE\Microsoft")
While Value <> ""
Echo "Keyname = " & value & cr
Value = ro.GetNextKey
Wend
End Function
4.5.3 PostURL
PostUrl dient zum Initiieren von POST-Anforderungen an HTTP-Server. POST-Anforderungen werden
zum Übermitteln von Daten an HTTP-Server verwendet.
Syntax
PostUrl (STRING document, STRING data)
Bedeutung der Parameter:
Document ist eine Zeichenfolge (Beispiel: index.html)
Data ist eine Zeichenfolge (Beispiel: Wert1=Datum1)
Rückgabewert
Keine Rückgabedaten.
Beispiel
Dieses Skript setzt eine POST-Anforderung ab und gibt den Rückgabecode aus:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.PostURL "/", "Test"
'Um durch den Proxy mit automatischer Authentifizierung zu gelangen,
'muss die Authentifizierung auf den Wert 1 festgelegt werden.
HTTPobj.Authentication = 1
GFI LanGuard
4 Scripting-Objekte | 49
'POST-Anforderung senden
HTTPResponse = HTTPobj.SendRequest ()
echo "Ergebnis: " + cstr(HTTPResponse)
End Function
4.5.4 SendRequest
SendRequest dient zum Senden von initiierten HTTP-Anforderungen. Wenn als Letztes zum Beispiel
die GetURL-Methode verwendet wurde, wird eine GET-Anforderung gesendet.
Syntax
SendRequest()
Rückgabewert
HTTP-Antwortcode.
Beispiel
Dieses Skript setzt eine GET-Anforderung ab und gibt den Rückgabecode aus:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
'Um durch den Proxy mit automatischer Authentifizierung zu gelangen,
'muss die Authentifizierung auf den Wert 1 festgelegt werden.
HTTPobj.Authentication = 1
'GET-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest()
echo "Ergebnis: " + cstr(HTTPResponse)
End Function
4.5.5 AddHeader
AddHeader ändert eine initiierte Anforderung, um einen Header hinzuzufügen oder einen
vorhandenen Header zu ändern oder zu löschen.
Syntax
AddHeader (STRING name, STRING value)
Bedeutung der Parameter:
Name ist eine Zeichenfolge (Beispiel: Content-Type). Wenn der Name bereits vorhanden ist,
wird der Wert dieses Namens mit dem angegebenen Wert überschrieben.
Value ist eine Zeichenfolge (Beispiel: text/html). Wenn der Wert leer ist, wird der Header
gelöscht, falls er vorhanden ist.
GFI LanGuard
4 Scripting-Objekte | 50
Rückgabewert
Keine Rückgabedaten.
Beispiel
Dieses Skript verändert einige Header und versucht einen Cross Site Scripting-Angriff auf
Protokolldateiparser:
Function Main
Dim HTTPObj as Object
Dim headers As Variant
ip = "www.gfi.com"
port = 80
cr = Chr(13) + Chr(10)
XSSTest = "<script>alert('Die neuen Funktionen von GFI LanGuard
umfassen die Erkennung von Cross Site Scripting')</script>"
Set HTTPobj = HTTP.Connect (ip,port)
'Mögliche Header
headers = Array ( "Host", "User-Agent", "Accept", "X-Header1" ,
"X-Proxy", "Cookie" )
HTTPobj.GetURL("/")
HTTPobj.Authentication = 1
'Eine Schleife für jeden Header, über den eine
'XSS-Signatur injiziert werden kann. 'Jedes Mal eine Anforderung
abschicken
For a = LBound(headers) To UBound(headers)
HTTPobj.ClearRequestHeaders
HTTPobj.AddHeader headers(a), XSSTest
'GET-Anforderung mit benutzerdefiniertem Header absenden
HTTPResponse = HTTPobj.SendRequest ()
echo CStr(a) + "Ergebnis: " + CStr(HTTPResponse)+cr
Next
End Function
4.5.6 ClearRequestHeaders
Löscht alle Header, die zuvor mit der AddHeader-Methode festgelegt wurden.
Syntax
ClearRequestHeaders
Rückgabewert
Keine Rückgabedaten.
GFI LanGuard
4 Scripting-Objekte | 51
Beispiel
Dieses Skript verändert einige Header und versucht einen Cross Site Scripting-Angriff auf
Protokolldateiparser:
Function Main
Dim HTTPObj as Object
Dim headers As Variant
ip = "www.gfi.com"
port = 80
cr = Chr(13) + Chr(10)
XSSTest = "<script>alert('Die neuen Funktionen von GFI LanGuard
umfassen die Erkennung von Cross Site Scripting')</script>"
Set HTTPobj = HTTP.Connect (ip,port)
'Mögliche Header
headers = Array ( "Host", "User-Agent", "Accept", "X-Header1" ,
"X-Proxy", "Cookie" )
HTTPobj.GetURL("/")
HTTPobj.Authentication = 1
'Eine Schleife für jeden Header, über den eine
'XSS-Signatur injiziert werden kann. 'Jedes Mal eine Anforderung
abschicken
For a = LBound(headers) To UBound(headers)
HTTPobj.ClearRequestHeaders
HTTPobj.AddHeader headers(a), XSSTest
'GET-Anforderung mit benutzerdefiniertem Header absenden
HTTPResponse = HTTPobj.SendRequest ()
echo CStr(a) + "Ergebnis: " + CStr(HTTPResponse)+cr
Next
End Function
4.5.7 Verb
Legt die HTTP-Anforderungsmethode fest. Diese Eigenschaft wird implizit festgelegt, wenn die
Methode GetURL oder PostURL verwendet wird.
Syntax
HTTPObject.Verb
Bedeutung der Parameter:
Verb ist eine Zeichenfolge (Beispiel: Get)
Beispiel
Dieses Skript übermittelt eine HTTP-OPTIONS-Anforderung:
Function Main
GFI LanGuard
4 Scripting-Objekte | 52
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.Authentication = 1
HTTPobj.Verb = "OPTIONS"
'OPTIONS-Anforderung mit benutzerdefiniertem Header absenden
HTTPResponse = HTTPobj.SendRequest ()
echo HTTPobj.RawResponseHeaders
End Function
4.5.8 HTTPVersion
Legt die HTTP-Version fest. Wenn kein Wert festgelegt wird, wird für HTTPVersion der Wert
„HTTP/1.1“ verwendet.
Syntax
HTTPObject.HTTPVersion
Bedeutung der Parameter:
HTTPVersion ist eine Zeichenfolge (Beispiel: HTTP/1.1)
Beispiel
Dieses Skript übermittelt eine HTTP/1.0-Anforderung:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.Authentication = 1
HTTPobj.HTTPVersion = "HTTP/1.0"
'GET-Anforderung mit benutzerdefiniertem Header absenden
HTTPResponse = HTTPobj.SendRequest ()
echo HTTPobj.RawResponseHeaders
End Function
4.5.9 IP
Dient zum Festlegen oder Abrufen der IP-Adresse oder des Hostnamens.
GFI LanGuard
4 Scripting-Objekte | 53
Syntax
HTTPObject.IP
Bedeutung der Parameter:
IP ist eine Zeichenfolge (read/write).
Beispiel
Dieses Skript verwendet dasselbe Objekt erneut, um eine Verbindung zu einem anderen Host
herzustellen und dieselbe Anforderung zu übermitteln:
Function Main
Dim HTTPObj as Object
ip1 = "www.gfi.com"
ip2 = "127.0.0.1"
port = 80
cr = Chr(13) + Chr(10)
Set HTTPobj = HTTP.Connect (ip1,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
'Um durch den Proxy mit automatischer Authentifizierung zu gelangen,
'muss die Authentifizierung auf den Wert 1 festgelegt werden.
HTTPobj.Authentication = 1
'GET-Anforderung absenden
HTTPResponse1 = HTTPobj.SendRequest ()
HTTPobj.IP = ip2
HTTPResponse2 = HTTPobj.SendRequest ()
echo "Ergebnis: " + CStr(HTTPResponse1)+cr
echo "Ergebnis: " + CStr(HTTPResponse2)+cr
End Function
4.5.10 Port
Dient zum Festlegen oder Abrufen des Ports des HTTP-Servers, mit dem eine Verbindung hergestellt
werden soll.
Syntax
HTTPObject.Port
Bedeutung der Parameter:
Port ist eine Zeichenfolge (read/write).
Beispiel
Dieses Skript verwendet dasselbe Objekt erneut, um eine Verbindung zu einem anderen Port
herzustellen und dieselbe Anforderung zu übermitteln:
Function Main
GFI LanGuard
4 Scripting-Objekte | 54
Dim HTTPObj as Object
ip = "127.0.0.1"
port1 = 80
port2 = 81
cr = Chr(13) + Chr(10)
Set HTTPobj = HTTP.Connect (ip,port1)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
'Um durch den Proxy mit automatischer Authentifizierung zu gelangen,
'muss die Authentifizierung auf den Wert 1 festgelegt werden.
HTTPobj.Authentication = 1
'GET-Anforderung absenden
HTTPResponse1 = HTTPobj.SendRequest ()
HTTPobj.PORT = port2
HTTPResponse2 = HTTPobj.SendRequest ()
echo "Ergebnis: " + cstr(HTTPResponse1)+cr
echo "Ergebnis: " + cstr(HTTPResponse2)+cr
End Function
4.5.11 RawResponseHeaders
Enthält alle Header der HTTP-Antwort. Alle Header sind durch das Zeichenpaar CR/LF voneinander
getrennt.
Syntax
HTTPObject.RawResponseHeaders
Bedeutung der Parameter:
RawResponseHeaders ist eine Zeichenfolge (read)
Beispiel
Dieses Skript übermittelt eine HTTP-OPTIONS-Anforderung:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.Authentication = 1
HTTPobj.Verb = "OPTIONS"
'OPTIONS-Anforderung mit benutzerdefiniertem Header absenden
HTTPResponse = HTTPobj.SendRequest ()
GFI LanGuard
4 Scripting-Objekte | 55
echo HTTPobj.RawResponseHeaders
End Function
4.5.12 Body
Enthält den Textkörper der Antwort.
Syntax
HTTPObject.Body
Body ist eine Zeichenfolge (read).
Beispiel
Dieses Skript setzt eine GET-Anforderung ab und gibt den Textkörper aus:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
'Um durch den Proxy mit automatischer Authentifizierung zu gelangen,
'muss die Authentifizierung auf den Wert 1 festgelegt werden.
HTTPobj.Authentication = 1
'GET-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
echo HTTPobj.Body
End Function
Authentication
Aktiviert oder deaktiviert HTTP- und Proxy-Authentifizierung. Authentication wird implizit auf TRUE
gesetzt, wenn für ProxyUser, ProxyPassword, HttpUser und HttpPassword ein Wert festgelegt wird.
Syntax
HTTPObject.Authentication
Bedeutung der Parameter:
Authentication ist vom Typ Boolsch (read/write)
Beispiel
Dieses Skript setzt eine GET-Anforderung ab und gibt den Rückgabecode aus:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
GFI LanGuard
4 Scripting-Objekte | 56
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
'Um durch den Proxy mit automatischer Authentifizierung zu gelangen,
'muss die Authentifizierung auf den Wert 1 festgelegt werden.
HTTPobj.Authentication = 1
'GET-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
echo HTTPResponse
End Function
4.5.13 ProxyUser
Benutzername für die Proxy-Authentifizierung.
Syntax
HTTPObject.ProxyUser
Bedeutung der Parameter:
ProxyUser ist eine Zeichenfolge (read/write).
Beispiel
Dieses Skript setzt eine GET-Anforderung ab und gibt den Rückgabecode aus. Benutzername und
Kennwort werden als LanGuard_test festgelegt:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.ProxyUser = "LanGuard_test"
HTTPobj.Proxypassword = "LanGuard_test"
'GET-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
echo HTTPobj.Body
End Function
4.5.14 ProxyPassword
Kennwort für die Proxy-Authentifizierung.
GFI LanGuard
4 Scripting-Objekte | 57
Syntax
HTTPObject.ProxyPassword
Bedeutung der Parameter:
ProxyPassword ist eine Zeichenfolge (read/write).
Beispiel
Dieses Skript setzt eine GET-Anforderung ab und gibt den Rückgabecode aus. Benutzername und
Kennwort werden als LanGuard_test festgelegt:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.ProxyUser = "LanGuard_test"
HTTPobj.Proxypassword = "LanGuard_test"
'GET-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
echo HTTPobj.Body
End Function
4.5.15 HttpUser
Benutzername für die HTTP-Authentifizierung.
Syntax
HTTPObject.HttpUser
Bedeutung der Parameter:
HttpUser ist eine Zeichenfolge (read/write).
Beispiel
Dieses Skript setzt eine GET-Anforderung ab und gibt den Rückgabecode aus. Benutzername und
Kennwort werden als LanGuard_test festgelegt:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.HTTPUser = "LanGuard_test"
GFI LanGuard
4 Scripting-Objekte | 58
HTTPobj.HTTPpassword = "LanGuard_test"
'GET-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
echo HTTPobj.Body
End Function
4.5.16 HttpPassword
Kennwort für die HTTP-Authentifizierung.
Syntax
HTTPObject.HttpPassword
Bedeutung der Parameter:
HttpPassword ist eine Zeichenfolge (read/write).
Beispiel
Dieses Skript setzt eine GET-Anforderung ab und gibt den Rückgabecode aus. Benutzername und
Kennwort werden als LanGuard_test festgelegt:
Function Main
Dim HTTPObj as Object
ip = "www.gfi.com"
port = 80
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.HTTPUser = "LanGuard_test"
HTTPobj.HTTPpassword = "LanGuard_test"
'GET-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
echo HTTPobj.Body
End Function
4.5.17 ResponseHeaders
Header-Objekt, das den Zugriff auf die einzelnen Antwortheader ermöglicht.
Syntax
HTTPObject.ReponseHeaders
Bedeutung der Parameter:
ResponseHeaders ist ein Objekt (read).
Beispiel
Dieses Skript gibt den Namen des HTTP-Servers aus:
Function Main
Dim HTTPObj as Object
GFI LanGuard
4 Scripting-Objekte | 59
Dim headers as Object
ip = "www.apache.org"
port = 80
cr = Chr(13) + Chr(10)
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.verb = "HEAD"
'Um durch den Proxy mit automatischer Authentifizierung zu gelangen,
'muss die Authentifizierung auf den Wert 1 festgelegt werden.
HTTPobj.Authentication = 1
'HEAD-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
'Neues Objekt mit der Bezeichnung headers erstellen
Set headers = HTTPobj.ResponseHeaders
'HTTPResponse enthält den Rückgabewert
echo "Ergebnis: " + cstr(HTTPResponse) + cr
'Das HTTP-Ergebnis sieht in etwa folgendermaßen aus:
'HTTP/1.1 200 OK
'Server: Microsoft-IIS/5.0
'Datum: Tue, 28 Oct 2003 10:23:19 GMT
‚Länge des Inhalts: 1270
'Inhaltstyp: text/html
echo "Server unter " + ip + " ist " + headers.HeaderValue
("server") + cr
End Function
4.6 HTTPHeaders-Objekte
Dieser Abschnitt enthält Informationen zu den folgenden HTTPHeaders-Objekten:
HeaderValue
HeaderName
Count
4.6.1 HeaderValue
HeaderValue ruft den Wert des Headers aus dem HTTPHeaders-Objekt ab.
Syntax
HeaderValue (VARIANT index)
Bedeutung der Parameter:
GFI LanGuard
4 Scripting-Objekte | 60
Index ist eine Zeichenfolge oder ein langer Wert.
Eine Zeichenfolge wird verwendet, wenn Sie den Wert eines gegebenen Headernamens abrufen
möchten (Beispiel: Server). Sie können auch den HeaderValue eines gegebenen Index abrufen.
Der gültige Bereich dieses Index liegt zwischen 0 und der Anzahl der Header.
Rückgabewert
Eine Zeichenfolge, die den Wert des Headers enthält.
Beispiel
Dieses Skript gibt den Namen des HTTP-Servers aus:
Function Main
Dim HTTPObj as Object
Dim headers as Object
ip = "www.gfi.org"
port = 80
cr = Chr(13) + Chr(10)
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.verb = "HEAD"
'HEAD-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
'Neues Objekt mit der Bezeichnung headers erstellen
Set headers = HTTPobj.ResponseHeaders
'HTTPResponse enthält den Rückgabewert
echo "Ergebnis: " + cstr(HTTPResponse) + cr
echo "Server unter " + ip + " ist " + headers.HeaderValue
("server") + cr
End Function
4.6.2 HeaderName
HeaderName ruft den Namen des Headers aus dem HTTPHeader-Objekt ab.
Syntax
HeaderName (LONG index)
Der gültige Bereich des Index liegt zwischen 0 und der Anzahl der Header.
Rückgabewert
Eine Zeichenfolge, die den Namen des Headers enthält.
Beispiel
Dieses Skript gibt die Header aus:
Function Main
GFI LanGuard
4 Scripting-Objekte | 61
Dim HTTPObj as Object
Dim headers as Object
ip = "www.gfi.com"
port = 80
cr = Chr(13) + Chr(10)
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
HTTPobj.GetURL("/")
HTTPobj.verb = "HEAD"
'HEAD-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
'Neues Objekt mit der Bezeichnung headers erstellen
Set headers = HTTPobj.ResponseHeaders
'headers.count enthält die Anzahl der Header (long)
echo "Anzahl der Header: " & CStr(headers.Count) & cr
upbound = headers.Count - 1
'Für jeden Header HeaderName und HeaderValue ausgeben
For hn=0 To upbound
echo headers.HeaderName(hn) & vbTab & "-->" & vbtab &
headers.HeaderValue(hn) & cr
Next
End Function
4.6.3 Count
Gibt die Anzahl der Headereinträge im HTTPHeaders-Objekt zurück.
Syntax
HTTPHeadersObject.Count
Bedeutung der Parameter:
Count ist vom Typ Long (read)
Beispiel
Dieses Skript gibt die Header aus:
Function Main
Dim HTTPObj as Object
Dim headers as Object
ip = "www.gfi.com"
port = 80
cr = Chr(13) + Chr(10)
Set HTTPobj = HTTP.Connect (ip,port)
'Anforderungstyp festlegen
GFI LanGuard
4 Scripting-Objekte | 62
HTTPobj.GetURL("/")
HTTPobj.verb = "HEAD"
'HEAD-Anforderung absenden
HTTPResponse = HTTPobj.SendRequest ()
'Neues Objekt mit der Bezeichnung headers erstellen
Set headers = HTTPobj.ResponseHeaders
'headers.count enthält die Anzahl der Header (long)
echo "Anzahl der Header: " & CStr(headers.Count) & cr
upbound = headers.Count - 1
'Für jeden Header HeaderName und HeaderValue ausgeben
For hn=0 To upbound
echo headers.HeaderName(hn) & vbTab & "-->" & vbtab &
headers.HeaderValue(hn) & cr
Next
End Function
4.7 FTP-Objekte
Das FTPObjekt ist eine Sammlung von Funktionen, die den Upload bzw. Download mit FTP sehr
einfach gestalten. Das Objekt bietet die Funktionalität, Verbindungen mit entfernten FTP-Servern
herzustellen und Dateien hoch- und herunterzuladen, umzubenennen oder zu löschen. Außerdem
können Sie damit alle Dateien auf einem entfernten Server auflisten. Darüber hinaus bietet das
Objekt die Möglichkeit, Informationen über die Dateien auf dem Server (Attribute/Größe) abzurufen.
Ferner können Sie mit dem FTP-Objekt Verzeichnisse auf dem entfernten Server erstellen/löschen
sowie das Verzeichnis wechseln.
Dieser Abschnitt enthält Informationen zu den folgenden FTP-Objekten:
Connect
GetCurrentDirectory
SetCurrentDirectory
CreateDirectory
RemoveDirectory
DeletFile
GetFile
PutFile
RenameFile
FindFirstFile
FindNextFile
FindFileClose
GetFindFileName
GFI LanGuard
4 Scripting-Objekte | 63
GetFindFileSize
GetFindFileAttributes
LastError
4.7.1 Connect
Mit Connect können Sie den Hostnamen bzw. die IP-Adresse sowie den Port eines FTP-Servers
ermitteln.
Syntax
FTPObject connect (STRING hostname, LONG port, BOOL PassiveMode STRING
user, STRING password)
Bedeutung der Parameter:
Hostname – kann die IP-Adresse oder den Hostnamen enthalten (Beispiel: www.gfi.com)
Port – eine ganze Zahl zwischen 1 und 65535
PassiveMode – TRUE oder FALSE Bei False wird der aktive Modus gewählt.
Benutzer – FTP-Benutzername Für eine anonyme Anmeldung geben Sie anonymous als Benutzernamen an.
Kennwort – FTP-Kennwort Bei der anonymen Anmeldung verwenden Sie eine E-Mail-Adresse (beispielsweise [email protected]) als Kennwort.
Rückgabewert
FTP-Objekt
Beispiel
Beispiel, in dem das aktuelle FTP-Arbeitsverzeichnis ausgegeben wird:
Function Main
Dim FTPobj as Object
ip = "127.0.0.1"
port = 21
mode = FALSE
username = "anonymous"
password = "[email protected]"
Set FTPobj=FTP.Connect (ip,21,mode,username,password)
cdir = FTPobj.GetCurrentDirectory
echo cdir
End Function
4.7.2 GetCurrentDirectory
GetCurrentDirectory ruft das aktuelle Verzeichnis auf dem FTP-Server ab. Sämtliche Dateifunktionen
(z. B. Hoch- und Herunterladen) arbeiten relativ zu diesem Verzeichnis.
Syntax
STRING GetCurrentDirectory()
GFI LanGuard
4 Scripting-Objekte | 64
Rückgabewert
Das aktuelle Arbeitsverzeichnis auf dem FTP-Server als Zeichenfolge.
Beispiel
Beispiel, in dem das aktuelle FTP-Arbeitsverzeichnis ausgegeben wird:
Function Main
Dim FTPobj as Object
ip = "127.0.0.1"
port = 21
mode = FALSE
username = "anonymous"
password = "[email protected]"
Set FTPobj=FTP.Connect (ip,21,mode,username,password)
cdir = FTPobj.GetCurrentDirectory
echo cdir
End Function
4.7.3 SetCurrentDirectory
SetCurrentDirectory legt das Arbeitsverzeichnis auf dem entfernten FTP-Server fest. Sämtliche
Dateifunktionen (z. B. Hoch- und Herunterladen) arbeiten relativ zu diesem Verzeichnis.
Syntax
SetCurrentDirectory(STRING directory)
Bedeutung der Parameter:
Directory ist eine Zeichenfolge.
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgeliefert wird, wurde die Funktion erfolgreich ausgeführt.
Ansonsten wurde ein Fehler zurückgegeben. Falls FALSEzurückgegeben wird, liefert
FTPObject.LastError den WIN32-Fehlercode.
Beispiel
Beispiel, in dem das aktuelle Arbeitsverzeichnis festgelegt wird:
Function Main
Dim FTPobj as Object
'nach Bedarf konfigurieren
ip = "127.0.0.1"
port = 21
mode = FALSE
username = "anonymous"
password = "[email protected]"
directory = "/pub/"
GFI LanGuard
4 Scripting-Objekte | 65
'neue FTP-Verbindung erstellen
Set FTPobj=FTP.Connect (ip,21,mode,username,password)
'/pub/ als aktuelles Arbeitsverzeichnis festlegen
RET = FTPobj.SetCurrentDirectory (directory)
if RET Then
echo "Aktuelles Verzeichnis erfolgreich auf " + directory + "
festgelegt"
else
echo "Aktuelles Verzeichnis konnte nicht festgelegt werden: " +
CStr(FTPobj.LastError)
End If
End Function
4.7.4 CreateDirectory
CreateDirectory erstellt ein neues Verzeichnis auf dem entfernten FTP-Server.
Syntax
CreateDirectory(STRING directory)
Bedeutung der Parameter:
Directory ist eine Zeichenfolge.
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgeliefert wird, wurde die Funktion erfolgreich ausgeführt.
Ansonsten wurde ein Fehler zurückgegeben. Falls FALSEzurückgegeben wird, liefert
FTPObject.LastError den WIN32-Fehlercode.
Beispiel
Beispiel, in dem das aktuelle FTP-Arbeitsverzeichnis ausgegeben wird:
Function Random(N)
Random = Int(N*Rnd)
End Function
Function Main
Dim FTPobj as Object
'nach Bedarf konfigurieren
ip = "127.0.0.1"
port = 21
mode = FALSE
username = "anonymous"
password = "[email protected]"
cr = Chr(13) + Chr(10)
'Zufallsgenerator initialisieren
Randomize
GFI LanGuard
4 Scripting-Objekte | 66
'jetzt Zufallszahl zum Anhängen an die Dateinamen generieren
for K = 1 to 10
randomnumber = randomnumber + cstr(Random(10))
next
tempDir = "lnssVerz" & randomnumber
'neue FTP-Verbindung erstellen
Set FTPobj=FTP.Connect (ip,21,mode,username,password)
'nach Herstellen der anonymen FTP-Verbindung versuchen, ein neues
Verzeichnis zu erstellen
if FTPobj.CreateDirectory ( tempDir ) = TRUE then
echo "Berechtigung zum Erstellen von Verzeichnissen verfügbar auf
anonymem FTP unter " + ip & cr
'jetzt versuchen, das Verzeichnis zu löschen
if FTPobj.RemoveDirectory ( tempDir ) = TRUE then
echo "Berechtigung zum Löschen von Verzeichnissen verfügbar auf
anonymem FTP unter " + ip & cr
else
echo "Berechtigung zum Löschen von Verzeichnissen nicht verfügbar.
Möglicherweise müssen Sie die von GFI LanGuard erstellten
Verzeichnisse löschen" & cr
End If
End If
End Function
4.7.5 RemoveDirectory
RemoveDirectory löscht ein Verzeichnis auf dem entfernten FTP-Server.
Syntax
RemoveDirectory(STRING directory)
Bedeutung der Parameter:
Directory ist eine Zeichenfolge.
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgeliefert wird, wurde die Funktion erfolgreich ausgeführt.
Ansonsten wurde ein Fehler zurückgegeben. Falls FALSEzurückgegeben wird, liefert
FTPObject.LastError den WIN32-Fehlercode.
Beispiel
Beispiel, in dem das aktuelle FTP-Arbeitsverzeichnis ausgegeben wird:
Function Random(N)
Random = Int(N*Rnd)
End Function
Function Main
GFI LanGuard
4 Scripting-Objekte | 67
Dim FTPobj as Object
'nach Bedarf konfigurieren
ip = "127.0.0.1"
port = 21
mode = FALSE
username = "anonymous"
password = "[email protected]"
cr = Chr(13) + Chr(10)
'Zufallsgenerator initialisieren
Randomize
'jetzt Zufallszahl zum Anhängen an die Dateinamen generieren
for K = 1 to 10
randomnumber = randomnumber + cstr(Random(10))
next
tempDir = "lnssVerz" & randomnumber
'neue FTP-Verbindung erstellen
Set FTPobj=FTP.Connect (ip,21,mode,username,password)
'nach Herstellen der anonymen FTP-Verbindung versuchen, ein neues
Verzeichnis zu erstellen
if FTPobj.CreateDirectory ( tempDir ) = TRUE then
echo "Berechtigung zum Erstellen von Verzeichnissen verfügbar auf
anonymem FTP unter " + ip & cr
'jetzt versuchen, das Verzeichnis zu löschen
if FTPobj.RemoveDirectory ( tempDir ) = TRUE then
echo "Berechtigung zum Löschen von Verzeichnissen verfügbar auf
anonymem FTP unter " + ip & cr
else
echo "Berechtigung zum Löschen von Verzeichnissen nicht verfügbar.
Möglicherweise müssen Sie die von GFI LanGuard erstellten
Verzeichnisse löschen" & cr
End If
End If
End Function
4.7.6 DeleteFiles
Dateien auf dem entfernten FTP-Server löschen
Syntax
DeleteFile(STRING file)
Bedeutung der Parameter:
File ist eine Zeichenfolge (Beispiel: readme.txt)
GFI LanGuard
4 Scripting-Objekte | 68
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgeliefert wird, wurde die Funktion erfolgreich ausgeführt.
Ansonsten wurde ein Fehler zurückgegeben. Falls FALSEzurückgegeben wird, liefert
FTPObject.LastError den WIN32-Fehlercode.
Beispiel
Beispiel, in dem eine Datei hochgeladen und auf einem entfernten FTP-Server gelöscht wird:
Function Random(N)
Random = Int(N*Rnd)
End Function
Function Main
Dim FTPobj As Object
Dim fl As Object
'nach Bedarf konfigurieren
ip = "127.0.0.1"
port = 21
mode = FALSE
username = "anonymous"
password = "[email protected]"
cr = Chr(13) + Chr(10)
Set fl = file.Connect("127.0.0.1")
fl.Open "testdatei.txt", GENERIC_WRITE, CREATE_ALWAYS
fl.writeline("Dies ist eine Testdatei")
'Zufallsgenerator initialisieren
Randomize
fl.Close
'jetzt Zufallszahl zum Anhängen an die Dateinamen generieren
For K = 1 To 10
randomnumber = randomnumber & CStr(Random(10))
Next
tempFile = "lnssDatei" + randomnumber
'neue FTP-Verbindung erstellen
Set FTPobj=FTP.Connect (ip,21,mode,username,password)
If FTPobj.PutFile ( "testdatei.txt", tempFile ) = TRUE Then
echo "Berechtigung zum Schreiben von Dateien verfügbar auf
anonymem FTP unter " + ip & cr
If FTPobj.DeleteFile ( tempFile ) = TRUE Then
echo "Berechtigung zum Löschen von Dateien verfügbar auf anonymem
FTP unter " + ip & cr
Else
GFI LanGuard
4 Scripting-Objekte | 69
echo "Berechtigung zum Löschen von Dateien nicht verfügbar.
Möglicherweise müssen Sie die von GFI LanGuard erstellten Dateien
löschen" & cr
End If
End If
fl.Delete("testdatei.txt")
End Function
4.7.7 GetFile
GetFile lädt eine Datei vom entfernten Computer herunter. Anschließend wird die Datei lokal
gespeichert.
Syntax
GetFile(STRING remotefile, String localfile)
Bedeutung der Parameter:
RemoteFile ist eine Zeichenfolge (Beispiel: readme.txt)
LocalFile ist eine Zeichenfolge (Beispiel: readmecopy.txt)
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgeliefert wird, wurde die Funktion erfolgreich ausgeführt.
Ansonsten wurde ein Fehler zurückgegeben. Falls FALSEzurückgegeben wird, liefert
FTPObject.LastError den WIN32-Fehlercode.
Beispiel
Beispiel für die GetFile-Funktion in Verbindung mit dem FTP-Objekt. In diesem Beispiel werden alle
Dateien heruntergeladen, die sich im Wurzelverzeichnis des FTP-Servers befinden:
Function Main
Dim FTPobj as Object
Const DIRECTORYMASK=&H10
ip = "127.0.0.1"
port = 21
cr = Chr(13) + Chr(10)
Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]")
Found=FTPobj.FindFirstFile("*")
While Found
If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) =
DIRECTORYMASK Then
FileType="Verzeichnis"
Else
FileType="Datei"
ret = FTPobj.GetFile (FTPobj.GetFindFileName,
FTPobj.GetFindFileName)
End If
GFI LanGuard
4 Scripting-Objekte | 70
echo "Datei: " + FTPobj.GetFindFileName + " Größe: " + CStr
(FTPobj.GetFindFileSize) + " Byte Typ: " + FileType & cr
Found=FTPobj.FindNextFile
Wend
End Function
4.7.8 PutFile
PutFile lädt eine Datei von einem lokalen Datenträger auf den entfernten FTP-Server hoch.
4.7.9 Syntax
PutFile(STRING localfile, STRING remotefile)
Bedeutung der Parameter:
Localfile ist eine Zeichenfolge (Beispiel: readme.txt)
Remotefile ist eine Zeichenfolge (Beispiel: readme.txt)
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgeliefert wird, wurde die Funktion erfolgreich ausgeführt.
Ansonsten wurde ein Fehler zurückgegeben. Falls FALSEzurückgegeben wird, liefert
FTPObject.LastError den WIN32-Fehlercode.
Beispiel
Beispiel, in dem eine Datei hochgeladen und auf einem entfernten FTP-Server gelöscht wird:
Function Random(N)
Random = Int(N*Rnd)
End Function
Function Main
Dim FTPobj As Object
Dim fl As Object
'nach Bedarf konfigurieren
ip = "127.0.0.1"
port = 21
mode = FALSE
username = "anonymous"
password = "[email protected]"
cr = Chr(13) + Chr(10)
Set fl = file.Connect("127.0.0.1")
fl.Open "testdatei.txt", GENERIC_WRITE, CREATE_ALWAYS
fl.writeline("Dies ist eine Testdatei")
'Zufallsgenerator initialisieren
Randomize
fl.Close
'jetzt Zufallszahl zum Anhängen an die Dateinamen generieren
GFI LanGuard
4 Scripting-Objekte | 71
For K = 1 To 10
randomnumber = randomnumber & CStr(Random(10))
Next
tempFile = "lnssDatei" + randomnumber
'neue FTP-Verbindung erstellen
Set FTPobj=FTP.Connect (ip,21,mode,username,password)
If FTPobj.PutFile ( "testdatei.txt", tempFile ) = TRUE Then
echo "Berechtigung zum Schreiben von Dateien verfügbar auf
anonymem FTP unter " + ip & cr
If FTPobj.DeleteFile ( tempFile ) = TRUE Then
echo "Berechtigung zum Löschen von Dateien verfügbar auf anonymem
FTP unter " + ip & cr
Else
echo "Berechtigung zum Löschen von Dateien nicht verfügbar.
Möglicherweise müssen Sie die von GFI LanGuard erstellten Dateien
löschen" & cr
End If
End If
fl.Delete("testdatei.txt")
End Function
4.7.10 RenameFile
RenameFile benennt Dateien auf dem entfernten FTP-Server um.
Syntax
RenameFile(STRING originalFileName, STRING renamedFileName)
Bedeutung der Parameter:
originalFileName ist eine Zeichenfolge.
renamedFileName ist eine Zeichenfolge.
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgeliefert wird, wurde die Funktion erfolgreich ausgeführt.
Ansonsten wurde ein Fehler zurückgegeben. Falls FALSEzurückgegeben wird, liefert
FTPObject.LastError den WIN32-Fehlercode.
Beispiel
Beispiel für die RenameFile-Funktion in Verbindung mit dem FTP-Objekt. In diesem Beispiel werden
alle Dateien umbenannt, die sich im Wurzelverzeichnis des FTP-Servers befinden:
Function Main
Dim FTPobj as Object
Const DIRECTORYMASK=&H10
ip = "127.0.0.1"
port = 21
GFI LanGuard
4 Scripting-Objekte | 72
cr = Chr(13) + Chr(10)
Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]")
Found=FTPobj.FindFirstFile("*")
While Found
If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) =
DIRECTORYMASK Then
FileType="Verzeichnis"
Else
FileType="Datei"
FileName = FTPobj.GetFindFileName
RenameFileName = "umbenannt_" + FTPobj.GetFindFileName
ret = FTPobj.RenameFile (FileName, RenameFileName)
End If
echo "Datei: " + FTPobj.GetFindFileName + " Größe: " + CStr
(FTPobj.GetFindFileSize) + " Byte Typ: " + FileType & cr
Found=FTPobj.FindNextFile
Wend
End Function
4.7.11 FindFirstFile
FindFirstFile initiiert eine Auflistung von Dateien und Verzeichnissen im aktuellen Verzeichnis auf dem
entfernten FTP-Server.
Syntax
FindFirstFile(STRING filemask)
Bedeutung der Parameter:
Filemask ist eine Zeichenfolge. Mit “*” können Sie alle Dateien aufzählen.
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgegeben wird, bedeutet dies, dass mindestens eine Datei auf
dem entfernten FTP-Server der Dateimaske entspricht.
Mit den Methoden GetFindFileName() und GetFindFileSize() können Sie den Dateinamen und die Dateigröße der ersten gefundenen Datei abrufen.
Mit der Methode FindNextFile() können Sie zur nächsten entsprechenden Datei wechseln.
FindFirstFile liefert FALSE , falls keine entsprechenden Dateien gefunden wurden.
FindFirstFile liefert außerdem FALSE bei nachfolgenden Aufrufen von FindFirstFile(),
wenn der aktuelle Suchvorgang nicht mit der Methode FindFileClose() abgeschlossen wurde.
Falls FALSEzurückgegeben wird, liefert FTPObject.LastError den WIN32-Fehlercode.
Beispiel
Beispiel für die RenameFile-Funktion in Verbindung mit dem FTP-Objekt. In diesem Beispiel werden
alle Dateien umbenannt, die sich im Wurzelverzeichnis des FTP-Servers befinden:
GFI LanGuard
4 Scripting-Objekte | 73
Function Main
Dim FTPobj as Object
Const DIRECTORYMASK=&H10
ip = "127.0.0.1"
port = 21
cr = Chr(13) + Chr(10)
Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]")
Found=FTPobj.FindFirstFile("*")
While Found
If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) =
DIRECTORYMASK Then
FileType="Verzeichnis"
Else
FileType="Datei"
FileName = FTPobj.GetFindFileName
RenameFileName = "umbenannt_" + FTPobj.GetFindFileName
ret = FTPobj.RenameFile (FileName, RenameFileName)
End If
echo "Datei: " + FTPobj.GetFindFileName + " Größe: " + CStr
(FTPobj.GetFindFileSize) + " Byte Typ: " + FileType & cr
Found=FTPobj.FindNextFile
Wend
End Function
4.7.12 FindNextFile
Sucht nach der nächsten Datei, die der mit der Methode FindFirstFile angegebenen Dateimaske
entspricht.
Syntax
FindNextFile
Rückgabewert
Boolescher Wert. Wenn TRUE zurückgegeben wird, bedeutet dies, dass weitere Dateien gefunden
wurden, die der mit der Methode FindFirstFile angegebenen Dateimaske entsprechen.
Mit den Methoden GetFindFileName() und GetFindFileSize() können Sie den Dateinamen und die Dateigröße der ersten gefundenen Datei abrufen.
FindFirstFile liefert FALSE, falls keine entsprechenden Dateien gefunden wurden.
FindNextFile muss zwischen einem erfolgreichen Aufruf von FindFirstFile() und FindFileClose() aufgerufen werden.
Die Methode liefert FALSE, falls sie außerhalb dieses Gültigkeitsbereichs aufgerufen wird.
Falls FALSEzurückgegeben wird, liefert FTPObject.LastError den WIN32-Fehlercode.
GFI LanGuard
4 Scripting-Objekte | 74
Beispiel
Beispiel für die RenameFile-Funktion in Verbindung mit dem FTP-Objekt. In diesem Beispiel werden
alle Dateien umbenannt, die sich im Wurzelverzeichnis des FTP-Servers befinden:
Function Main
Dim FTPobj as Object
Const DIRECTORYMASK=&H10
ip = "127.0.0.1"
port = 21
cr = Chr(13) + Chr(10)
Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]")
Found=FTPobj.FindFirstFile("*")
While Found
If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) =
DIRECTORYMASK Then
FileType="Verzeichnis"
Else
FileType="Datei"
FileName = FTPobj.GetFindFileName
RenameFileName = "umbenannt_" + FTPobj.GetFindFileName
ret = FTPobj.RenameFile (FileName, RenameFileName)
End If
echo "Datei: " + FTPobj.GetFindFileName + " Größe: " + CStr
(FTPobj.GetFindFileSize) + " Byte Typ: " + FileType & cr
Found=FTPobj.FindNextFile
Wend
End Function
FindFileClose
Sucht nach der nächsten Datei, die der mit der Methode FindFirstFile angegebenen Dateimaske
entspricht. Sie müssen diese Methode nicht aufrufen, falls der Aufruf von FindFirstFile()
fehlgeschlagen ist.
Syntax
FindFileClose
Rückgabewert
Keine Rückgabedaten.
Beispiel
Beispiel für die FindFileClose-Funktion in Verbindung mit dem FTP-Objekt. Sucht nach einer
bestimmten Datei, bis diese im Wurzelverzeichnis gefunden wurde:
Function Main
GFI LanGuard
4 Scripting-Objekte | 75
Dim FTPobj as Object
Const DIRECTORYMASK=&H10
ip = "127.0.0.1"
port = 21
cr = Chr(13) + Chr(10)
Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]")
Found=FTPobj.FindFirstFile("*")
While Found
If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) =
DIRECTORYMASK Then
FileType="Verzeichnis"
Found=FTPobj.FindNextFile
Else
FileType="Datei"
if FTPobj.GetFindFileName = "test.zip" then
echo "test.zip exists" & cr
FTPobj.FindFileClose
Found = false
else
echo "test.zip ist nicht vorhanden" & cr
Found=FTPobj.FindNextFile
End If
End If
Wend
End Function
4.7.13 GetFindFileName
GetFindFileName ruft nach einem erfolgreichen Aufruf der Methode FindFirstFile oder FindNextFile
den Dateinamen der gegenwärtig ausgewählten Datei ab.
Wenn FindFileClose aufgerufen wird, dürfen GetFindFileName, GetFindFileSize und
GetFindFileAttributes nicht verwendet werden, da das Scripting-Modul andernfalls abstürzen würde.
Syntax
GetFindFileName
Rückgabewert
Eine Zeichenfolge, die den Dateinamen enthält.
Beispiel
Beispiel für die RenameFile-Funktion in Verbindung mit dem FTP-Objekt. In diesem Beispiel werden
alle Dateien umbenannt, die sich im Wurzelverzeichnis des FTP-Servers befinden:
Function Main
GFI LanGuard
4 Scripting-Objekte | 76
Dim FTPobj as Object
Const DIRECTORYMASK=&H10
ip = "127.0.0.1"
port = 21
Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]")
Found=FTPobj.FindFirstFile("*")
While Found
If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) =
DIRECTORYMASK Then
FileType="Verzeichnis"
Else
FileType="Datei"
FileName = FTPobj.GetFindFileName
RenameFileName = "umbenannt_" + FTPobj.GetFindFileName
ret = FTPobj.RenameFile (FileName, RenameFileName)
End If
Wend
End Function
4.7.14 GetFindFileSize
GetFindFileSize ruft nach einem erfolgreichen Aufruf der Methode FindFirstFile oder FindNextFile die
Dateigröße der gegenwärtig ausgewählten Datei ab.
Wenn FindFileClose aufgerufen wird, dürfen GetFindFileName, GetFindFileSize und
GetFindFileAttributes nicht verwendet werden, da das Scripting-Modul andernfalls abstürzen würde.
Syntax
GetFileSize
Rückgabewert
Lange ganze Zahl, welche die Dateigröße enthält.
Beispiel
Beispiel für die RenameFile-Funktion in Verbindung mit dem FTP-Objekt. In diesem Beispiel werden
alle Dateien umbenannt, die sich im Wurzelverzeichnis des FTP-Servers befinden:
Function Main
Dim FTPobj as Object
Const DIRECTORYMASK=&H10
ip = "127.0.0.1"
port = 21
cr = Chr(13) + Chr(10)
Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]")
Found=FTPobj.FindFirstFile("*")
GFI LanGuard
4 Scripting-Objekte | 77
While Found
If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) =
DIRECTORYMASK Then
FileType="Verzeichnis"
Else
FileType="Datei"
End If
echo "Datei: " + FTPobj.GetFindFileName + " Größe: " + CStr
(FTPobj.GetFindFileSize) + " Byte Typ: " + FileType & cr
Found=FTPobj.FindNextFile
Wend
End Function
GetFindFileAttributes
GetFindFileAttributes ruft nach einem erfolgreichen Aufruf der Methode FindFirstFile oder
FindNextFile die Dateiattribute der gegenwärtig ausgewählten Datei ab.
Wenn FindFileClose aufgerufen wird, dürfen GetFindFileName, GetFindFileSize und
GetFindFileAttributes nicht verwendet werden, da das Scripting-Modul andernfalls abstürzen würde.
Syntax
GetFindFileAttributes
Rückgabewert
Dateiattribute der gegenwärtig ausgewählten Datei. Dies sind die Attribute, die im Element
dwFileAttributes der WIN32-Struktur WIN32_FIND_DATA enthalten sind. Bitmasken sind als
Konstanten der Form FILE_ATTRUTE_* definiert. D. h., FILE_ATTRUTE_DIRECTORY ist als 0x10
definiert.
Bitmasken
Definition
FILE_ATTRIBUTE_READONLY
&H1
FILE_ATTRIBUTE_HIDDEN
&H2
FILE_ATTRIBUTE_SYSTEM
&H4
FILE_ATTRIBUTE_DIRECTORY
&H10
FILE_ATTRIBUTE_ARCHIVE
&H20
FILE_ATTRIBUTE_DEVICE
&H40
FILE_ATTRIBUTE_NORMAL
&H80
FILE_ATTRIBUTE_TEMPORARY
&H100
FILE_ATTRIBUTE_SPARSE_FILE
&H200
FILE_ATTRIBUTE_REPARSE_POINT
&H400
FILE_ATTRIBUTE_COMPRESSED
&H800
FILE_ATTRIBUTE_OFFLINE
&H1000
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
&H2000
FILE_ATTRIBUTE_ENCRYPTED
&H4000
GFI LanGuard
4 Scripting-Objekte | 78
Beispiel
Beispiel für die RenameFile-Funktion in Verbindung mit dem FTP-Objekt. In diesem Beispiel werden
alle Dateien umbenannt, die sich im Wurzelverzeichnis des FTP-Servers befinden:
Function Main
Dim FTPobj as Object
Const DIRECTORYMASK=&H10
ip = "127.0.0.1"
port = 21
Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]")
Found=FTPobj.FindFirstFile("*")
While Found
If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) =
DIRECTORYMASK Then
FileType="Verzeichnis"
Else
FileType="Datei"
End If
echo "Datei: " + FTPobj.GetFindFileName + " Größe: " + CStr
(FTPobj.GetFindFileSize) + " Byte Typ: " + FileType
Found=FTPobj.FindNextFile
Wend
End Function
4.7.15 LastError
LastError enthält den WIN32-Fehlercode, der von verschiedenen Methoden festgelegt wird, wenn
diese den Wert FALSE zurückgeben und fehlschlagen. Falls erforderlich, muss dieser Wert überprüft
werden, bevor eine andere Methode aufgerufen wird, die diesen Wert im Fehlerfall neu belegt.
4.7.16 Syntax
FTPobj.LastError: STRING (read)
Beispiel
Beispiel, in dem das aktuelle Arbeitsverzeichnis festgelegt wird:
Function Main
Dim FTPobj as Object
'nach Bedarf konfigurieren
ip = "127.0.0.1"
port = 21
mode = FALSE
username = "anonymous"
password = "[email protected]"
directory = "/pub/"
GFI LanGuard
4 Scripting-Objekte | 79
'neue FTP-Verbindung erstellen
Set FTPobj=FTP.Connect (ip,21,mode,username,password)
'/pub/ als aktuelles Arbeitsverzeichnis festlegen
RET = FTPobj.SetCurrentDirectory (directory)
if RET Then
echo "Aktuelles Verzeichnis erfolgreich auf " + directory + "
festgelegt"
else
echo "Aktuelles Verzeichnis konnte nicht festgelegt werden: " +
CStr(FTPobj.LastError)
End If
End Function
4.8 Encode-Objekte
Ein Kodierungsobjekt bietet dem Benutzer die Möglichkeit, Base64-Strings zu kodieren bzw. zu
dekodieren. Dies kann sich in vielen Situationen als nützlich erweisen. Die Base64-Kodierung wird
häufig in E-Mails sowie in vielen Authentifizierungsschemata wie etwa http verwendet.
Dieser Abschnitt enthält Informationen zu den folgenden Encode-Objekten:
Base64Encode
Base64Decode
4.8.1 Base64Encode
Mit Base64Encode kann ein String in die entsprechende Base64-Darstellung kodiert werden.
Syntax
Base64Encode(String)
Rückgabewert
String.
Beispiel
Function Main
Dim message As String
Dim encoded As String
Dim decoded As String
cr = Chr(13)+Chr(10) 'Wagenrücklauf und Zeilenvorschub
message = "Zu kodierender String"
encoded = Encode.Base64Encode(message)
echo "Kodierter Text: "
echo encoded
echo cr
decoded = Encode.Base64Decode(encoded)
GFI LanGuard
4 Scripting-Objekte | 80
echo "Dekodierter Text:"+decoded+cr
End Function
Base64Decode
Mit Base64Decode wird die Base64-Darstellung eines Strings in sein ursprüngliches Format dekodiert.
Syntax
Base64Decode(String)
Rückgabewert
String.
Beispiel
Function Main
Dim message As String
Dim encoded As String
Dim decoded As String
cr = Chr(13) + Chr(10)'Wagenrücklauf und Zeilenvorschub
message = "Zu kodierender String"
encoded = Encode.Base64Encode(message)
echo "Kodierter Text: "
echo encoded
echo cr
decoded = Encode.Base64Decode(encoded)
echo "Dekodierter Text:"+decoded+cr
End Function
GFI LanGuard
4 Scripting-Objekte | 81
5 Allgemeine Funktionen
GFI LanGuard-Script Debugger unterstützt allgemeine Funktionen für die Integration von Skripten in
die GFI LanGuard-Serverkomponente.
Themen in diesem Kapitel:
5.1 Echo
82
5.2 WriteToLog
82
5.3 StatusBar
83
5.4 AddListItem
83
5.5 SetDescription
84
5.1 Echo
Echo ist eine einfache Funktion zur Anzeige von Ausgabewerten.
Syntax
Echo (String)
Rückgabewert
Keine Rückgabedaten.
Beispiel
Dieses Beispiel gibt das Wort „Test“ aus:
Function Main
echo "test"
End Function
5.2 WriteToLog
Wenn Sie der Funktion Writetolog einen beliebigen String übergeben, wird dieser in die Protokolldatei
der Scripting-Engine geschrieben.
Syntax
WriteToLog(String)
Rückgabewert
Keine Rückgabedaten.
Beispiel
Function Main
WritetoLog "test"
End Function
GFI LanGuard
5 Allgemeine Funktionen | 82
5.3 StatusBar
Mit StatusBar können Sie einen String in der Statusleiste der aktiven Komponente anzeigen.
Syntax
StatusBar(String)
Rückgabewert
Keine Rückgabedaten.
Beispiel
Function Main
StatusBar "test"
End Function
5.4 AddListItem
AddListItem ist eine Funktion, mit deren Hilfe Skripte dem Benutzer Feedback geben können. Diese
Funktion fügt den übergebenen String als Unterknoten der ausgelösten Schwachstelle ein. Die
Funktion AddListItem erwartet zwei unterschiedliche Parameter. Der erste Parameter bestimmt den
übergeordneten Knoten, der zweite Parameter den String, der in die Baumstruktur eingefügt werden
soll. Wenn der übergeordnete Knoten nicht angegeben wird, fügt die Funktion den angegebenen String
in den obersten verfügbaren Knoten ein (den übergeordneten Knoten der Schwachstelle). Die
Baumstruktur kann nur aus einer Ebene bestehen, aber so viele Geschwisterknoten wie nötig
enthalten.
Syntax
AddListItem(String,String)
Rückgabewert
K. A.
Beispiel
Function MAIN
Dim wmi As Object
Dim objset As Object
Dim obj As Object
Dim monitor As Object
Dim prop As Object
Set wmi = GetObject("winmgmts:\\127.0.0.1\root\cimv2")
Set objset = wmi.instancesof("Win32_service")
For Each obj In objset
Set monitor = obj
For Each prop In monitor.properties_
If VarType(prop.value) = 8 Then
GFI LanGuard
5 Allgemeine Funktionen | 83
If Not (IsNull(prop.value)) Then
If prop.name = "Name" Then
If left(prop.value,1) = "a" then
AddListItem("A",prop.value)
End If
If left(prop.value,1) = "b" then
AddListItem("B",prop.value)
End If
If left(prop.value,1) = "c" Then
AddListItem("C",prop.value)
End if
End If
End If
End If
Next
Next
main = true
End Function
5.5 SetDescription
SetDescription ist eine einfache Möglichkeit, dem Benutzer Feedback zu geben, indem die
Beschreibung der Schwachstelle geändert wird und so die Auslösung der Schwachstelle detaillierter
erläutert werden kann. SetDescription erwartet nur einen Parameter. Der an die Funktion
übergebene String wird als neue Beschreibung für die Schwachstelle verwendet, sobald diese
ausgelöst wird.
Syntax
SetDescription(String)
Rückgabewert
K. A.
Beispiel
Function Main
SetDescription ("Diese neue Beschreibung ersetzt die bisherige
Beschreibung der Schwachstelle.")
Main=true
End Function
GFI LanGuard
5 Allgemeine Funktionen | 84
6 Verwenden von ActiveX-, COM- und OLE-Automatisierungsobjekten
Dieses Kapitel enthält Informationen zur Verwendung von Skriptautomatisierungsobjekten. Zum
Anbinden von Automatisierungsobjekten wird die Funktion CreateObject verwendet. Diese
Funktion gibt ein Objekt zurück, das eine Verbindung zur gewünschten Automatisierung enthält.
Themen in diesem Kapitel:
6.1 Informationen zu Automatisierungsobjekten
85
6.2 Beispiel für die Verwendung eines Automatisierungsobjekt-Skripts
86
6.1 Informationen zu Automatisierungsobjekten
Aufrufe von Automatisierungsobjekten werden mithilfe der Funktion CreateObject ausgeführt.
Diese Funktion gibt ein Objekt zurück, das eine Verbindung zu der gewünschten Automatisierung
enthält.
Beispiel
So verwenden Sie das Regular Expression Object von Microsoft ©:
Function Main
Dim regexp As Object
Dim test As String
Set regexp = CreateObject("VBScript.RegExp")
regexp.pattern = "[A-Za-z]:(\\[A-Za-z0-9_.-])*"
test = "c:\windows\"
If regexp.test(test) Then
echo("Dies ist ein Pfad")
Else
echo("Dies ist kein Pfad")
End If
End Function
Im Beispiel oben wird ein regulärer Ausdruck verwendet, um zu überprüfen, ob die Variable „test“
einen Pfad enthält oder nicht.
Dank der Flexibilität dieses Systems können nicht nur GFI LanGuard-Skripte mit diesen Objekten
erweitert werden, sondern das Scripting-Modul für jeden benötigten Zweck eingesetzt werden. So
kann zum Beispiel ein Skript geschrieben werden, das nach Anzeichen des Wurms X sucht, den Wurm
entfernt, falls es ihn findet, und als Nachweis über die durchgeführten Änderungen einen Bericht in
Excel erzeugt, während in GFI LanGuard angezeigt wird, dass ein Wurm gefunden und erfolgreich
beseitigt wurde.
Im Folgenden finden Sie ein Beispiel für eine solche Automatisierung. Das Skript listet die auf dem
lokalen Computer ausgeführten Dienste und ihren Status in einer Excel-Arbeitsmappe auf. Damit das
Beispiel funktioniert, muss Excel installiert und WMI verfügbar sein. WMI ist bei Windows-Versionen ab
Windows 2000 aufwärts standardmäßig vorinstalliert.
GFI LanGuard
6 Verwenden von ActiveX-, COM- und OLE-Automatisierungsobjekten | 85
6.2 Beispiel für die Verwendung eines Automatisierungsobjekt-Skripts
Das folgende Skript stellt eine Verbindung zum Excel-Automatisierungsobjekt her, erstellt eine neue
Arbeitsmappe und exportiert eine Liste der Dienste und ihres jeweiligen Status in diese Mappe. Das
Skript benötigt Excel und WMI.
Hinweis
Windows Management Instrumentation ist ab Windows 2000 vorinstalliert. Unter
Windows 9x und Windows NT muss WMI installiert werden. Download unter:
http://go.gfi.com/?pageid=_wmi
Function Main
Dim excel As Object 'Erstellen der vom Skript benötigten Objekte
Dim book As Object
Dim sheet As Object
Dim range As Object
Dim columns As Object
Dim wmiobj As Object
Dim objswbemobject As Object
strComputer = "127.0.0.1"
Set wmiobj = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
'WMI-Objekt abrufen, mit dem verschiedene Informationen abgerufen
werden können
If wmiobj is Nothing Then
echo ("Fehler 1: WMI-Objekt kann nicht erstellt werden")
Else
Set excel = CreateObject("Excel.application")
'Verbindung mit Excel-Automatisierungsobjekt herstellen
If excel is Nothing Then
Echo("Excel-Objekt kann nicht erstellt werden")
Else
'Excel-Version anzeigen
echo ("Sitzung initialisiert mit Excel-Version "&excel.version)
'Arbeitsmappe einfügen
Set book = excel.workbooks.add
'Arbeitsblatt in Arbeitsmappe einfügen
Set sheet = Book.Worksheets.add
sheet.cells(1,1) = "Dieses Arbeitsblatt wurde mithilfe eines GFI
LanGuard-Skripts erstellt"
GFI LanGuard
6 Verwenden von ActiveX-, COM- und OLE-Automatisierungsobjekten | 86
'Spaltennamen festlegen
sheet.cells(3,1) = "Dienstname"
sheet.cells(3,2) = "Status"
sheet.cells(3,3) = "Gestartet"
'Informationen zu Diensten abrufen
Set wmiinst=wmiobj.instancesof("Win32_Service")
If wmiinst is Nothing Then
echo ("Fehler 2: Informationen zu Diensten können nicht abgerufen werden")
Else
lnpos = 4
For Each objswbemobject In wmiinst
'sämtliche Dienstobjekte durchlaufen
lnpos = lnpos + 1
sheet.cells(lnpos,1) = objswbemobject.DisplayName
'Informationen zum Dienst in Excel-Arbeitsmappe eintragen
sheet.cells(lnpos,2) = objswbemobject.State
sheet.cells(lnpos,3) = objswbemobject.Started
Next
'Spalten automatisch anpassen
sheet.columns.AutoFit
'Excel-Arbeitsmappe anzeigen
sheet.application.visible = true
End If
End If
End If
End Function
GFI LanGuard
6 Verwenden von ActiveX-, COM- und OLE-Automatisierungsobjekten | 87
7 Bibliotheken und Wiederverwendung von Code
Mithilfe des GFI LanGuard Script Debugger können Sie benutzerdefinierte Bibliotheken erstellen, um
diese in Skripten zu verwenden. Dadurch können Sie Bibliotheken mit Funktionen erstellen, die in
mehreren Skripten verwendet werden. Anschließend importieren Sie diese Bibliothek einfach in alle
Skripte, in denen Sie die Funktionen verwenden möchten.
Themen in diesem Kapitel:
7.1 Bibliotheken erstellen
88
7.2 Verwenden von Bibliotheken
88
7.1 Bibliotheken erstellen
Bibliotheken sind einfache Skripte, die üblicherweise eine Reihe von Funktionen enthalten. Im
Gegensatz zu normalen Skripten sollten Bibliotheken keine main-Funktion enthalten. Wenn eine mainFunktion in einer Bibliothek definiert wird, kommt es zu einem Fehler aufgrund einer doppelten
Deklaration, wenn das Skript, das die Funktion aufruft, ebenfalls eine main-Funktion enthält. Falls das
Skript keine main-Funktion enthält, wird die main-Funktion der Bibliothek aufgerufen.
Bibliotheken sollten im konfigurierten Bibliotheksverzeichnis abgelegt werden. Üblicherweise ist dies
das folgende Verzeichnis:
<[Installationsverzeichnis von GFI LanGuard]\Library
Es ist auch möglich, die Bibliothek in einem Unterverzeichnis abzulegen, jedoch nur innerhalb des
konfigurierten Bibliotheksverzeichnisses.
7.2 Verwenden von Bibliotheken
Damit Sie Funktionen aus einer Bibliothek aufrufen können, muss die Bibliothek zunächst in Ihr Skript
importiert werden. Dies geschieht durch die include-Direktive. So verwenden Sie die die includeDirektive:
1. Geben Sie die beiden Zeichen „'# “ ein.
2. Nach dem „#“-Zeichen geben Sie das Wort „include“ ein, gefolgt vom Namen der Bibliothek in
doppelten Anführungszeichen.
Beispiel
'#include “meineBibliothek”
Dadurch wird der Code aus "meineBibliothek" quasi am Anfang des Skripts eingefügt, wodurch
alle Funktionen aus "myLibrary"in dem Skript zur Verfügung stehen, das Sie gerade entwickeln.
Beispiel
Das ist die Bibliothek (in einer Datei mit dem Namen „bibliothek“):
Function Ver
Ver = "1.0"
End Function
Die Bibliothek enthält nur eine einzige Funktion mit dem Namen „Ver“, die den String „1.0“
zurückgibt.
GFI LanGuard
7 Bibliotheken und Wiederverwendung von Code | 88
So könnte ein Skript aussehen, das die obige Bibliothek verwendet:
'#include "bibliothek"
Function Main
Dim libraryver As String
libraryver = Ver()
echo libraryver
End Function
Das Skript verwendet einfach die in der Bibliothek gespeicherte Funktion, um einen String abzurufen,
und zeigt den Rückgabewert an.
GFI LanGuard
7 Bibliotheken und Wiederverwendung von Code | 89
8 Index
A
Agent 19, 51-52
Attribute 33-34, 40, 63
B
Bedingungen 12, 15
V
VB 9, 12
VBScript 6-7, 85
W
WMI 86
Benutzer 29, 32, 41, 47, 64, 80, 83-84
C
Client 17, 29, 32
Computer 4, 9, 33, 38, 70, 85
D
DNS 17, 20, 27-28
E
Erweitert 85
K
Kennwort 10, 16, 57, 59, 64
N
NetBIOS 33, 42
P
Ports 54
Profile 12
Proxy 48-50, 54-56, 60
Python 4, 14-15, 18
Python-Skript 14-15
R
Registry 42-47, 49
S
Schwachstellen 4, 10
Schwachstellenbewertung 15
Script Debugger 4, 6, 8-10, 12, 14, 18, 20, 82, 88
Server 20-21, 29-30, 32, 48-49, 60-61, 64-68, 71-73
Skript 6-8, 10-12, 15, 21-26, 33-38, 42-46, 48-59, 61-62,
87-88
SNMP 29-32
SSH 4
GFI LanGuard
Index | 90
USA, KANADA UND ZENTRAL- SOWIE SÜDAMERIKA
4309 Emperor Blvd, Suite 400, Durham, NC 27703, USA
Telefon: +1 (888) 243-4329
Fax: +1 (919) 379-3402
[email protected]
GROSSBRITANNIEN UND IRLAND
Magna House, 18-32 London Road, Staines-upon-Thames, Middlesex, TW18 4BP, UK
Telefon: +44 (0) 870 770 5370
Fax: +44 (0) 870 770 5377
[email protected]
EUROPA, MITTLERER OSTEN UND AFRIKA
GFI House, Territorials Street, Mriehel BKR 3000, Malta
Telefon: +356 2205 2000
Fax: +356 2138 2419
[email protected]
AUSTRALIEN UND NEUSEELAND
83 King William Road, Unley 5061, South Australia
Telefon: +61 8 8273 3000
Fax: +61 8 8273 3099
[email protected]