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 lnss@gfi.com) 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 = "test@lnss.com" 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 = "test@lnss.com" 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 = "test@lnss.com" 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 = "test@lnss.com" 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 = "test@lnss.com" 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 = "test@lnss.com" 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","lnss@gfi.com") 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 = "test@lnss.com" 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","lnss@gfi.com") 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","lnss@gfi.com") 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","lnss@gfi.com") 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","lnss@gfi.com") 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","lnss@gfi.com") 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","lnss@gfi.com") 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","lnss@gfi.com") 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 = "test@lnss.com" 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 ussales@gfi.com 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 sales@gfi.co.uk EUROPA, MITTLERER OSTEN UND AFRIKA GFI House, Territorials Street, Mriehel BKR 3000, Malta Telefon: +356 2205 2000 Fax: +356 2138 2419 sales@gfi.com AUSTRALIEN UND NEUSEELAND 83 King William Road, Unley 5061, South Australia Telefon: +61 8 8273 3000 Fax: +61 8 8273 3099 sales@gfiap.com