Guida di GFI Software

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]