Guida di scripting Le informazioni e il contenuto del presente documento vengono forniti esclusivamente a scopi informativi e “come sono”, senza garanzia di alcun tipo, sia espressa che implicita, ivi incluse, in via esemplificativa, tutte le garanzie implicite di commerciabilità, idoneità a soddisfare uno scopo particolare e non violazione dei diritti altrui. GFI Software non sarà ritenuta responsabile di nessun danno, inclusi danni consequenziali, che possano derivare dall’uso del presente documento. Le informazioni sono state ottenute da fonti pubblicamente disponibili. Nonostante siano stati compiuti sforzi ragionevoli al fine di garantire la precisione dei dati forniti, GFI non garantisce, promette né tantomeno assicura la completezza, la precisione, l’aggiornamento o l’adeguatezza di tali dati e non sarà ritenuta responsabile di errori di stampa. GFI non fornisce garanzie, né espresse né implicite e non si assume la responsabilità legale della precisione o della completezza delle informazioni contenute nel presente documento. Se si ritiene che vi siano errori effettivi nel presente documento, contattarci. Provvederemo a risolvere la cosa quanto prima. Tutti i nomi di prodotti e società riportati possono essere marchi registrati dei rispettivi proprietari. GFI LanGuard è un copyright di GFI SOFTWARE Ltd. - 1999-2014 GFI Software Ltd. Tutti i diritti riservati. Versione documento: 11.3 Ultimo aggiornamento (mese/giorno/anno): 09/05/2014 1 Introduzione GFI LanGuard consente agli utenti di scrivere script personalizzati che verificano la presenza di vulnerabilità. Gli script possono dipendere dalla piattaforma o esserne indipendenti. Dipendenti dalla piattaforma (gli script vengono eseguiti sul computer sottoposto a scansione): script di shell UNIX eseguiti tramite SSH. Il computer remoto deve essere un computer UNIX e consentire le connessioni remote tramite SSH Indipendenti dalla piattaforma (gli script vengono eseguiti sul computer in cui è installato GFI LanGuard): script di Visual Basic. Il presente manuale fornisce ampie informazioni relative alla scrittura, al debug e alla configurazione dei controlli di vulnerabilità di Visual Basic Script Python: per ulteriori dettagli, vedere il capitolo di scripting Python del presente manuale. Argomenti del presente capitolo: 1.1 Vantaggi dell’utilizzo di uno script debugger 4 1.2 Funzionalità di GFI LanGuard Script Debugger 4 1.1 Vantaggi dell’utilizzo di uno script debugger Il vantaggio nell’utilizzo di un editor consiste nella maggior sicurezza e velocità per correggere e creare gli script di lavoro. L’utilizzo di un editor assicurerà che lo script sia funzionale, prima di eseguire lo script in un ambiente di lavoro. GFI LanGuard Script Debugger consente di eseguire lo script come in un ambiente di lavoro. GFI LanGuard Script Debugger dispone di tutte le funzionalità comuni trovate in un ambiente di sviluppo integrato. Tre le altre sono incluse: Punti di interruzione Passaggio a Ignora Consente di specificare i parametri per una verifica corretta. Importante L’esecuzione dello script in GFI LanGuard senza debug non è consigliata. Se lo script non funziona, non si sarà in grado di identificare l’errore dello script. Una codifica errata può inoltre portare a ripetizioni infinite che possono bloccare lo scanner GFI LanGuard. 1.2 Funzionalità di GFI LanGuard Script Debugger Nella tabella seguente sono contenute le funzionalità principali di GFI LanGuard Script Debugger: Funzione Descrizione Supporto per le espressioni di controllo variabili Monitoraggio in tempo reale dei cambiamenti dei valori delle variabili utilizzate. GFI LanGuard 1 Introduzione | 4 Funzione Descrizione Funzionalità Passaggio a/Ignora Consente di eseguire il debug degli script riga per riga monitorando le attività in corso durante l’esecuzione dello script. Evidenziazione sintassi Semplificazione nella programmazione degli script e nell’individuazione dei problemi. Messaggi di errore completi Indica il tipo e la posizione degli errori. Aiuta a rilevare gli errori basati sul tipo di variabile. Punto di interruzione Il debugger supporta i punti di interruzione che passeranno riga per riga eseguendo il debug in un particolare punto di interesse. Esecuzione/debug di script utilizzando credenziali alternative Capacità di eseguire il debug dello script ed eseguirlo utilizzando credenziali alternative durante il processo di sviluppo e debug dello script. GFI LanGuard 1 Introduzione | 5 2 Visual Basic Script (VBScript) Questo capitolo fornisce le informazioni relative a VBScript e alla modalità di creazione degli script utilizzando GFI LanGuard Script Debugger. Un riferimento completo per il linguaggio di programmazione di Visual Basic utilizzato da GFI LanGuard è disponibile all’indirizzo: http://go.gfi.com/?pageid=lan_vbs Argomenti del presente capitolo: 2.1 Note importanti su VBScript 6 2.2 Funzioni di VBScript supportate da GFI LanGuard 6 2.3 Errori e insidie comuni 7 2.4 Suggerimenti 8 2.5 Sviluppo di uno script in GFI LanGuard Script Debugger 9 2.6 Aggiunta di un nuovo controllo di vulnerabilità basato su script per lo scanner 11 2.1 Note importanti su VBScript In ogni script creato, deve essere presente una funzione denominata Main. GFI LanGuard cercherà la funzione e avvierà l’esecuzione dello script partendo da essa. Il valore restituito della funzione Main nel motore di scripting è Booleano (true o false). Il valore restituito viene specificato assegnando il valore del risultato a una variabile che ha lo stesso nome della funzione (esempio: se la funzione è denominata MyFunction, il valore restituito è specificato come MyFunction = true). Il valore restituito viene in genere specificato alla fine della funzione. Esempio Function Main 'Visualizzazione del testo nella finestra di attività dello scanner echo "Script has run successfully" 'restituzione del risultato Main = true End Function 2.2 Funzioni di VBScript supportate da GFI LanGuard Tutte le funzioni e tutti i metodi di scripting di VBScript sono supportati da GFI LanGuard. Per ulteriori informazioni, utilizzare le risorse di VBScript seguenti: 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 Errori e insidie comuni In VBScript sono disponibili due tipi di variabili: Tipo di variabile Descrizione Semplice Le variabili sono di tipo true, ad esempio numero intero, Booleano, stringa. Oggetti Elementi complessi la cui funzionalità si trova nell’interfaccia degli oggetti di automazione. È importante dichiarare i tipi di oggetto di automazione come Object, prima di assegnare loro dei valori. Importante Si raccomanda di assegnare un valore a tutte le variabili e/o a tutti gli oggetti dichiarati. Esempio Function Main 'dichiarazione dell’oggetto da utilizzare Dim nameStr As String 'assegnazione di un valore alla variabile nameStr = "Questa è un’assegnazione prova del testo" 'visualizzazione del risultato nella finestra di attività di assegnazione dello scanner echo nameStr 'restituzione del risultato Main = true End Function Per un esempio più avanzato, lo script in basso elencherà i servizi installati nel computer di destinazione (host locale = 127.0.0.1). Copiare e incollare il testo seguente nello script debugger ed eseguirlo (F5). Nella finestra di debug verrà visualizzato l’elenco dei servizi installati nel computer locale. Function main 'dichiarazione degli oggetti che dovranno essere utilizzati Dim wmi As Object Dim objswbemobject As Object 'dichiarazione delle altre variabili necessarie Dim strComputer As String Dim cr As String strComputer = "127.0.0.1" 'Ritorno a capo cr = Chr(13) + Chr(10) GFI LanGuard 2 Visual Basic Script (VBScript) | 7 'hook con l’oggetto wmi Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 'Controllo della riuscita dell’hook If wmi is Nothing Then echo ("errore1") 'Restituzione istanza servizi di wmi Set wmiinst=wmi.instancesof("Win32_Service") 'Controllo per vedere disponibilità dell’istanza If wmiinst is Nothing Then echo ("errore2") 'Ciclo true per ogni istanza For Each objswbemobject In wmiinst echo("Nome servizio= ") 'Visualizzazione servizi echo(objswbemobject.DisplayName+cr) Next End Function Nota Se si tenta di utilizzare un oggetto automazione senza dichiarazione, lo script avrà esito negativo durante la compilazione. Come esempio, considerare lo stesso pezzo di codice in cui manca la dichiarazione completa della variabile dell’oggetto wmi. Nel momento in cui si tenta di eseguire lo script, verrà visualizzato un messaggio di errore nonché un’indicazione chiara della riga su cui si è verificato l’errore: Function main Dim wmi 'AVVISO : manca “come oggetto” Dim objswbemobject As Object … … … End Function 2.4 Suggerimenti Per visualizzare le informazioni sull’avanzamento nella finestra Attività scanner (la finestra in basso dello strumento scanner o la finestra in basso a sinistra dello script debugger), utilizzare il comando echo. Esempio Function Main 'Visualizzazione del testo nella finestra di attività dello scanner echo "Script has run successfully" 'restituzione del risultato GFI LanGuard 2 Visual Basic Script (VBScript) | 8 Main = true End Function 2.5 Sviluppo di uno script in GFI LanGuard Script Debugger Questa sezione contiene informazioni relative alla creazione di un VBScript utilizzando GFI LanGuard Script Debugger. Per ulteriori informazioni, fare riferimento a: Creazione di un VBScript Esecuzione di uno script Punti di interruzione del debug - funzionalità Passaggio a Monitoraggio dei valori all’interno delle variabili Debug sotto sessioni utente alternative Invio di parametri allo script 2.5.1 Creazione di uno script In questa sezione viene creato uno script. Lo script controlla se il servizio di messaggistica è o meno in esecuzione sul computer locale. Lo script viene sviluppato utilizzando lo script debugger e dimostra alcune delle sue funzionalità. Esempio Function main 'dichiarazione degli oggetti che dovranno essere utilizzati Dim wmi As Object Dim objswbemobject As Object 'dichiarazione delle altre variabili necessarie Dim strComputer As String Dim cr As String strComputer = "127.0.0.1" 'ritorno a capo cr = Chr(13) + Chr(10) 'hook con l’oggetto wmi Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 'controllo della riuscita dell’hook If wmi is Nothing Then echo ("errore1") 'restituzione istanza servizi di wmi Set wmiinst=wmi.instancesof("Win32_Service") 'controllo per vedere disponibilità dell’istanza If wmiinst is Nothing Then echo ("errore2") 'Ciclo true per ogni istanza For Each objswbemobject In wmiinst If objswbemobject.DisplayName = "Messenger" Then GFI LanGuard 2 Visual Basic Script (VBScript) | 9 echo("Nome servizio= ") 'Visualizzazione servizi echo(objswbemobject.DisplayName+cr) echo("Stato servizio= ") 'stato visualizzato echo(objswbemobject.State+cr) If objswbemobject.State = "Esecuzione" Then main = true If objswbemobject.State = "Esecuzione" Then main = true End If Next End Function 2.5.2 Esecuzione di uno script Per eseguire lo script, premere F5 o fare clic su Debug > Go. 2.5.3 Punti di interruzione del debug - funzionalità Passaggio a Lo script debugger consente di sospendere l’esecuzione in un punto specifico dello script. Ad esempio, è possibile impostare un punto di interruzione per l’esecuzione quando la variabile contenente il nome visualizzato del servizio è “Messenger”. Per eseguire questa operazione nello script di esempio, passare alla riga 17 (“echo("Nome servizio= ")”) e inserire il punto di interruzione (Premere F9) proprio sotto all’istruzione "if". Durante l’esecuzione utilizzare il tasto F10 (Passaggio a) per eseguire il codice rimanente riga per riga. 2.5.4 Monitoraggio dei valori all’interno delle variabili Per monitorare i valori contenuti nelle variabili, è necessario aggiungere un’espressione di controllo per la variabile in questione. Per monitorare il contenuto della variabile: 1. Espandere la sezione di stato in basso. 2. Fare clic con il pulsante destro del mouse sulla prima riga libera in alto sotto Variabile. 3. Selezionare Aggiungi espressione di controllo, quindi digitare il nome della variabile che si desidera monitorare. Ripetere il passaggio per aggiungere monitoraggi per più variabili. 4. Per rimuovere un’espressione di controllo, fare clic con il pulsante destro del mouse su di essa e selezionare Elimina espressione di controllo. 2.5.5 Debug sotto sessioni utente alternative Per verificare lo script sotto credenziali alternative: 1. Avviare GFI LanGuard Script Debugger 2. Nell’elenco a discesa Utilizzo selezionare Credenziali alternative. 3. Digitare un nome utente e una password nelle caselle di testo apposite. 2.5.6 Invio di parametri allo script Lo strumento scanner GFI LanGuard passa i parametri agli script, quando vengono eseguiti. Esempio: il nome e l’IP del computer di destinazione sottoposto a scansione per la presenza di vulnerabilità. Per poter eseguire il debug degli script, è possibile effettuare una prova con vari tipi di valori per GFI LanGuard 2 Visual Basic Script (VBScript) | 10 questi parametri. È possibile specificare valori alternativi per questi parametri da Opzioni > Parametri. Per ottenere l’accesso a questi parametri negli script, è necessario utilizzare una GFI LanGuard funzione speciale denominata GetParameter a cui passare il nome del parametro che si desidera, ad esempio: Function main 'dichiarazione degli oggetti che dovranno essere utilizzati Dim wmi As Object Dim objswbemobject As Object 'dichiarazione delle altre variabili necessarie Dim strComputer As String Dim cr As String strComputer = "127.0.0.1" 'Ritorno a capo cr = Chr(13) + Chr(10) 'hook con l’oggetto wmi Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 'Controllo della riuscita dell’hook If wmi is Nothing Then echo ("errore1") 'Restituzione istanza servizi di wmi Set wmiinst=wmi.instancesof("Win32_Service") 'Controllo per vedere disponibilità dell’istanza If wmiinst is Nothing Then echo ("errore2") 'Ciclo true per ogni istanza For Each objswbemobject In wmiinst echo("Nome servizio= ") 'Visualizzazione servizi echo(objswbemobject.DisplayName+cr) Next End Function 2.6 Aggiunta di un nuovo controllo di vulnerabilità basato su script per lo scanner Nell’esempio seguente viene descritta la modalità di creazione di un nuovo controllo di vulnerabilità e verrà eseguito uno script per controllare la presenza di nuove vulnerabilità. Lo script visualizza Script eseguito correttamente nella finestra delle attività dello scanner e verrà indicato a GFI LanGuard che è stata rilevata la vulnerabilità e che deve essere segnalata all’amministratore. A tal fine: Passaggio 1 - Creare uno script che controlli la presenza di vulnerabilità (come descritto nella sezione precedente) Passaggio 2 - Creare una nuova vulnerabilità per eseguire lo script GFI LanGuard 2 Visual Basic Script (VBScript) | 11 2.6.1 Passaggio 1: Creare uno script che controlli la presenza di vulnerabilità 1. Avviare GFI LanGuard Script Debugger da Start > Tutti i programmi > GFI LanGuard 2012 > GFI LanGuard Script Debugger. 2. Fare clic su File > Nuovo. 3. Incollare il testo seguente nel debugger: Function Main echo "Script has run successfully" Main = true End Function 4. Salvare il file nella directory desiderata, esempio c:\myscript.vbs. 2.6.2 Passaggio 2: Creare una nuova vulnerabilità per eseguire lo script 1. Avviare la console di gestione di GFI LanGuard da Start > Programmi > GFI LanGuard 2014> GFI LanGuard 2014. 2. Fare clic sul pulsante delle opzioni principali e selezionare Configura > Editor profili di scansione. In alternativa, premere CTRL + P per aprire l’Editor profili di scansione. 3. Da Attività comuni fare clic su Nuovo profilo di scansione… oppure selezionare il profilo di scansione esistente da modificare. 4. Digitare un nome di profilo e, facoltativamente, una descrizione. 5. (Facoltativo) Selezionare Copia tutte le impostazioni da un profilo esistente e dal menu a discesa Profilo selezionare il profilo di scansione esistente che si desidera duplicare. 6. Fare clic su OK. Nota Il nuovo profilo di scansione viene aggiunto sotto la sezione Profili nel riquadro di sinistra. 7. Selezionare il nuovo profilo di scansione e dal riquadro di destra fare clic su Aggiungi… Verrà aperta la finestra di dialogo Aggiungi vulnerabilità. 8. Dalla scheda Generale digitare i dettagli generali, come il nome, il tipo di vulnerabilità e così via. 9. Fare clic sulla scheda Condizioni > Aggiungi. 10. Impostare il tipo di controllo su Controlli indipendenti > Test script VB. Fare clic su Avanti. 11. Specificare la posizione dello script (esempio: <ProductDataDir>\Scripts\newvulnerability.vbs). Fare clic su Avanti. 12. Selezionare l’attributo sul quale si desidera impostare la condizione, l’operatore corrispondente e il valore dell’esecuzione dello script. Nota Ciascuno script fornisce i valori supportati nella sezione Descrizione. 13. Fare clic su Fine. GFI LanGuard 2 Visual Basic Script (VBScript) | 12 Il controllo di vulnerabilità viene aggiunto e verrà incluso all’elenco delle vulnerabilità controllate alla prossima scansione di un computer. Per la verifica, è sufficiente eseguire la scansione del computer dell’host locale (127.0.0.1): verrà visualizzato l’avviso di vulnerabilità sotto la sezione Varie del nodo di vulnerabilità dei risultati di scansione. GFI LanGuard 2 Visual Basic Script (VBScript) | 13 3 Script Python In questo capitolo vengono fornite le informazioni necessarie alla creazione e all’esecuzione degli script Python. A partire dalla versione 9.0, GFI LanGuard supporta i controlli di vulnerabilità basati su Python. Questo tipo di controllo è disponibile nel tipo Controlli indipendenti. Argomenti del presente capitolo: 3.1 Descrizione del linguaggio dello script Python. 14 3.2 Creazione di un nuovo controllo di vulnerabilità utilizzando Test script Python 14 3.3 API (Application Programming Interfaces) disponibili negli script Python 15 3.4 Debug degli script Python 18 3.5 Possibilità di riutilizzo dei codici e delle librerie Python 18 3.1 Descrizione del linguaggio dello script Python. Python è un linguaggio di programmazione interpretato creato da Guido van Rossum nel 1990. Python viene completamente digitato in modo dinamico e utilizza la gestione di memoria automatica. Un elemento importante da ricordare è che il codice sorgente di Python utilizza l’indentazione invece che la punteggiatura o le parole chiave per indicare l’esecuzione di un blocco. Esempio di una funzione fattoriale in Python: def factorial(x): if x == 0: return 1 else: return x * factorial(x-1) 3.2 Creazione di un nuovo controllo di vulnerabilità utilizzando Test script Python Per creare i test script Python, è necessario: Passaggio 1: Creazione script Passaggio 2: Creazione del nuovo controllo di vulnerabilità 3.2.1 Passaggio 1: Creazione script 1. Avviare GFI LanGuard Script Debugger da Start > Tutti i programmi > GFI LanGuard2014 > GFI LanGuard Script Debugger. 2. Fare clic su File > Nuovo. 3. Copiare e incollare lo script seguente nello script debugger: #PythonSuccessfullCheck.py """ Per i dettagli, vedere il file <ProductDataDir>\Scripts\lpy.py. """ def main(): """Valori restituiti: GFI LanGuard 3 Script Python | 14 * 0 - false, non riuscito * 1 - true, riuscito""" result = 0 #Inserire il codice qui... result = 1 return(result) 4. Salvare lo script nella posizione desiderata. 3.2.2 Passaggio 2: Creazione del nuovo controllo di vulnerabilità 1. Avviare la console di gestione di GFI LanGuard da Start > Programmi > GFI LanGuard 2014> GFI LanGuard 2014. 2. Fare clic sul pulsante delle opzioni principali e selezionare Configura > Editor profili di scansione. In alternativa, premere CTRL + P per aprire l’Editor profili di scansione. 3. Da Attività comuni fare clic su Nuovo profilo di scansione… oppure selezionare il profilo di scansione esistente da modificare. 4. Dall’Editor profili di scansione fare clic su Opzioni di valutazione delle vulnerabilità > Vulnerabilità. 5. Dall’elenco del tipo di vulnerabilità espandere Vulnerabilità e selezionare Varie. Fare clic su Aggiungi. Viene aperta la finestra di dialogo Aggiungi vulnerabilità. 6. Dalla scheda Generale digitare le informazioni generali come nome, tipo e descrizione della nuova vulnerabilità. 7. Fare clic sulla scheda Condizioni > Aggiungi. 8. Selezionare Controlli indipendenti > Test script Python indipendente. Fare clic su Avanti. 9. Specificare la posizione dello script (esempio: <ProductDataDir>\Scripts\newvulnerability.vbs). (Caricare lo script creato al Passaggio 1: Creare uno script che controlli la presenza di vulnerabilità). 10. Dal menu a discesa selezionare il numero di oggetti che devono corrispondere affinché la condizione restituisca TRUE. Fare clic su Avanti. 11. Nella casella di modifica Valore specificare il valore restituito dallo script Python quando viene rilevata la vulnerabilità. Nota Ciascuno script fornisce i valori supportati nella sezione Descrizione. 12. Fare clic su Fine. 3.3 API (Application Programming Interfaces) disponibili negli script Python GFI LanGuard presenta quasi tutta l’implementazione predefinita Python (denominato anche CPython, disponibile in http://go.gfi.com/?pageid=pythorg). Attualmente viene utilizzato Python versione 2.5. La maggior parte degli script Python esistenti funziona pertanto con modifiche minime in GFI LanGuard. La modifica più importante è che gli script devono avere una funzione main() che restituisce 1 o 0. GFI LanGuard 3 Script Python | 15 Tutti gli script Python utilizzati dai moduli dello scanner di sicurezza (controlli di vulnerabilità e informazioni sulle applicazioni di sicurezza) dispongono dell’accesso alle variabili globali seguenti: ComputerIP ComputerName LNSSDir localProgramFilesPath localWindowsPath localSystem32Path User Password Esempio ComputerIP = '127.0.0.1' ComputerName = 'WXPSandbox" LNSSDir = 'C:\\Programmi\\GFI\\LanGuard 2011\\' localProgramFilesPath = 'C:\\\Programmi' localWindowsPath = 'C:\\WINDOWS' localSystem32Path = 'C:\\WINDOWS\\system32' User = '' Password = '' Utilizzare queste variabili globali per ottenere l’accesso al nome o all’indirizzo IP del computer sottoposto a scansione, ovvero le credenziali necessarie per la connessione al computer sottoposto a scansione. Le funzioni globali di GFI LanGuard sono disponibili per gli script Python come metodi dell’oggetto GlobalFunctions. I.E: # Utilizzo delle funzioni globali. def main(): """Valori restituiti: * 0 - false, non riuscito * 1 - true, riuscito""" result = 0 # Visualizzazione testo. GlobalFunctions.echo("Salve!") # Aggiunge testo specificato al file di registro. GlobalFunctions.writetolog("Script Python avviato.") # Aggiunge testo specificato alla barra di stato. GlobalFunctions.statusbar("Barra di stato Salve!") # Aggiunge un nodo secondario con lo stesso nome del secondo parametro alla vulnerabilità corrente. GFI LanGuard 3 Script Python | 16 GlobalFunctions.addlistitem("", "Descrizione vulnerabilità.") # Modifica la descrizione della vulnerabilità corrente. GlobalFunctions.setdescription("Elenco degli elementi installati") GlobalFunctions.writetolog("Script Python terminato.") result = 1 return(result) GFI LanGuard fornisce anche l’API client COM per gli script Python in formato pywin32. Nota Tutte le librerie di script COM GFI LanGuard sono disponibili tramite win32com.client per gli script Python. Per ulteriori informazioni, fare riferimento a Oggetti scripting (pagina 20). Esempio # Ricerca DNS utilizzando l’oggetto LanGuard COM GlbObj.Socket. def main(): """Valori restituiti: * 0 - false, non riuscito * 1 - true, riuscito""" 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 # Salve mondo per pywin32. def main(): """Valori restituiti: * 0 - false, non riuscito * 1 - true, riuscito""" result = 0 import win32com.client strComputer = "." objWMIService = win32com.client.Dispatch ("WbemScripting.SWbemLocator") objSWbemServices = objWMIService.ConnectServer (strComputer,"root\cimv2") GFI LanGuard 3 Script Python | 17 colItems = objSWbemServices.ExecQuery("Select * from Win32_ PhysicalMemory") for objItem in colItems: print("Capacità: %s\n" % objItem.Capacity) result = 1 return(result) Nota Per la documentazione aggiuntiva Pywin32, fare riferimento a: http://go.gfi.com/?pageid=pywin32 http://go.gfi.com/?pageid=pythres 3.4 Debug degli script Python GFI LanGuard Script Debugger non supporta il debug degli script Python. Qualsiasi IDE Python, debugger o interprete della riga di comando che esegua gli script Python utilizzando la versione Python 2.5 attualmente supportata e le distribuzioni pywin32 per Windows può facilitare la correzione degli script Python per GFI LanGuard. Alcuni IDE Python o interpreti utili all’editing e al debug degli script Python sono: PythonWin Winpdb SPE IDE - Python Editor IDLE e l’interprete Python incluso per impostazione predefinita insieme alla distribuzione Python. Gli script Python possono essere eseguiti e sottoposti a debug in un ambiente simile a GFI LanGuard, eseguendo gli script utilizzando il file lpy.py disponibile nella cartella degli script di GFI LanGuard: C:\ProgramData\GFI\LanGuard11\Scripts Esempio <Python25Folder>\python.exe "<ProductDataDir>\Scripts\lpy.py" <NameOfPythonScriptFileToTest> 3.5 Possibilità di riutilizzo dei codici e delle librerie Python Python consente di creare le librerie delle funzioni comunemente utilizzate all’interno degli script. Queste librerie raggruppano funzioni comuni e possono essere utilizzate più volte da molti script. Questa sezione contiene informazioni relative a: Creazione di una libreria Utilizzo delle librerie 3.5.1 Creazione di una libreria Creare un file di script Python che definisce le funzioni o gli oggetti Python. Copiare il file in <directory LanGuard principale>\Library, esempio: C:\Programmi\GFI\LanGuard 11 Agent GFI LanGuard 3 Script Python | 18 Esempio di file della libreria """ Salve mondo libreria Python. Copiare il file in <LanGuard InstallDir>\Library. """ def EchoString(text): """Stampa il testo specificato.""" GlobalFunctions.echo(text) print(text) 3.5.2 Utilizzo delle librerie Per utilizzare una libreria Python creata in precedenza, importarla utilizzando il meccanismo di importazione Python standard. Esempio di utilizzo della libreria in alto """ LibraryTester.py Richiede che il file EchoLibrary.py sia nella directory <LanGuard InstallDir>\Library. """ def main(): """Valori restituiti: * 0 - false, non riuscito * 1 - true, riuscito""" result = 0 from EchoLibrary import EchoString EchoString("Controllo di vulnerabilità riuscito.") result = 1 return(result) GFI LanGuard 3 Script Python | 19 4 Oggetti scripting Questo capitolo fornisce le informazioni sui diversi oggetti e funzioni supportati da GFI LanGuard Script Debugger che possono essere indirizzati dagli script. Argomenti del presente capitolo: 4.1 Oggetti Socket 20 4.2 Oggetti SNMP 28 4.3 Oggetti File 32 4.4 Oggetti Registro di sistema 41 4.5 Oggetti HTTP 46 4.6 Oggetti HTTPHeaders 59 4.7 Oggetti FTP 62 4.8 Oggetti Encode 79 4.1 Oggetti Socket L’oggetto Socket viene utilizzato per consentire la comunicazione con i server TCP e i socket UDP. Supporta varie funzionalità quali i timeout configurabili, le ricerche DNS e anche le ricerche DNS inverse. L’oggetto Socket gestisce inoltre vari tipi di dati nelle operazioni di invio e ricezione. Può gestire sia stringhe che dati binari non elaborati. Le stringhe vengono gestite utilizzando variabili di stringhe normali e i dati binari vengono gestiti utilizzando matrici di byte. La funzione di ricezione (denominata recv) accetta anche un parametro che indica a quale tipo di dati restituire. In questo modo l’utente può specificare se desidera ricevere i dati come stringa o binari. In questa sezione vengono fornite le informazioni sugli oggetti Socket seguenti: OpenTcp OpenUdp Close Recv Send SendTo SetTimeout DnsLookup ReverseDnsLookup 4.1.1 OpenTcp OpenTcp viene utilizzato per stabilire una connessione con un server remoto utilizzando TCP. Sintassi OpenTcp(ip, port) GFI LanGuard 4 Oggetti scripting | 20 Restituisce Oggetto Socket. Esempio Lo script visualizza il banner di un server ftp in esecuzione locale. Può funzionare con qualsiasi server ftp modificando il valore della variabile "ip": 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 'controllo per vedere la restituzione completata di Object strResponse = SocketObject.Recv(1024) echo(strResponse) SocketObject.Close End If End Function 4.1.2 OpenUdp OpenUdp viene utilizzato per stabilire una connessione con un server remoto utilizzando UDP. Sintassi OpenUdp() Restituisce Oggetto Socket. Esempio Lo script si connette con un server DNS, specificato dalla variabile IP ed esegue una query per www.gfi.com, quindi visualizza il risultato: 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 Oggetti scripting | 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) '^^^^^^^^^^ 'Questa parte è l’intestazione del pacchetto della nostra richiesta, include le informazioni come ad esempio i contrassegni '^^^^^^^^^^ 'Questa è la richiesta, www.gfi.com, tenere presente che '.' sono 'rappresentati come &H03 invece di &H2E '^^^^^^^^^^ 'Questa è l’intestazione End del nostro pacchetto Set SocketObject = Socket.OpenUdp() If Not SocketObject is Nothing Then 'controllo per vedere la restituzione completata di Object 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 viene utilizzato per liberare l’oggetto socket assegnato in precedenza. Sintassi Close Restituisce Nessun dato restituito. Esempio Lo script visualizza il banner di un server ftp in esecuzione locale. Può funzionare con qualsiasi server ftp modificando il valore della variabile "ip": Function Main Dim SocketObject As Object Dim ip As String GFI LanGuard 4 Oggetti scripting | 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 'controllo per vedere la restituzione completata di Object strResponse = SocketObject.Recv(1024) echo(strResponse) SocketObject.Close End If End Function 4.1.4 Recv Recv viene utilizzato per recuperare i dati da un socket (utilizzato per le trasmissioni TCP e UDP). Sintassi Recv(SizeInBytes, [DataType]) Ulteriori informazioni Il parametro SizeInBytes specifica quanto verrà restituito del buffer. Il parametro facoltativo “DataType” può essere utilizzato per specificare il formato in cui il buffer deve essere restituito. Se non viene specificato alcun elemento, il buffer viene analizzato e il parametro DataType corretto impostato di conseguenza. Le opzioni possibili per il parametro DataType sono le seguenti: 0: restituisce il buffer come matrice di byte (ideale per i dati non elaborati) 1: restituisce il buffer come stringa (ideale se si sa che il buffer è composto da testo non elaborato) 2: restituisce il buffer come stringa, converte i caratteri non stampabili in “.” Ideale se si sa che il buffer è mescolato tra testo normale e caratteri speciali ma quando si è interessati solo alla parte del testo normale. Restituisce Stringa o matrice di byte. Esempio Lo script visualizza il banner di un server ftp in esecuzione locale. Può funzionare con qualsiasi server ftp modificando il valore della variabile "ip": Function Main Dim SocketObject As Object Dim ip As String Dim port As String GFI LanGuard 4 Oggetti scripting | 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 'controllo per vedere la restituzione completata di Object strResponse = SocketObject.Recv(1024) echo(strResponse) SocketObject.Close End If End Function 4.1.5 Send Send viene utilizzato per inviare i dati al socket corrente aperto tramite una connessione TCP. Sintassi Send (data, [SizeInBytes]) Restituisce La quantità effettiva di byte inviati. Ulteriori informazioni La funzione Send può essere utilizzata solo con un oggetto Socket aperto su una connessione TCP. Per inviare i dati tramite una connessione UDP, vedere altri dettagli sulla funzione SendTo nel documento. La funzione Send accetta un parametro facoltativo (SizeInBytes) che specifica la quantità di buffer passata al campo dei dati che verrà effettivamente inviata. Se questo parametro facoltativo viene omesso, viene calcolata automaticamente la dimensione. Esempio Lo Script visualizza la pagina predefinita in html non elaborato di un server web eseguito localmente. Lo script può essere utilizzato per funzionare con qualsiasi server web modificando semplicemente il valore della variabile "ip": 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" Porta = "80" req = "GET / HTTP/1.0" GFI LanGuard 4 Oggetti scripting | 24 'ritorno a capo e avanzamento riga cr = Chr(13) + Chr(10) req = CStr(req +cr +cr) Socket.SetTimeout 5000,5000 Set SocketObject = Socket.OpenTcp(Ip,Port) 'controllo per vedere la restituzione completata di Object 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 viene utilizzato per inviare i dati al socket corrente aperto tramite una connessione UDP. Sintassi SendTo (ip, port, data, [SizeInBytes]) Restituisce La quantità di byte effettiva inviati. Ulteriori informazioni La funzione SendTo può essere utilizzata solo con un oggetto Socket aperto su una connessione UDP, per inviare i dati tramite una connessione TCP controllare la funzione Send descritta in precedenza nel documento. La funzione SendTo accetta un parametro facoltativo (SizeInBytes) che specifica la quantità di buffer passata al campo dei dati che verrà effettivamente inviata. Se questo parametro facoltativo viene omesso, viene calcolata automaticamente la dimensione. Esempio Lo script si connette con un server DNS, specificato dalla variabile IP ed esegue una query per www.gfi.com, quindi visualizza il risultato: Function Main Dim SocketObject As Object Dim ip As String Dim port As String Dim rawdata As Variant Dim Response As Variant GFI LanGuard 4 Oggetti scripting | 25 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 'controllo per vedere la restituzione completata di Object 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 Il timeout predefinito per l’invio/la ricezione dei dati è 2 secondi. SetTimeout viene utilizzato per impostare un timeout diverso sia per inviare che per ricevere i dati. Sintassi SetTimeout(SendTimeout, RecieveTimeout) Restituisce Nessun dato restituito. Ulteriori informazioni SetTimeout deve essere impostato prima di impostare l’oggetto che verrà utilizzato per l’invio e la ricezione. I parametri passati per i timeout sono espressi in millisecondi. Se viene passato -1 come un valore, verrà utilizzato il valore impostato correntemente. Esempio Lo script visualizza il banner di un server ftp in esecuzione locale. Può funzionare con qualsiasi server ftp modificando il valore della variabile "ip": Function Main Dim SocketObject As Object Dim ip As String Dim port As String Dim strResponse As String GFI LanGuard 4 Oggetti scripting | 26 Ip = "127.0.0.1" Port = "21" Socket.SetTimeout 5000,5000 Set SocketObject = Socket.OpenTcp(Ip,Port) If Not SocketObject is Nothing Then 'controllo per vedere la restituzione completata di Object strResponse = SocketObject.Recv(1024) echo(strResponse) SocketObject.Close End If End Function 4.1.8 DnsLookup DnsLookup viene utilizzato per risolvere i nomi host negli indirizzi IP. Questa funzione viene utilizzata principalmente quando si desidera connettersi ai server e non si conosce l’IP relativo. Sintassi DnsLookup(hostname) Restituisce String (IP Address). Esempio Ricerca DNS molto semplice e invertita: Function Main Dim SocketObject As Object Dim ServerName As String Dim IP As String Dim ResolvedName As String 'Ritorno a capo e avanzamento riga cr = Chr(13) + Chr(10) ServerName = "whois.networksolutions.com" echo("Risoluzione"+cr) Socket.SetTimeout 5000,5000 ip = socket.DnsLookup(ServerName) echo(ServerName + " risolve nell’indirizzo IP:"+cr ) echo(ip +cr) ResolvedName = Socket.ReverseDnsLookup(ip) echo(cr) echo("Indirizzo IP "+ip+ " risolve in "+cr) echo(ResolvedName+cr) GFI LanGuard 4 Oggetti scripting | 27 End Function 4.1.9 ReverseDnsLookup ReverseDnsLookup viene utilizzato per risolvere gli indirizzi IP in nomi host. Sintassi ReverseDnsLookup(IP) Restituisce Stringa contenente il nome host restituito. Esempio Ricerca DNS molto semplice e invertita: Function Main Dim SocketObject As Object Dim ServerName As String Dim IP As String Dim ResolvedName As String 'Ritorno a capo e avanzamento riga cr = Chr(13) + Chr(10) ServerName = "whois.networksolutions.com" echo("Risoluzione"+cr) Socket.SetTimeout 5000,5000 ip = socket.DnsLookup(ServerName) echo(ServerName + " risolve nell’indirizzo IP:"+cr ) echo(ip +cr) ResolvedName = Socket.ReverseDnsLookup(ip) echo(cr) echo("Indirizzo IP "+ip+ " risolve in "+cr) echo(ResolvedName+cr) End Function 4.2 Oggetti SNMP L’oggetto SNMP consente agli utenti di connettersi all’SNMP per la query e l’impostazione dei valori. L’oggetto consente anche l’enumerazione di OID (Object Identifiers). SNMP viene generalmente utilizzato per recuperare le informazioni del sistema su un servizio o un dispositivo. Vari dispositivi presentano inoltre i server SNMP. Se si utilizza pertanto l’oggetto, è possibile eseguire la query di varie proprietà di questi dispositivi e dedurre possibili problemi di sicurezza/debolezze/configurazioni errate per i dispositivi. In questa sezione vengono fornite le informazioni sugli oggetti SNMP seguenti: GFI LanGuard 4 Oggetti scripting | 28 Connect Get GetNext Set Close 4.2.1 Connect Connect viene utilizzato per stabilire una connessione con un server remoto e restituirgli un oggetto SNMP. Sintassi Connect(ip, community_string) Restituisce Oggetto SNMP. Esempio Client SNMP molto semplice che recupera SysName da un computer con un server SNMP installato: Function Main Dim snmp1 As Object 'Ritorno a capo e avanzamento riga cr = Chr(13) + Chr(10) Set snmp1 = SNMP.Connect("127.0.0.1", "pubblico") 'OID di sysName Val1 = "1.3.6.1.2.1.1.5.0" 'OID dell’Object dei sistemi root = "1.3.6.1.2.1.1." snmp1.Get Val1 echo "Oid: '"+Val1 + "'"+cr echo "Valore: '"+snmp1.Get(Val1)+"'"+cr snmp1.Close End Function 4.2.2 Get Get viene utilizzato per recuperare la stringa corrispondente nell’OID specificato. Sintassi Get (oid) Restituisce Stringa. Esempio Client SNMP molto semplice che recupera SysName da un computer con un server SNMP installato: GFI LanGuard 4 Oggetti scripting | 29 Function Main Dim snmp1 As Object 'Ritorno a capo e avanzamento riga cr = Chr(13) + Chr(10) Set snmp1 = SNMP.Connect("127.0.0.1", "pubblico") 'OID di sysName Val1 = "1.3.6.1.2.1.1.5.0" 'OID dell’Object dei sistemi root = "1.3.6.1.2.1.1." snmp1.Get Val1 echo "Oid: '"+Val1 + "'"+cr echo "Valore: '"+snmp1.Get(Val1)+"'"+cr snmp1.Close End Function 4.2.3 GetNext GetNext viene utilizzato per recuperare la stringa corrispondente nell’OID specificato. Sintassi GetNext (oid) Restituisce Stringa. Esempio Client SNMP molto semplice che recupera tutte le stringhe relative all’oggetto sistema da un computer in cui è installato un server SNMP. Le informazioni non elaborate, ad esempio, tempo di attività OID 1.3.5.1.2.1.1.3.0, sono visualizzate come centinaia di un secondo: Function Main Dim snmp1 As Object 'Ritorno a capo e avanzamento riga cr = Chr(13) + Chr(10) Set snmp1 = SNMP.Connect("127.0.0.1", "pubblico") 'OID di sysName Val1 = "1.3.6.1.2.1.1.1.0" 'OID dell’Object dei sistemi root = "1.3.6.1.2.1.1." 'snmp1.Get Val1 While Val1 <> ""' echo "Oid: '"+Val1 + "'"+cr echo "Valore: '"+snmp1.Get(Val1)+"'"+cr Val1 = snmp1.GetNext(Val1) GFI LanGuard 4 Oggetti scripting | 30 If InStr(Val1, root) <> 1 Then Val1 ="" Wend snmp1.Close End Function 4.2.4 Set Set viene utilizzato per impostare il valore di un OID specificato. Sintassi Set (oid, String) Restituisce True se riuscito, altrimenti false. Esempio Il client SNMP semplice che imposta la sysLocation di un computer in cui è installato un server SNMP su “Malta”. Tenere presente che per impostazione predefinita lo script avrà sempre esito negativo poiché in genere la comunità pubblica è impostata sulla sola lettura: Function Main Dim snmp1 As Object 'Ritorno a capo e avanzamento riga cr = Chr(13) + Chr(10) Set snmp1 = SNMP.Connect("127.0.0.1", "pubblico") 'OID di sysName Val1 = "1.3.6.1.2.1.1.6.0" root = "1.3.6.1.2.1.1."'OID dell’oggetto sistemi If snmp1.Set(Val1, "Malta") = true Then echo("Valore impostato correttamente") Else echo("Impossibile impostare valore") End If snmp1.Close End Function 4.2.5 Close Close viene utilizzato per chiudere una sessione SNMP aperta. Sintassi Close Restituisce Nessun dato restituito. GFI LanGuard 4 Oggetti scripting | 31 Esempio Client SNMP molto semplice che recupera SysName da un computer con un server SNMP installato: Function Main Dim snmp1 As Object 'Ritorno a capo e avanzamento riga cr = Chr(13) + Chr(10) Set snmp1 = SNMP.Connect("127.0.0.1", "pubblico") 'OID di sysName Val1 = "1.3.6.1.2.1.1.5.0" 'OID dell’Object dei sistemi root = "1.3.6.1.2.1.1." snmp1.Get Val1 echo "Oid: '"+Val1 + "'"+cr echo "Valore: '"+snmp1.Get(Val1)+"'"+cr snmp1.Close End Function 4.3 Oggetti File L’oggetto File consente all’utente di aprire i file sia in remoto che localmente e di eseguire le operazioni di lettura e scrittura su di essi. I file possono essere aperti in varie modalità che vanno dalla creazione di un nuovo file all’apertura di uno esistente e all’eliminazione del contenuto relativo. I file possono inoltre essere aperti per la lettura, la scrittura e solo in modalità query (ovvero è possibile controllare la dimensione dei file e gli attributi senza poter scrivere o leggere dal file). Oltre alle operazioni di scrittura e lettura l’oggetto File supporta anche le comuni operazioni eseguite sui file quali la verifica della dimensione del file, la ricerca e gli attributi. Questa sezione contiene informazioni relative agli oggetti File seguenti: Connect Open Close Read Write WriteLine Seek Elimina Size FileVersion ProductVersion Attributi GFI LanGuard 4 Oggetti scripting | 32 4.3.1 Connect Connect viene utilizzato per connettersi a un computer (locale o remoto) su cui si desidera aprire i file. Sintassi Connect (IP or NetBIOS name) Restituisce Oggetto File. Esempio Questo script apre un file (test.txt) sull’unità C locale e scrive due righe in esso: 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("Salve, questo è un file di testo") textfile.WriteLine("Creato con lo script GFI LanGuard") textfile.Close End If End Function 4.3.2 Open Apre un file per la lettura o la scrittura. Sintassi Open (Filename, mode, disposition) Restituisce True se l’operazione Open ha esito positivo, altrimenti False. Ulteriori informazioni Modalità: 0: il file viene aperto in modalità di accesso query, è possibile eseguire una query degli attributi ma non è possibile accedere al file GENERIC_READ: apre il file per la lettura GENERIC_WRITE: apre il file per la scrittura GFI LanGuard 4 Oggetti scripting | 33 Disposizione CREATE_NEW: crea un nuovo file. La funzione non riesce se il file specificato esiste già. CREATE_ALWAYS: crea un nuovo file. La funzione sovrascrive il file, se esistente. OPEN_EXISTING: apre il file. La funzione non riesce se il file non esiste. OPEN_ALWAYS: apre il file, se esistente. Se il file non esiste, la funzione lo crea. TRUNCATE_EXISTING: apre il file. Una volta aperto, il file viene troncato in modo che la dimensione equivalga a zero byte. Esempio Questo script apre un file (test.txt) sull’unità C locale e scrive due righe in esso: 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("Salve, questo è un file di testo") textfile.WriteLine("Creato con lo script GFI LanGuard") textfile.Close End If End Function 4.3.3 Close Close viene utilizzato per chiudere un’istanza di un file aperto. Sintassi Close Restituisce Nessun dato restituito. Esempio Questo script apre un file (test.txt) sull’unità C locale e scrive due righe in esso: 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("Salve, questo è un file di testo") textfile.WriteLine("Creato con lo script GFI LanGuard") textfile.Close End If End Function GFI LanGuard 4 Oggetti scripting | 34 4.3.4 Read Read viene utilizzato per leggere una stringa di lunghezza (x) da un file di testo. Sintassi Read(number_of_bytes, [DataType]) Restituisce Stringa. Ulteriori informazioni DataType è un parametro facoltativo. Se omesso, il tipo di dati corretto verrà rilevato automaticamente dal sistema. Le opzioni possibili per il parametro DataType sono le seguenti: 0: restituisce il buffer come matrice di byte (ideale per i dati non elaborati). 1: restituisce il buffer come stringa (ideale se si sa che il buffer è composto da testo non elaborato) 2: restituisce il buffer come stringa, i caratteri non stampabili vengono ignorati. È ideale se si sa che il buffer è mescolato tra testo normale e caratteri speciali ma se si è interessati solo alla parte del testo normale. Esempio Lo script visualizza il contenuto del file host: 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 End If End Function 4.3.5 Write Write viene utilizzato per scrivere una stringa in un file senza aggiungere un CRLF (ritorno a capo avanzamento riga) alla fine della stringa fornita. Sintassi Write(string, [number_of_bytes]) Restituisce Nessun dato restituito. Ulteriori informazioni Number_of_bytes è un parametro facoltativo. Se omesso, il suo valore verrà calcolato automaticamente in base alla dimensione della stringa passata. GFI LanGuard 4 Oggetti scripting | 35 Esempio Questo script apre un file (test.txt) sull’unità C locale e scrive due righe in esso: 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("Salve, questo è un file di testo") textfile.WriteLine("Creato con lo script GFI LanGuard") textfile.Close End If End Function 4.3.6 WriteLine WriteLine viene utilizzato per scrivere una stringa in un file senza aggiungere un CRLF (ritorno a capo avanzamento riga) alla fine della stringa fornita. Sintassi WriteLine(string) Restituisce Valore booleano: True (diverso da zero) se l’operazione Write è riuscita, altrimenti False (zero). Esempio Questo script apre un file (test.txt) sull’unità C locale e scrive due righe in esso: 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("Salve, questo è un file di testo") textfile.WriteLine("Creato con lo script GFI LanGuard") textfile.Close End If End Function 4.3.7 Seek Seek viene utilizzato per gli spostamenti in una posizione alternativa del file (da cui è possibile leggere o scrivere). Sintassi Seek(Distance, Method) Restituisce Posizione corrente nel file. GFI LanGuard 4 Oggetti scripting | 36 Ulteriori informazioni Distance è la misura dei byte necessari per spostare il cursore. Il metodo può essere uno dei seguenti: 0: sposta il cursore alla distanza specificata a partire dall’inizio del file 1: sposta il cursore alla distanza specificata a partire dalla posizione corrente del file 2: sposta il cursore alla distanza specificata a partire dalla fine del file. Esempio Lo script visualizza il contenuto del file host dopo lo spostamento del cursore di 50 caratteri nel file: 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 Elimina Delete viene utilizzato per eliminare i file dal disco rigido. Sintassi Delete (path to file) Ulteriori informazioni Prima di poter eliminare il file, è necessario essere connessi al computer. Nota Non aprire un file che si sta eliminando. Altrimenti il file si blocca e l’operazione Delete ha esito negativo. Restituisce True se l’operazione Delete ha esito positivo, altrimenti False. Esempio Questo script elimina il file (test.txt) sull’unità C locale, nel caso esista: Function Main Dim textfile As Object Set textfile = File.Connect("127.0.0.1") GFI LanGuard 4 Oggetti scripting | 37 If textfile.Delete("c:\test.txt") = true Then echo("File eliminato correttamente") else echo("Eliminazione non riuscita") End If End Function 4.3.9 Size Size restituisce la dimensione di un file. Sintassi Size ([highpart]) Restituisce Dimensione del file (la proprietà della parte bassa della dimensione del file). Ulteriori informazioni La dimensione di un file si compone di due parti: una alta e una bassa. Quella che viene restituita dalla funzione è la parte bassa. La parte alta è un parametro facoltativo che consente di ottenere la proprietà della dimensione della parte alta di un file, se necessario. Esempio Visualizza la dimensione del file host: Function Main Dim textfile As Object Dim size As Integer Set textfile = File.Connect("127.0.0.1") If textfile.Open("c:\windows\system32\drivers\etc\hosts", GENERIC_ READ, Open_Existing) Then size = Textfile.Size echo("il file host ha una dimensione file di : " & size & " byte") textfile.Close End If End Function 4.3.10 FileVersion FileVersion restituisce la versione di un file a cui siano state assegnate le proprietà necessarie. Sintassi FileVersion (String) Restituisce Versione del file se esistono le informazioni relative (restituisce una stringa). GFI LanGuard 4 Oggetti scripting | 38 Esempio Visualizza la versione del file di 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("La versione file di Calc.exe è : " & ver) textfile.Close End If End Function 4.3.11 ProductVersion ProductVersion restituisce la proprietà della versione del prodotto di un file, se esistono le informazioni. Sintassi ProductVersion Restituisce Stringa. Esempio Visualizza la versione del prodotto di 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.ProductVersion echo("La versione del prodotto di Calc.exe è : " & ver) textfile.Close End If End Function 4.3.12 Attributi Restituisce gli attributi di un file. Sintassi Attributi GFI LanGuard 4 Oggetti scripting | 39 Restituisce Numero intero: con codificati gli attributi del file. Ulteriori informazioni Valori attributi: Sola lettura: il file è impostato come di sola lettura. Nascosto: il file o la directory sono nascosti. Sistema: il file o la directory sono un file o una directory del sistema operativo. 16- Directory: questo elemento è una directory. 32- Archivio: il file o la directory sono un file o una directory dell’archivio. 64- Dispositivo: riservato, non può essere utilizzato. 128 - Normale: il file non ha attributi. 256 - File temporaneo: il file è contrassegnato come temporaneo. 512 - File sparse: al file è assegnato l’attributo sparse. 1024 - Reparse point: al file o alla directory è associato un reparse point. 2048 - Compresso: il file o la directory sono compressi. 4096 - Non in linea: il file è stato spostato in un archivio non in linea e i dati non sono al momento disponibili. 8192 - Nessun indice: il file non verrà indicizzato. 16384 - Crittografato: il file è crittografato. Nota Se nel file è presente una combinazione di questi attributi, ogni valore si sommerà all’altro. Ad esempio: un archivio che è di sola lettura e nascosto restituirà un valore di 35 (32 per l’archivio, 1 per la sola lettura e 2 per nascosto). Esempio Visualizza gli attributi di 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("Il valore dell’attributo Calc.exe è : " & att) textfile.Close End If GFI LanGuard 4 Oggetti scripting | 40 End Function 4.4 Oggetti Registro di sistema L’oggetto Registro di sistema contiene funzioni designate a consentire agli utenti di recuperare e impostare i dati nel Registro di sistema sia localmente che in remoto. L’oggetto supporta tutti i diversi tipi trovati nel Registro di sistema: (reg_dword, reg_sz,,reg, multi_sz, reg_binary). L’oggetto fornisce inoltre le funzioni per l’enumerazione e l’eliminazione delle chiavi e dei valori. In questa sezione vengono fornite le informazioni sugli oggetti Registro di sistema seguenti: Connect Read Write GetFirstValue GetNextValue GetFirstKey GetNextKey DeleteValue DeleteKey 4.4.1 Connect Utilizzato per creare una connessione al Registro di sistema del computer specificato. Sintassi Connect (IP or NetBIOS name) Restituisce Oggetto Registro di sistema. Esempio Lo script ottiene la versione di Internet Explorer leggendola direttamente dal Registro di sistema: 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 "Versione IE è " + ie_version End Function 4.4.2 Read Read è una funzione utilizzata per leggere i valori delle chiavi del Registro di sistema. Sintassi Read(Path, ValueName) GFI LanGuard 4 Oggetti scripting | 41 Restituisce Long: se il valore del Registro di sistema è REG_DWORD Stringa: se il valore del Registro di sistema è REG_SZ Matrice di stringhe: se il valore del Registro di sistema è REG_MULTI_SZ Matrice di byte: se il valore del Registro di sistema è REG_BINARY Esempio Lo script ottiene la versione di Internet Explorer leggendola direttamente dal Registro di sistema: 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 "Versione IE è " + ie_version End Function 4.4.3 Write Write è una funzione utilizzata per scrivere i valori nelle chiavi del Registro di sistema. Sintassi Write(Path, ValueName, Value) Restituisce Nessun dato restituito. Ulteriori informazioni Utilizzare la dichiarazione seguente per ottenere il tipo di valore corretto: Long: se il valore del Registro di sistema è REG_DWORD Stringa: se il valore del Registro di sistema è REG_SZ Matrice di stringhe: se il valore del Registro di sistema è REG_MULTI_SZ Le matrici devono essere dichiarate come varianti e quindi ad esse deve essere assegnato un valore utilizzando la funzione array() . Esempio: Dim test as variant Test = array(10,2,10) Se la chiave non esiste, verrà creata. Esempio Lo script scrive il valore "test" nella chiave seguente: SOFTWARE\Microsoft\testkey\testsubkey: Function Main Dim Ro As Object GFI LanGuard 4 Oggetti scripting | 42 Dim test As String test = "valoreprova" Set Ro = Registry.Connect("127.0.0.1") ro.write "SOFTWARE\Microsoft\testkey", "testsubkey",test End Function 4.4.4 GetFirstValue GetFirstValue è una funzione con lo scopo di avviare l’enumerazione di un percorso del Registro di sistema. Sintassi GetFirstValue(Path, ValueName) Restituisce Long: se il valore del Registro di sistema è REG_DWORD Stringa: se il valore del Registro di sistema è REG_SZ Matrice di stringhe: se il valore del Registro di sistema è REG_MULTI_SZ Matrice di byte: se il valore del Registro di sistema è REG_BINARY Ulteriori informazioni ValueName deve essere una variabile della variante tipo. GetFirstValue restituirà il nome dell’attributo che contiene il valore restituito all’interno della variabile ValueName. Esempio Gli script elencano tutti i programmi che vengono eseguiti all’avvio: 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 "NomeValore: " & valueName & " = " & value & cr Value = ro.GetNextValue(valueName) Wend End Function 4.4.5 GetNextValue GetNextValue è una funzione utilizzata nel processo di enumerazione dei percorsi del Registro di sistema. Restituirà valori successivi sulla sequenza avviata da GetFirstValue. Sintassi GetNextValue(ValueName) GFI LanGuard 4 Oggetti scripting | 43 Restituisce Long: se il valore del Registro di sistema è REG_DWORD Stringa: se il valore del Registro di sistema è REG_SZ Matrice di stringhe: se il valore del Registro di sistema è REG_MULTI_SZ Matrice di byte: se il valore del Registro di sistema è REG_BINARY Ulteriori informazioni ValueName deve essere una variabile della variante tipo. GetNextValue restituirà il nome dell’attributo che conteneva il valore restituito all’interno della variabile ValueName. Esempio Gli script elencano tutti i programmi che vengono eseguiti all’avvio: 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 "NomeValore: " & valueName & " = " & value & cr Value = ro.GetNextValue(valueName) Wend End Function 4.4.6 GetFirstKey Utilizzato per avviare l’enumerazione delle chiavi che risiedono nel percorso del Registro di sistema. Sintassi GetFirstKey(Path) Restituisce Stringa: nome della prima chiave. Esempio Gli script elencano tutti i codici sotto 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 <> "" GFI LanGuard 4 Oggetti scripting | 44 Echo "Nomechiave = " & value & cr Value = ro.GetNextKey Wend End Function 4.4.7 GetNextKey GetNextKey viene utilizzato per continuare l’enumerazione delle chiavi avviata dalla funzione GetFirstKey. Sintassi GetNextKey Restituisce Stringa : contenente il nome della chiave. Esempio Gli script elencano tutti i codici sotto 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 "Nomechiave = " & value & cr Value = ro.GetNextKey Wend End Function 4.4.8 DeleteValue DeleteValue è una funzione utilizzata per eliminare i valori dalle chiavi del Registro di sistema. Sintassi DeleteValue(Path, ValueName) Restituisce 0 – con eliminazione riuscita, numero errore se non riesce. Esempio Lo script elimina il valore del Registro di sistema creato nell’esempio di scrittura in alto: Function Main Dim Ro As Object Dim result As Integer Set Ro = Registry.Connect("127.0.0.1") GFI LanGuard 4 Oggetti scripting | 45 result = ro.DeleteValue("SOFTWARE\Microsoft\testkey", "testsubkey") If result = 0 Then Echo "Valore eliminato correttamente" Else Echo "Eliminazione valore non riuscita, codice di errore: " & result End If End Function 4.4.9 DeleteKey DeleteKey è una funzione utilizzata per eliminare le chiavi del Registro di sistema. 4.4.10 Sintassi DeleteKey(Path) Restituisce 0 – con eliminazione riuscita, numero errore se non riesce. Esempio Lo script elimina una chiave del Registro di sistema: Function Main Dim Ro As Object Dim result As Integer Set Ro = Registry.Connect("127.0.0.1") result = ro.DeleteKey("SOFTWARE\Microsoft\testkey") If result = 0 Then Echo "Valore eliminato correttamente" Else Echo "Eliminazione valore non riuscita, codice di errore: " & result End If End Function 4.5 Oggetti HTTP Questo oggetto contiene numerose funzioni che semplificano all’utente l’elaborazione delle richieste Web. Questo oggetto fornisce supporto per una moltitudine di scenari inclusa l’autenticazione, i proxy, l’autenticazione proxy e la manipolazione delle intestazioni. Entrambi i metodi di recupero get e post sono supportati. L’oggetto supporta inoltre l’impostazione delle intestazioni e dei verbi personalizzati. Ciascuna richiesta non solo restituisce le intestazioni e il corpo di una particolare richiesta ma anche il codice dei risultati dell’operazione. Ciò significa che se lo script ha lo scopo di verificare l’esistenza o meno di una pagina, l’utente non dovrà analizzare la risposta ma controllare soltanto il codice restituito, ad esempio se il codice ha restituito 404 significa che la pagina richiesta non esiste. GFI LanGuard 4 Oggetti scripting | 46 In questa sezione vengono fornite le informazioni sugli oggetti HTTP seguenti: Connect GetURL PostURL SendRequest AddHeader Verb HTTPVersion IP Porta RawResponseHeaders Body Authentication ProxyUser ProxyPassword HttpUser HttpPassword ResponseHeaders 4.5.1 Connect Connect viene utilizzato per impostare il nome host o l’indirizzo IP e la porta del server HTTP nell’oggetto. Sintassi HTTP.Connect (STRING hostname, LONG port) Dove: Hostname: può essere l’indirizzo IP o il nome host (esempio: 192.168.11.11 o www.gfi.com) Porta: un numero intero compreso tra 1 e 65535 Restituisce Oggetto HTTP. Esempio Lo script eseguirà una richiesta GET e stamperà il codice restituito: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) GFI LanGuard 4 Oggetti scripting | 47 'impostazione del tipo di richiesta HTTPobj.GetURL("/") ' passare attraverso il proxy con autenticazione automatica ' L’autenticazione deve essere impostata su 1 HTTPobj.Authentication = 1 ' Invio della richiesta GET HTTPResponse = HTTPobj.SendRequest () echo "Risultato: " + cstr(HTTPResponse) End Function 4.5.2 GetURL GetUrl viene utilizzato per inizializzare una richiesta GET a un server HTTP. Le richieste GET vengono utilizzate per recuperare i documenti sul server HTTP. Sintassi GetUrl (STRING document) Dove: Document: una stringa (esempio: index.html) Restituisce Nessun dato restituito. Esempio Gli script elencano tutti i codici sotto 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 "Nomechiave = " & value & cr Value = ro.GetNextKey Wend End Function 4.5.3 PostURL PostUrl viene utilizzato per inizializzare una richiesta POST a un server HTTP. Le richieste POST vengono utilizzate per inviare i dati a un server HTTP. Sintassi PostUrl (STRING document, STRING data) Dove: GFI LanGuard 4 Oggetti scripting | 48 Document è una stringa (esempio: index.html) Data è una stringa (esempio: value1=data1) Restituisce Nessun dato restituito. Esempio Lo script eseguirà una richiesta POST e stamperà il codice restituito: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.PostURL "/", "prova" 'passaggio tramite proxy con autenticazione automatica 'l’autenticazione deve essere impostata su 1 HTTPobj.Authentication = 1 'Invio richiesta POST HTTPResponse = HTTPobj.SendRequest () echo "Risultato: " + cstr(HTTPResponse) End Function 4.5.4 SendRequest SendRequest viene utilizzato per inviare la richiesta HTTP avviata. Ad esempio, se in precedenza è stato utilizzato il metodo GetURL, verrà inviata una richiesta GET. Sintassi SendRequest() Valore restituito Codice risposta HTTP. Esempio Lo script eseguirà una richiesta GET e stamperà il codice restituito: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") 'passaggio tramite proxy con autenticazione automatica GFI LanGuard 4 Oggetti scripting | 49 'l’autenticazione deve essere impostata su 1 HTTPobj.Authentication = 1 'Invio della richiesta GET HTTPResponse = HTTPobj.SendRequest() echo "Risultato: " + cstr(HTTPResponse) End Function 4.5.5 AddHeader AddHeader modifica una richiesta avviata per aggiungere, eliminare o modificare un’intestazione esistente. Sintassi AddHeader (STRING name, STRING value) Dove: Name è una stringa (esempio: Content-Type). Se il nome esiste già, il valore del nome verrà sovrascritto dal valore specificato. Value è una stringa (esempio: text/html). Se il valore è vuoto, l’intestazione verrà eliminata, se esistente. Valore restituito Nessun dato restituito. Esempio Lo script modificherà alcune intestazioni tentando di avviare un attacco di scripting inter-sito sui parser del file di registro: Function Main Dim HTTPObj As Object Dim headers As Variant ip = "www.gfi.com" port = 80 cr = Chr(13) + Chr(10) XSSTest = "<script>alert('Il nuovo GFI LanGuard è dotato del rilevamento di script inter-sito')</script>" Set HTTPobj = HTTP.Connect (ip,port) 'intestazioni da provare headers = Array ( "Host", "Agente utente", "Accettazione", "XHeader1" , "X-Proxy", "Cookie" ) HTTPobj.GetURL("/") HTTPobj.Authentication = 1 'un ciclo per ciascuna intestazione che può essere utilizzata 'inserimento firma XSS. Invia una richiesta ogni volta For a = LBound(headers) To UBound(headers) GFI LanGuard 4 Oggetti scripting | 50 HTTPobj.ClearRequestHeaders HTTPobj.AddHeader headers(a), XSSTest 'Invio della richiesta GET con intestazioni personalizzate HTTPResponse = HTTPobj.SendRequest () echo CStr(a) + " risultato: " + CStr(HTTPResponse)+cr Next End Function 4.5.6 ClearRequestHeaders Cancella tutte le intestazioni precedentemente impostate con il metodo AddHeader. Sintassi ClearRequestHeaders Valore restituito Nessun dato restituito. Esempio Lo script modificherà alcune intestazioni tentando di avviare un attacco di scripting inter-sito sui parser del file di registro: Function Main Dim HTTPObj As Object Dim headers As Variant ip = "www.gfi.com" port = 80 cr = Chr(13) + Chr(10) XSSTest = "<script>alert('Il nuovo GFI LanGuard è dotato del rilevamento di script inter-sito')</script>" Set HTTPobj = HTTP.Connect (ip,port) 'intestazioni da provare headers = Array ( "Host", "Agente utente", "Accettazione", "XHeader1" , "X-Proxy", "Cookie" ) HTTPobj.GetURL("/") HTTPobj.Authentication = 1 'un ciclo per ciascuna intestazione che può essere utilizzata 'inserimento firma XSS. Invia una richiesta ogni volta For a = LBound(headers) To UBound(headers) HTTPobj.ClearRequestHeaders HTTPobj.AddHeader headers(a), XSSTest 'Invio della richiesta GET con intestazioni personalizzate HTTPResponse = HTTPobj.SendRequest () echo CStr(a) + " risultato: " + CStr(HTTPResponse)+cr GFI LanGuard 4 Oggetti scripting | 51 Next End Function 4.5.7 Verb Determina il metodo di richiesta HTTP. Questa proprietà è impostata implicitamente quando vengono utilizzati i metodi GetURL e PostURL. Sintassi HTTPObject.Verb Dove: Verb è una stringa (esempio: Get) Esempio Lo script invierà una richiesta http OPTIONS: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.Authentication = 1 HTTPobj.Verb = "OPTIONS" 'Invio della richiesta OPTIONS con intestazioni personalizzate HTTPResponse = HTTPobj.SendRequest () echo HTTPobj.RawResponseHeaders End Function 4.5.8 HTTPVersion Determina la versione HTTP. Se non impostato, HTTPVersion sarà “HTTP/1.1” Sintassi HTTPObject.HTTPVersion Dove: HTTPVersion è una stringa (esempio: HTTP/1.1) Esempio Lo script invierà una richiesta HTTP/1.0: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) GFI LanGuard 4 Oggetti scripting | 52 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.Authentication = 1 HTTPobj.HTTPVersion = "HTTP/1.0" 'Invio della richiesta GET con intestazioni personalizzate HTTPResponse = HTTPobj.SendRequest () echo HTTPobj.RawResponseHeaders End Function 4.5.9 IP Utilizzato per impostare o recuperare l’indirizzo IP o il nome host. Sintassi HTTPObject.IP Dove: IP è una stringa (lettura/scrittura) Esempio Lo script utilizzerà di nuovo lo stesso oggetto per connettersi a un altro host e inviare la stessa richiesta: 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) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") 'passaggio tramite proxy con autenticazione automatica 'l’autenticazione deve essere impostata su 1 HTTPobj.Authentication = 1 'Invio della richiesta GET HTTPResponse1 = HTTPobj.SendRequest () HTTPobj.IP = ip2 HTTPResponse2 = HTTPobj.SendRequest () echo "Risultato: " + CStr(HTTPResponse1)+cr echo "Risultato: " + CStr(HTTPResponse2)+cr End Function 4.5.10 Porta Imposta o recupera la porta del server HTTP a cui connettersi. GFI LanGuard 4 Oggetti scripting | 53 Sintassi HTTPObject.Port Dove: Port è una stringa (lettura/scrittura) Esempio Lo script utilizzerà di nuovo lo stesso oggetto per connettersi a un’altra porta e inviare la stessa richiesta: Function Main Dim HTTPObj as Object ip = "127.0.0.1" port1 = 80 port2 = 81 cr = Chr(13) + Chr(10) Set HTTPobj = HTTP.Connect (ip,port1) ' Impostazione del tipo di richiesta HTTPobj.GetURL("/") 'passaggio tramite proxy con autenticazione automatica 'l’autenticazione deve essere impostata su 1 HTTPobj.Authentication = 1 'Invio della richiesta GET HTTPResponse1 = HTTPobj.SendRequest () HTTPobj.PORT = port2 HTTPResponse2 = HTTPobj.SendRequest () echo "Risultato: " + cstr(HTTPResponse1)+cr echo "Risultato: " + cstr(HTTPResponse2)+cr End Function 4.5.11 RawResponseHeaders Contiene tutte le intestazioni nella risposta HTTP. Ciascuna intestazione è separata da una coppia CR/LF. Sintassi HTTPObject.RawResponseHeaders Dove: RawResponseHeaders è una stringa (lettura) Esempio Lo script invierà una richiesta http OPTIONS: Function Main Dim HTTPObj as Object GFI LanGuard 4 Oggetti scripting | 54 ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.Authentication = 1 HTTPobj.Verb = "OPTIONS" 'Invio della richiesta OPTIONS con intestazioni personalizzate HTTPResponse = HTTPobj.SendRequest () echo HTTPobj.RawResponseHeaders End Function 4.5.12 Body Contiene il corpo della risposta. Sintassi HTTPObject.Body Body è una stringa (lettura) Esempio Lo script eseguirà una richiesta GET e stamperà il corpo: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") 'passaggio tramite proxy con autenticazione automatica 'l’autenticazione deve essere impostata su 1 HTTPobj.Authentication = 1 'Invio della richiesta GET HTTPResponse = HTTPobj.SendRequest () echo HTTPobj.Body End Function Authentication Abilita o disabilita l’autenticazione proxy e HTTP. L’autenticazione è implicitamente impostata su TRUE se ProxyUser, ProxyPassword, HttpUser e HttpPassword sono impostati. Sintassi HTTPObject.Authentication GFI LanGuard 4 Oggetti scripting | 55 Dove: Authentication è un valore BOOLEANO (lettura/scrittura) Esempio Lo script eseguirà una richiesta GET e stamperà il codice restituito: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") 'passaggio tramite proxy con autenticazione automatica 'l’autenticazione deve essere impostata su 1 HTTPobj.Authentication = 1 'Invio della richiesta GET HTTPResponse = HTTPobj.SendRequest () echo HTTPResponse End Function 4.5.13 ProxyUser Nome utente per l’autenticazione proxy. Sintassi HTTPObject.ProxyUser Dove: ProxyUser è una stringa (lettura/scrittura) Esempio Lo script seguirà una richiesta GET e stamperà il codice restituito. Imposta nome utente e password come LanGuard_test: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.ProxyUser = "LanGuard_test" HTTPobj.Proxypassword = "LanGuard_test" 'Invio della richiesta GET GFI LanGuard 4 Oggetti scripting | 56 HTTPResponse = HTTPobj.SendRequest () echo HTTPobj.Body End Function 4.5.14 ProxyPassword Password per l’autenticazione proxy. Sintassi HTTPObject.ProxyPassword Dove: ProxyPassword è una stringa (lettura/scrittura) Esempio Lo script seguirà una richiesta GET e stamperà il codice restituito. Imposta nome utente e password come LanGuard_test: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.ProxyUser = "LanGuard_test" HTTPobj.Proxypassword = "LanGuard_test" 'Invio della richiesta GET HTTPResponse = HTTPobj.SendRequest () echo HTTPobj.Body End Function 4.5.15 HttpUser Nome utente per l’autenticazione HTTP. Sintassi HTTPObject.HttpUser Dove: HttpUser è una stringa (lettura/scrittura) Esempio Lo script seguirà una richiesta GET e stamperà il codice restituito. Imposta nome utente e password come LanGuard_test: GFI LanGuard 4 Oggetti scripting | 57 Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.HTTPUser = "LanGuard_test" HTTPobj.HTTPpassword = "LanGuard_test" 'Invio della richiesta GET HTTPResponse = HTTPobj.SendRequest () echo HTTPobj.Body End Function 4.5.16 HttpPassword Password per l’autenticazione HTTP. Sintassi HTTPObject.HttpPassword Dove: HttpPassword è una stringa (lettura/scrittura) Esempio Lo script seguirà una richiesta GET e stamperà il codice restituito. Imposta nome utente e password come LanGuard_test: Function Main Dim HTTPObj as Object ip = "www.gfi.com" port = 80 Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.HTTPUser = "LanGuard_test" HTTPobj.HTTPpassword = "LanGuard_test" 'Invio della richiesta GET HTTPResponse = HTTPobj.SendRequest () echo HTTPobj.Body End Function 4.5.17 ResponseHeaders L’oggetto intestazione che fornisce l’accesso a singole intestazioni di risposta. GFI LanGuard 4 Oggetti scripting | 58 Sintassi HTTPObject.ReponseHeaders Dove: ResponseHeaders è un oggetto (lettura) Esempio Lo script stamperà il nome del server HTTP: Function Main Dim HTTPObj as Object Dim headers as Object ip = "www.apache.org" port = 80 cr = Chr(13) + Chr(10) Set HTTPobj = HTTP.Connect (ip,port) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.verb = "HEAD" 'passaggio tramite proxy con autenticazione automatica 'l’autenticazione deve essere impostata su 1 HTTPobj.Authentication = 1 'Invio della richiesta HEAD HTTPResponse = HTTPobj.SendRequest () 'Impostazione nuove intestazioni chiamate da Object Set headers = HTTPobj.ResponseHeaders 'HTTPResponse contiene il codice restituito echo "Risultato: " + cstr(HTTPResponse) + cr 'il risultato http sarà del tipo : 'HTTP/1.1 200 OK 'Server: Microsoft-IIS/5.0 'Data: Mar, 28 ottobre 2003 10:23:19 GMT 'Content-Length: 1270 'Content-Type: text/html echo "Server in esecuzione su " + ip + " è " + headers.HeaderValue ("server") + cr End Function 4.6 Oggetti HTTPHeaders Nella sezione sono fornite le informazioni relative agli oggetti HTTPHeaders seguenti: GFI LanGuard 4 Oggetti scripting | 59 HeaderValue HeaderName Count 4.6.1 HeaderValue HeaderValue recupera il valore dell’intestazione dall’oggetto HTTPHeaders. Sintassi HeaderValue (VARIANT indice) Dove: Indice è una stringa o un valore lungo Il valore della stringa verrà utilizzato per recuperare un valore, dato il nome di un’intestazione (esempio: Server). HeaderValue può inoltre essere recuperato, se è presente un indice. L’intervallo valido dell’indice è compreso tra 0 e il numero di intestazioni. Restituisce Una stringa contenente il valore dell’intestazione. Esempio Lo script stamperà il nome del server HTTP: 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) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.verb = "HEAD" 'Invio della richiesta HEAD HTTPResponse = HTTPobj.SendRequest () 'Impostazione nuove intestazioni chiamate da Object Set headers = HTTPobj.ResponseHeaders 'HTTPResponse contiene il codice restituito echo "Risultato: " + cstr(HTTPResponse) + cr echo "Server in esecuzione su " + ip + " è " + headers.HeaderValue ("server") + cr End Function 4.6.2 HeaderName HeaderName recupera il nome dell’intestazione dall’oggetto HTTPHeader. GFI LanGuard 4 Oggetti scripting | 60 Sintassi HeaderName (LONG indice) L’intervallo valido dell’indice tra 0 e il numero di intestazioni. Restituisce Una stringa contenente il nome dell’intestazione. Esempio Lo script stamperà le intestazioni: 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) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.verb = "HEAD" 'Invio della richiesta HEAD HTTPResponse = HTTPobj.SendRequest () 'Impostazione nuove intestazioni chiamate da Object Set headers = HTTPobj.ResponseHeaders 'headers.count contiene il numero di intestazioni (long) echo "conteggio intestazioni: " & CStr(headers.Count) & cr upbound = headers.Count - 1 'per ciascuna intestazione, eseguire echo all’inverso per HeaderName e valore Header For hn=0 To upbound echo headers.HeaderName(hn) & vbTab & "-->" & vbtab & headers.HeaderValue(hn) & cr Next End Function 4.6.3 Count Restituisce il numero di voci di intestazioni nell’oggetto HTTPHeaders. Sintassi HTTPHeadersObject.Count Dove: Count è Long (read) GFI LanGuard 4 Oggetti scripting | 61 Esempio Lo script stamperà le intestazioni: 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) 'impostazione del tipo di richiesta HTTPobj.GetURL("/") HTTPobj.verb = "HEAD" 'Invio della richiesta HEAD HTTPResponse = HTTPobj.SendRequest () 'Impostazione nuove intestazioni chiamate da Object Set headers = HTTPobj.ResponseHeaders 'headers.count contiene il numero di intestazioni (long) echo "conteggio intestazioni: " & CStr(headers.Count) & cr upbound = headers.Count - 1 'per ciascuna intestazione, eseguire echo all’inverso per HeaderName e valore Header For hn=0 To upbound echo headers.HeaderName(hn) & vbTab & "-->" & vbtab & headers.HeaderValue(hn) & cr Next End Function 4.7 Oggetti FTP L’oggetto Ftp è una raccolta di funzioni che semplificano il caricamento/download dell’ftp. L’oggetto ha la funzionalità di connettersi ai server ftp remoti, inserire e recuperare i file, rinominare o eliminare i file. È inoltre possibile enumerare tutti i file sul server remoto, se lo si desidera. Un’altra funzionalità dell’oggetto è la capacità di recuperare le informazioni relative ai file sul server (attributi/dimensione). Oltre a questo, l’oggetto ftp può anche creare/eliminare le cartelle sul server remoto nonché modificare le directory. Questa sezione contiene informazioni relative agli oggetti FTP seguenti: Connect GetCurrentDirectory SetCurrentDirectory CreateDirectory GFI LanGuard 4 Oggetti scripting | 62 RemoveDirectory DeletFile GetFile PutFile RenameFile FindFirstFile FindNextFile FindFileClose GetFindFileName GetFindFileSize GetFindFileAttributes LastError 4.7.1 Connect Connect viene utilizzato per determinare il nome host o l’indirizzo IP e la porta del server FTP. Sintassi FTPObject connect (STRING hostname, LONG port, BOOL PassiveMode STRING user, STRING password) Dove: Hostname: può essere l’indirizzo IP o il nome host (esempio: www.gfi.com) Port: numero di porta intero compreso tra 1 e 65535 PassiveMode: può essere TRUE o FALSE. False imposta la modalità su Attiva. User: nome utente dell’FTP. Per l’accesso anonimo specificare il nome utente come anonymous. Password: password dell’FTP. Per l’accesso anonimo utilizzare l’indirizzo e-mail, ad es. ([email protected]), come password. Restituisce Oggetto FTP. Esempio Un esempio in cui viene eseguito il comando echo sulla directory di lavoro FTP corrente: Function Main Dim FTPobj as Object ip = "127.0.0.1" port = 21 mode = FALSE username = "anonymous" password = "[email protected]" GFI LanGuard 4 Oggetti scripting | 63 Set FTPobj=FTP.Connect (ip,21,mode,username,password) cdir = FTPobj.GetCurrentDirectory echo cdir End Function 4.7.2 GetCurrentDirectory GetCurrentDirectory recupera la directory corrente sul server ftp. Le funzioni file (esempio: caricamento o download) sono relative a questa directory. Sintassi STRING GetCurrentDirectory() Restituisce La directory di lavoro corrente sul server FTP come stringa. Esempio Un esempio in cui viene eseguito il comando echo sulla directory di lavoro FTP corrente: Function Main Dim FTPobj as Object ip = "127.0.0.1" port = 21 mode = FALSE username = "anonymous" password = "[email protected]" Set FTPobj=FTP.Connect (ip,21,mode,username,password) cdir = FTPobj.GetCurrentDirectory echo cdir End Function 4.7.3 SetCurrentDirectory SetCurrentDirectory imposta il percorso della directory sul server ftp remoto. Le funzioni file (es.: caricamento o download) sono relative a questa directory. Sintassi SetCurrentDirectory(STRING directory) Dove: Directory è una stringa. Restituisce Booleano. Se restituisce TRUE, la funzione è stata eseguita correttamente, altrimenti significa che è stato restituito un errore. Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Un esempio che imposta la directory di lavoro corrente: GFI LanGuard 4 Oggetti scripting | 64 Function Main Dim FTPobj as Object 'configurare secondo necessità ip = "127.0.0.1" port = 21 mode = FALSE username = "anonymous" password = "[email protected]" directory = "/pub/" 'creazione di una nuova connessione ftp Set FTPobj=FTP.Connect (ip,21,mode,username,password) 'Impostazione della directory di lavoro corrente su /pub/ RET = FTPobj.SetCurrentDirectory (directory) if RET Then echo "Impostazione della directory corrente su " + directory + " riuscito" else echo "impossibile impostare la dir corrente: " + CStr (FTPobj.LastError) End If End Function 4.7.4 CreateDirectory CreateDirectory crea una nuova directory sul server ftp remoto. Sintassi CreateDirectory(STRING directory) Dove: Directory è una stringa. Restituisce Booleano. Se restituisce TRUE, la funzione è stata eseguita correttamente, altrimenti significa che è stato restituito un errore. Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Un esempio in cui viene eseguito il comando echo sulla directory di lavoro FTP corrente: Function Random(N) Random = Int(N*Rnd) End Function Function Main Dim FTPobj as Object GFI LanGuard 4 Oggetti scripting | 65 'configurare secondo necessità ip = "127.0.0.1" port = 21 mode = FALSE username = "anonymous" password = "[email protected]" cr = Chr(13) + Chr(10) 'avvio della randomizzazione Randomize 'generazione di un numero casuale da aggiungere ai nomi di file for K = 1 to 10 randomnumber = randomnumber + cstr(Random(10)) next tempDir = "lnssDir" & randomnumber 'creazione di una nuova connessione ftp Set FTPobj=FTP.Connect (ip,21,mode,username,password) 'tentativo di creare una nuova directory dopo una connessione ftp anonima if FTPobj.CreateDirectory ( tempDir ) = TRUE then echo "Accesso creazione directory disponibile nell’ftp anonimo in " + ip & cr 'tentativo di eliminare la directory if FTPobj.RemoveDirectory ( tempDir ) = TRUE then echo "Accesso eliminazione directory disponibile nell’ftp anonimo in " + ip & cr else echo "Accesso eliminazione directory non disponibile. È possibile che sia necessario eliminare le directory create da GFI LanGuard" & cr End If End If End Function 4.7.5 RemoveDirectory RemoveDirectory elimina una directory sul server FTP remoto. Sintassi RemoveDirectory(STRING directory) Dove: Directory è una stringa. GFI LanGuard 4 Oggetti scripting | 66 Restituisce Booleano. Se restituisce TRUE, la funzione è stata eseguita correttamente, altrimenti significa che è stato restituito un errore. Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Un esempio in cui viene eseguito il comando echo sulla directory di lavoro FTP corrente: Function Random(N) Random = Int(N*Rnd) End Function Function Main Dim FTPobj as Object 'configurare secondo necessità ip = "127.0.0.1" port = 21 mode = FALSE username = "anonymous" password = "[email protected]" cr = Chr(13) + Chr(10) 'avvio della randomizzazione Randomize 'generazione di un numero casuale da aggiungere ai nomi di file for K = 1 to 10 randomnumber = randomnumber + cstr(Random(10)) next tempDir = "lnssDir" & randomnumber 'creazione di una nuova connessione ftp Set FTPobj=FTP.Connect (ip,21,mode,username,password) 'tentativo di creare una nuova directory dopo una connessione ftp anonima if FTPobj.CreateDirectory ( tempDir ) = TRUE then echo "Accesso creazione directory disponibile nell’ftp anonimo in " + ip & cr 'tentativo di eliminare la directory if FTPobj.RemoveDirectory ( tempDir ) = TRUE then echo "Accesso eliminazione directory disponibile nell’ftp anonimo in " + ip & cr else GFI LanGuard 4 Oggetti scripting | 67 echo "Accesso eliminazione directory non disponibile. È possibile che sia necessario eliminare le directory create da GFI LanGuard" & cr End If End If End Function 4.7.6 DeleteFiles Eliminazione file sul server ftp remoto. Sintassi DeleteFile(STRING file) Dove: File è una stringa (esempio: readme.txt) Restituisce Booleano. Se restituisce TRUE, la funzione è stata eseguita correttamente, altrimenti significa che è stato restituito un errore. Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Esempio in cui viene caricato un file e poi eliminato su un server FTP remoto: Function Random(N) Random = Int(N*Rnd) End Function Function Main Dim FTPobj As Object Dim fl As Object 'configurare secondo necessità ip = "127.0.0.1" port = 21 mode = FALSE username = "anonymous" password = "[email protected]" cr = Chr(13) + Chr(10) Set fl = file.Connect("127.0.0.1") fl.Open "testfile.txt", GENERIC_WRITE, CREATE_ALWAYS fl.writeline("Questo è un file di prova") 'avvio della randomizzazione Randomize fl.Close 'generazione di un numero casuale da aggiungere ai nomi di file GFI LanGuard 4 Oggetti scripting | 68 For K = 1 To 10 randomnumber = randomnumber & CStr(Random(10)) Next tempFile = "lnssFile" + randomnumber 'creazione di una nuova connessione ftp Set FTPobj=FTP.Connect (ip,21,mode,username,password) If FTPobj.PutFile ( "testfile.txt", tempFile ) = TRUE Then echo "Accesso scrittura file disponibile nell’ftp anonimo in " + ip & cr If FTPobj.DeleteFile ( tempFile ) = TRUE Then echo "Accesso eliminazione file disponibile nell’ftp anonimo in " + ip& cr Else echo "Accesso eliminazione file non disponibile. È possibile che sia necessario eliminare i file creati da GFI LanGuard" & cr End If End If fl.Delete("testfile.txt") End Function 4.7.7 GetFile GetFile recupera un file dal computer remoto. Il file viene quindi archiviato localmente. Sintassi GetFile(STRING remotefile, String localfile) Dove: RemoteFile è una stringa (esempio: readme.txt) LocalFile è una stringa (esempio: readmecopy.txt) Restituisce Booleano. Se restituisce TRUE, la funzione è stata eseguita correttamente, altrimenti significa che è stato restituito un errore. Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Un esempio della funzione GetFile nell’oggetto FTP. Recupera tutti i file trovati nella radice del server FTP: Function Main Dim FTPobj as Object Const DIRECTORYMASK=&H10 ip = "127.0.0.1" port = 21 GFI LanGuard 4 Oggetti scripting | 69 cr = Chr(13) + Chr(10) Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]") Found=FTPobj.FindFirstFile("*") While Found If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) = DIRECTORYMASK Then FileType="directory" Else FileType="file" ret = FTPobj.GetFile (FTPobj.GetFindFileName, FTPobj.GetFindFileName) End If echo "File: " + FTPobj.GetFindFileName + " dimensione: " + CStr (FTPobj.GetFindFileSize) + " tipo byte: " + FileType & cr Found=FTPobj.FindNextFile Wend End Function 4.7.8 PutFile PutFile carica un file dal disco locale al server ftp remoto. 4.7.9 Sintassi PutFile(STRING localfile, STRING remotefile) Dove: Localfile è una stringa (esempio: readme.txt) Remotefile è una stringa (esempio: readme.txt) Restituisce Booleano. Se restituisce TRUE, la funzione è stata eseguita correttamente, altrimenti significa che è stato restituito un errore. Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Esempio in cui viene caricato un file e poi eliminato su un server FTP remoto: Function Random(N) Random = Int(N*Rnd) End Function Function Main Dim FTPobj As Object Dim fl As Object 'configurare secondo necessità ip = "127.0.0.1" port = 21 GFI LanGuard 4 Oggetti scripting | 70 mode = FALSE username = "anonymous" password = "[email protected]" cr = Chr(13) + Chr(10) Set fl = file.Connect("127.0.0.1") fl.Open "testfile.txt", GENERIC_WRITE, CREATE_ALWAYS fl.writeline("Questo è un file di prova") 'avvio della randomizzazione Randomize fl.Close 'generazione di un numero casuale da aggiungere ai nomi di file For K = 1 To 10 randomnumber = randomnumber & CStr(Random(10)) Next tempFile = "lnssFile" + randomnumber 'creazione di una nuova connessione ftp Set FTPobj=FTP.Connect (ip,21,mode,username,password) If FTPobj.PutFile ( "testfile.txt", tempFile ) = TRUE Then echo "Accesso scrittura file disponibile nell’ftp anonimo in " + ip & cr If FTPobj.DeleteFile ( tempFile ) = TRUE Then echo "Accesso eliminazione file disponibile nell’ftp anonimo in " + ip& cr Else echo "Accesso eliminazione file non disponibile. È possibile che sia necessario eliminare i file creati da GFI LanGuard" & cr End If End If fl.Delete("testfile.txt") End Function 4.7.10 RenameFile RenameFile rinomina i file sul server FTP remoto. Sintassi RenameFile(STRING originalFileName, STRING renamedFileName) Dove: originalFileName è una stringa renameFileName è una stringa GFI LanGuard 4 Oggetti scripting | 71 Restituisce Booleano. Se restituisce TRUE, la funzione è stata eseguita correttamente, altrimenti significa che è stato restituito un errore. Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Esempio della funzione RenameFile nell’oggetto FTP. Rinomina tutti i file trovati nella radice del server FTP: Function Main Dim FTPobj as Object Const DIRECTORYMASK=&H10 ip = "127.0.0.1" port = 21 cr = Chr(13) + Chr(10) Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]") Found=FTPobj.FindFirstFile("*") While Found If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) = DIRECTORYMASK Then FileType="directory" Else FileType="file" FileName = FTPobj.GetFindFileName RenameFileName = "rinominato_" + FTPobj.GetFindFileName ret = FTPobj.RenameFile (FileName, RenameFileName) End If echo "File: " + FTPobj.GetFindFileName + " dimensione: " + CStr (FTPobj.GetFindFileSize) + " tipo byte: " + FileType & cr Found=FTPobj.FindNextFile Wend End Function 4.7.11 FindFirstFile FindFirstFile inizializza ed enumera file e directory nella directory corrente sul server FTP remoto. Sintassi FindFirstFile(STRING filemask) Dove: Filemask è una stringa. Generalmente è “*” per enumerare tutti i file. GFI LanGuard 4 Oggetti scripting | 72 Restituisce Booleano. Se restituisce TRUE, significa che almeno un file sul server FTP remoto corrisponde Il nome e la dimensione file per il primo file corrispondente possono essere recuperati utilizzando i metodi GetFindFileName() e GetFindFileSize() . Il metodo FindNextFile() viene utilizzato per spostarsi al file corrispondente successivo FindFirstFile restituirà FALSE nel caso in cui non vengano trovati file corrispondenti FindFirstFile restituirà anche FALSE nelle chiamate successive a FindFirstFile() se l’operazione di ricerca corrente non è stata chiusa con il metodo FindFileClose() Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Esempio della funzione RenameFile nell’oggetto FTP. Rinomina tutti i file trovati nella radice del server FTP: Function Main Dim FTPobj as Object Const DIRECTORYMASK=&H10 ip = "127.0.0.1" port = 21 cr = Chr(13) + Chr(10) Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]") Found=FTPobj.FindFirstFile("*") While Found If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) = DIRECTORYMASK Then FileType="directory" Else FileType="file" FileName = FTPobj.GetFindFileName RenameFileName = "rinominato_" + FTPobj.GetFindFileName ret = FTPobj.RenameFile (FileName, RenameFileName) End If echo "File: " + FTPobj.GetFindFileName + " dimensione: " + CStr (FTPobj.GetFindFileSize) + " tipo byte: " + FileType & cr Found=FTPobj.FindNextFile Wend End Function 4.7.12 FindNextFile Ricerca il file successivo corrispondente alla maschera file specificata dal metodo FindFirstFile. GFI LanGuard 4 Oggetti scripting | 73 Sintassi FindNextFile Restituisce Booleano. Se restituisce TRUE, significa che sono stati trovati più file che corrispondono alla maschera file specificata dal metodo FindFirstFile Il nome e la dimensione file per il primo file corrispondente possono essere recuperati utilizzando i metodi GetFindFileName() e GetFindFileSize() FindNextFile restituirà FALSE nel caso in cui non vengano trovati file corrispondenti FindNextFile deve essere chiamato tra una chiamata riuscita a FindFirstFile() e una chiamata a FindFileClose() Il metodo restituirà FALSE se chiamato all’esterno dell’ambito Se viene restituito FALSE, FTPObject.LastError restituirà il codice di errore WIN32. Esempio Esempio della funzione RenameFile nell’oggetto FTP. Rinomina tutti i file trovati nella radice del server FTP: Function Main Dim FTPobj as Object Const DIRECTORYMASK=&H10 ip = "127.0.0.1" port = 21 cr = Chr(13) + Chr(10) Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]") Found=FTPobj.FindFirstFile("*") While Found If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) = DIRECTORYMASK Then FileType="directory" Else FileType="file" FileName = FTPobj.GetFindFileName RenameFileName = "rinominato_" + FTPobj.GetFindFileName ret = FTPobj.RenameFile (FileName, RenameFileName) End If echo "File: " + FTPobj.GetFindFileName + " dimensione: " + CStr (FTPobj.GetFindFileSize) + " tipo byte: " + FileType & cr Found=FTPobj.FindNextFile Wend End Function GFI LanGuard 4 Oggetti scripting | 74 FindFileClose Ricerca il file successivo corrispondente alla maschera file specificata dal metodo FindFirstFile. Non è necessario chiamare se la chiamata a FindFirstFile() ha esito negativo. Sintassi FindFileClose Restituisce Nessun dato restituito. Esempio Un esempio della funzione FindFileClose nell’oggetto FTP. Ricerca un determinato file fino a quando non viene trovato nella radice: Function Main Dim FTPobj as Object Const DIRECTORYMASK=&H10 ip = "127.0.0.1" port = 21 cr = Chr(13) + Chr(10) Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]") Found=FTPobj.FindFirstFile("*") While Found If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) = DIRECTORYMASK Then FileType="directory" Found=FTPobj.FindNextFile Else FileType="file" if FTPobj.GetFindFileName = "test.zip" then echo "test.zip esiste" & cr FTPobj.FindFileClose Found = false else echo "test.zip non esiste" & cr Found=FTPobj.FindNextFile End If End If Wend End Function GFI LanGuard 4 Oggetti scripting | 75 4.7.13 GetFindFileName GetFindFileName recupera il nome del file con corrispondenza dopo una chiamata riuscita ai metodi FindFirstFile o FindNextFile. Quando viene chiamato, FindFileClose, GetFindFileName, GetFindFileSize e GetFindFileAttributes non devono essere utilizzati poiché causerebbero l’esito negativo del motore di scripting. Sintassi GetFindFileName Restituisce Una stringa contenente il nome del file. Esempio Esempio della funzione RenameFile nell’oggetto FTP. Rinomina tutti i file trovati nella radice del server FTP: Function Main Dim FTPobj as Object Const DIRECTORYMASK=&H10 ip = "127.0.0.1" port = 21 Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]") Found=FTPobj.FindFirstFile("*") While Found If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) = DIRECTORYMASK Then FileType="directory" Else FileType="file" FileName = FTPobj.GetFindFileName RenameFileName = "rinominato_" + FTPobj.GetFindFileName ret = FTPobj.RenameFile (FileName, RenameFileName) End If Wend End Function 4.7.14 GetFindFileSize GetFindFileSize recupera la dimensione del file con corrispondenza dopo una chiamata riuscita ai metodi FindFirstFile o FindNextFile. Quando viene chiamato, FindFileClose, GetFindFileName, GetFindFileSize e GetFindFileAttributes non devono essere utilizzati poiché causerebbero l’esito negativo del motore di scripting. Sintassi GetFileSize GFI LanGuard 4 Oggetti scripting | 76 Restituisce Intero lungo contenente la dimensione del file. Esempio Esempio della funzione RenameFile nell’oggetto FTP. Rinomina tutti i file trovati nella radice del server FTP: Function Main Dim FTPobj as Object Const DIRECTORYMASK=&H10 ip = "127.0.0.1" port = 21 cr = Chr(13) + Chr(10) Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]") Found=FTPobj.FindFirstFile("*") While Found If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) = DIRECTORYMASK Then FileType="directory" Else FileType="file" End If echo "File: " + FTPobj.GetFindFileName + " dimensione: " + CStr (FTPobj.GetFindFileSize) + " tipo byte: " + FileType & cr Found=FTPobj.FindNextFile Wend End Function GetFindFileAttributes GetFindFileAttributes recupera il file Attributes del file con corrispondenza dopo una chiamata riuscita ai metodi FindFirstFile o FindNextFile. Quando viene chiamato, FindFileClose, GetFindFileName, GetFindFileSize e GetFindFileAttributes non devono essere utilizzati poiché causerebbero l’esito negativo del motore di scripting. Sintassi GetFindFileAttributes Restituisce File Attributes del file con corrispondenza. Questi son gli attributi del membro dwFileAttributes nella struttura definita WIN32 WIN32_FIND_DATA. Le maschere di bit vengono definite come costanti FILE_ATTRUTE_*. Ad es. FILE_ATTRUTE_DIRECTORY viene definita come 0x10. Maschere di bit Definizione FILE_ATTRIBUTE_READONLY &H1 GFI LanGuard 4 Oggetti scripting | 77 Maschere di bit Definizione 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 Esempio Esempio della funzione RenameFile nell’oggetto FTP. Rinomina tutti i file trovati nella radice del server FTP: Function Main Dim FTPobj as Object Const DIRECTORYMASK=&H10 ip = "127.0.0.1" port = 21 Set FTPobj = FTP.Connect (ip,port,TRUE,"anonymous","[email protected]") Found=FTPobj.FindFirstFile("*") While Found If (FTPobj.GetFindFileAttributes And DIRECTORYMASK) = DIRECTORYMASK Then FileType="directory" Else FileType="file" End If echo "File: " + FTPobj.GetFindFileName + " dimensione: " + CStr (FTPobj.GetFindFileSize) + " tipo byte: " + FileType Found=FTPobj.FindNextFile Wend End Function 4.7.15 LastError LastError contiene il codice di errore WIN32 impostato da vari metodi quando questi restituiscono un valore FALSE e non riuscito. Il valore deve essere controllato all’occorrenza prima di chiamare un altro metodo che può impostare la proprietà in caso di errore. GFI LanGuard 4 Oggetti scripting | 78 4.7.16 Sintassi FTPobj.LastError: STRING (read) Esempio Un esempio che imposta la directory di lavoro corrente: Function Main Dim FTPobj as Object 'configurare secondo necessità ip = "127.0.0.1" port = 21 mode = FALSE username = "anonymous" password = "[email protected]" directory = "/pub/" 'creazione di una nuova connessione ftp Set FTPobj=FTP.Connect (ip,21,mode,username,password) 'Impostazione della directory di lavoro corrente su /pub/ RET = FTPobj.SetCurrentDirectory (directory) if RET Then echo "Impostazione della directory corrente su " + directory + " riuscito" else echo "impossibile impostare la dir corrente: " + CStr (FTPobj.LastError) End If End Function 4.8 Oggetti Encode Gli oggetti Encode consentono all’utente la possibilità di codificare o decodificare le stringhe base 64. Questa funzione è molto utile in varie applicazioni. La codifica Base64 è molto usata nelle e-mail nonché in vari schemi di autenticazione, incluso http. Questa sezione contiene informazioni relative agli oggetti Encode seguenti: Base64Encode Base64Decode 4.8.1 Base64Encode Base64Encode viene utilizzato per codificare una STRINGA nella rappresentazione Base64. Sintassi Base64Encode(String) GFI LanGuard 4 Oggetti scripting | 79 Restituisce Stringa. Esempio Function Main Dim message As String Dim encoded As String Dim decoded As String cr = Chr(13)+Chr(10)’Ritorno a capo e avanzamento riga message = "Stringa da codificare" encoded = Encode.Base64Encode(message) echo "Testo codificato : " echo encoded echo cr decoded = Encode.Base64Decode(encoded) echo "Testo decodificato :"+decoded+cr End Function Base64Decode Base64Decode viene utilizzato per decodificare una stringa di rappresentazione Base64 nel suo formato originale. Sintassi Base64Decode(String) Restituisce Stringa. Esempio Function Main Dim message As String Dim encoded As String Dim decoded As String cr = Chr(13) + Chr(10)’ritorno a capo e avanzamento riga message = "Stringa da codificare" encoded = Encode.Base64Encode(message) echo "Testo codificato : " echo encoded echo cr decoded = Encode.Base64Decode(encoded) echo "Testo decodificato :"+decoded+cr GFI LanGuard 4 Oggetti scripting | 80 End Function GFI LanGuard 4 Oggetti scripting | 81 5 Funzioni generali GFI LanGuard Script Debugger supporta le funzioni generiche che forniscono l’integrazione tra gli script e il componente server GFI LanGuard. Argomenti del presente capitolo: 5.1 Echo 82 5.2 WriteToLog 82 5.3 StatusBar 83 5.4 AddListItem 83 5.5 SetDescription 84 5.1 Echo Echo è una funzione semplice che visualizza l’output. Sintassi Echo (String) Restituisce Nessun dato restituito. Esempio In questo esempio viene visualizzata la parola “Prova”: Function Main echo "prova" End Function 5.2 WriteToLog Writetolog scriverà le stringhe passate nel file di registro del motore dello script. Sintassi WriteToLog(String) Restituisce Nessun dato restituito. Esempio Function Main WritetoLog "prova" End Function GFI LanGuard 5 Funzioni generali | 82 5.3 StatusBar StatusBar viene utilizzata per visualizzare una stringa sulla barra di stato del componente attivo corrente. Sintassi StatusBar(String) Restituisce Nessun dato restituito. Esempio Function Main StatusBar "prova" End Function 5.4 AddListItem AddListItem è una funzione che consente agli script di restituire un feedback all’utente. Questa funzione aggiungerà le stringhe passate come nodo secondario della vulnerabilità attivata. La funzione AddListItem accetta due diversi parametri. Il primo parametro specifica il nodo superiore mentre il secondo parametro la stringa da aggiungere alla struttura. Se il nodo superiore viene lasciato vuoto, la funzione aggiungerà la stringa specificata al nodo principale disponibile (nodo superiore di vulnerabilità). La struttura può avere un solo livello anche se può avere un numero indefinito di pari livello. Sintassi AddListItem(String,String) Restituisce N/D. Esempio 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 Funzioni generali | 83 If Not (IsNull(prop.value)) Then If prop.name = "Nome" 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 viene utilizzato per restituire un feedback semplice all’utente modificando in modo programmatico la descrizione delle vulnerabilità per indicare un motivo più dettagliato dell’attivazione della vulnerabilità. SetDescription accetta solo un parametro. La stringa passata alla funzione verrà impostata come la nuova descrizione per la vulnerabilità, una volta che viene attivata. Sintassi SetDescription(String) Restituisce N/D. Esempio Function Main SetDescription ("La nuova descrizione verrà impostata al posto di quella specificata nella vulnerabilità") Main=true End Function GFI LanGuard 5 Funzioni generali | 84 6 Utilizzo di ActiveX, COM e componenti di automazione OLE Questo capitolo fornisce le informazioni relative all’utilizzo degli oggetti di automazione dello script. Per l’associazione con gli oggetti di automazione, viene utilizzata la funzione CreateObject . Questa funzione restituisce un oggetto che collega all’automazione che si desidera utilizzare. Argomenti del presente capitolo: 6.1 Informazioni sui componenti di automazione 85 6.2 Esempio di utilizzo di automazione dello script oggetti 86 6.1 Informazioni sui componenti di automazione Per effettuare chiamate ai componenti di automazione, viene utilizzata la funzione CreateObject . Questa funzione restituisce un oggetto che collega all’automazione che si desidera utilizzare. Esempio Per utilizzare l’oggetto espressione regolare di 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("Questo è un percorso") Else echo("Questo non è un percorso") End If End Function L’esempio in alto utilizza un’espressione regolare per verificare se il test di variabile mantiene un percorso o meno. La flessibilità del sistema non solo consente l’utilizzo di questi oggetti per migliorare gli script GFI LanGuard, ma anche al motore di scripting di essere utilizzato per qualsiasi scopo. Esempio: adesso è possibile creare uno script per eseguire la scansione di un Worm X, pulirlo, se trovato, e generare un report in Excel come riferimento delle modifiche eseguite visualizzando in GFI LanGuard che è stato trovato un worm, che è stato poi pulito. In basso viene illustrato un esempio di tale automazione, lo script elenca i servizi in esecuzione sul computer locale e lo stato relativo in un foglio di lavoro Excel. Questo esempio particolare richiede l’installazione di Excel e la disponibilità di WMI che deve essere pre-installato nei computer con Windows 2000 o versione successiva. GFI LanGuard 6 Utilizzo di ActiveX, COM e componenti di automazione OLE | 85 6.2 Esempio di utilizzo di automazione dello script oggetti Lo script seguente esegue la connessione con un oggetto automazione di Excel, crea un nuovo foglio ed esporta l’elenco dei servizi con i rispettivi stati. Questo script richiede Excel e WMI. Nota Strumentazione gestione Windows è pre-installato nei computer con Windows 2000 e versioni successive. Deve essere installato in Windows 9x e Windows NT. Link per il download: http://go.gfi.com/?pageid=_wmi Function Main Dim excel As Object 'Creazione degli oggetti necessari per lo script 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") 'Ottenere un oggetto wmi che consente il recupero di varie informazioni If wmiobj is Nothing Then echo ("Errore1 Impossibile creare l’oggetto WMI") Else Set excel = CreateObject("Applicazione.Excel") 'Connessione al nuovo oggetto automazione Excel If excel is Nothing Then Echo("Impossibile creare l’oggetto Excel") Else 'visualizzazione versione Excel echo ("sessione avviata con versione Excel "&excel.version) 'Aggiunta cartella di lavoro Set book = excel.workbooks.add 'Aggiunta foglio di lavoro alla cartella di lavoro Set sheet = Book.Worksheets.add sheet.cells(1,1) = "Questo foglio è stato generato con uno script GFI LanGuard" GFI LanGuard 6 Utilizzo di ActiveX, COM e componenti di automazione OLE | 86 'Impostazione nomi colonne sheet.cells(3,1) = "Nome servizio" sheet.cells(3,2) = "Stato" sheet.cells(3,3) = "Avviato" 'Recupero info servizi Set wmiinst=wmiobj.instancesof("Win32_Service") If wmiinst is Nothing Then echo ("errore2: Impossibile recuperare le informazioni dei servizi") Else lnpos = 4 For Each objswbemobject In wmiinst 'Ciclo tramite tutti gli oggetti dei servizi lnpos = lnpos + 1 sheet.cells(lnpos,1) = objswbemobject.DisplayName 'Immissione info servizi nel foglio Excel sheet.cells(lnpos,2) = objswbemobject.State sheet.cells(lnpos,3) = objswbemobject.Started Next 'Regolazione automatica colonne sheet.columns.AutoFit 'Visualizzazione foglio Excel sheet.application.visible = true End If End If End If End Function GFI LanGuard 6 Utilizzo di ActiveX, COM e componenti di automazione OLE | 87 7 Possibilità di riutilizzo delle librerie e dei codici GFI LanGuard Script Debugger consente di creare librerie personalizzate che possono essere utilizzate negli script. In questo modo è possibile creare librerie con le funzioni che devono essere utilizzate da più script. Procedere importando semplicemente la libreria in tutti gli script in cui si desidera utilizzare le funzioni. Argomenti del presente capitolo: 7.1 Creazione di librerie 88 7.2 Utilizzo delle librerie 88 7.1 Creazione di librerie Le librerie sono script semplici che di solito contengono numerose funzioni. Al contrario degli script normali, le librerie non devono avere una funzione main. Se in una libreria viene definita una funzione main, si verificherà un errore di dichiarazione di duplicato se lo script che utilizza la funzione dispone della funzione main oppure, se lo script non dispone della funzione main, la funzione main della libreria verrà chiamata per prima. Le librerie devono essere collocate nella directory relativa configurata. In genere si trova nella directory seguente: <directory di installazione GFI LanGuard>\Library È inoltre possibile collocare la libreria in una directory secondaria, ma solo nella directory configurata per la libreria. 7.2 Utilizzo delle librerie Per chiamare le funzioni nelle librerie, includere innanzitutto la libreria nello script che si sta eseguendo. A tale scopo, utilizzare la direttiva di inclusione. Tale direttiva viene utilizzata nel modo seguente: 1. Inserire la combinazione di 2 caratteri “ '# ”. 2. Scrivere la parola include dopo il segno “ # ” e quindi il nome della libreria tra due virgolette doppie. Esempio '#include "nomelibreria" In questo modo verrà praticamente incollato il codice in "nomelibreria" all’inizio dello script e quindi la funzione in "nomelibreria" diverrà disponibile nello script in fase di sviluppo. Esempio Quella che segue è la libreria (salvata con nome file “libreria”): Function Ver Ver = "1.0" End Function In alto è mostrata la libreria che contiene una sola funzione denominata “Ver” che restituisce una stringa “1.0” GFI LanGuard 7 Possibilità di riutilizzo delle librerie e dei codici | 88 Questo è lo script che utilizza la libreria dichiarata in alto: '#include "libreria" Function Main Dim libraryver As String libraryver = Ver() echo libraryver End Function Lo script utilizza semplicemente la funzione memorizzata nella libreria per recuperare una stringa e poi visualizzare il valore restituito. GFI LanGuard 7 Possibilità di riutilizzo delle librerie e dei codici | 89 8 Indice A Agente 50-51 Attività 6-8, 11-12, 15 Attributi 32-33, 39, 77 C Componenti 85 Computer 4, 7, 9-10, 13, 29, 32-33, 37, 69, 85-86 Condizioni 12, 15 Controllo 4, 8-12, 14-15, 19, 21-27 U Utenti 4, 28, 41 V Valutazione delle vulnerabilità 15 Vulnerabilità 4, 11-12, 14-16, 84 W Whois 27-28 WMI 86 I In tempo reale 4 M Messaggi 5 N NetBIOS 33, 41 P Password 10, 16, 63-68, 71, 79 Profili 12 Profili di scansione 12, 15 Proxy 46, 48-49, 53-55, 59 Python 4, 14-15, 18 R Registro di sistema 41-46 Ricerca DNS 17, 27-28 S Script 4-6, 8-12, 14-15, 18, 21-26, 33-37, 41-62, 82-83, 85-86, 88 Script Debugger 4, 6, 8-10, 12, 14, 18, 20, 82, 88 Script Python 4, 14, 16 Server 20-21, 27, 29, 47-48, 53, 59-60, 62-66, 68-72, 74, 76-78 Sessioni 9-10 SNMP 28-31 SSH 4 T Trova 7, 88 GFI LanGuard Indice | 90 STATI UNITI D’AMERICA, CANADA E AMERICA CENTRALE E DEL SUD 4309 Emperor Blvd, Suite 400, Durham, NC 27703, USA Telefono: +1 (888) 243-4329 Fax: +1 (919) 379-3402 [email protected] REGNO UNITO E REPUBBLICA D'IRLANDA Magna House, 18-32 London Road, Staines-upon-Thames, Middlesex, TW18 4BP, Regno Unito Telefono: +44 (0) 870 770 5370 Fax: +44 (0) 870 770 5377 [email protected] EUROPA, MEDIORIENTE E AFRICA GFI House, Territorials Street, Mriehel BKR 3000, Malta Telefono: +356 2205 2000 Fax: +356 2138 2419 [email protected] AUSTRALIA E NUOVA ZELANDA 83 King William Road, Unley 5061, South Australia Telefono: +61 8 8273 3000 Fax: +61 8 8273 3099 [email protected]
© Copyright 2024 ExpyDoc