IP PUBBLICO DINAMICO ver. 1.2

Per poter sempre sapere il proprio ip dinamico ci sono vari sistemi.
Tempo fa alcuni siti come dyndns permettevano gratuitamente di registrarsi e di sapere sempre il proprio ip, ma ad oggi i migliori sono a pagamento.
Altri sono gratuiti, ma i router non permettono la parametrizzazione di questi siti all'interno dell'interfaccia.
Per ovviare a questo problema, in collaborazione con un amico, pubbichiamo di seguito uno script in Vbs, che lanciato su un pc e lasciato girare in background, permette di ricevere una mail con il proprio indirizzo ip pubblico. Inoltre ad ogni variazione di quell'ip, una nuova mail aggiornata sarà spedita.
Il batch gestisce anche l'errore dovuto a una perdita di connessione internet e al ripristinarsi, se l'indirizzo ip è cambiato, sarà inviata una nuova mail.
Ogni controllo che fa lo script, viene tracciato in un file di log.
Lo script funziona con un account gmail, di seguito la procedura:
 
   e permettere allo script di utilizzare il proprio indirizzo gmail per mandare la mail a se stessi.
   Sarà sufficiente consentire "si" all' "Accesso per app meno sicure".
   Vi arriverà da google una mail di notifica dopo aver confermato questa opzione.
 
2. Copiare in un file di testo il seguente codice e chiamarlo sendIP.vbs
 
--------------------------------------------------
'****SendIP v1.2
'****Configura posta - SOLO GMAIL per il mittente (altrimenti cambia anche smtp.gmail.com)
'****abilita su GMAIL https://www.google.com/settings/security/lesssecureapps
Const fromEmail = "xxxxxxxxxxx@gmail.com"
Const password = "xxxxxxxxxx"
Const toEmail = "xxxxxxxxxxxxx@gmail.com"
Const checkmin = 1 'intervallo di controllo in minuti
'****fine configura posta
'variabili
Dim strresponse
Dim strIP
Dim strIPprevious
Dim emailObj, emailConfig, content, i
Dim http : Set http = CreateObject( "MSXML2.ServerXmlHttp" )
Set oWSH = CreateObject("WScript.Shell")
vbsInterpreter = "cscript.exe"
i = 1
'inizio
Call ForceConsole()
 printf "SendIP v1.2"
 strIP=""
 strIPprevious=""
 Do
prdata
printf "Check numero: " & i
'cerco IP
On Error Resume Next
http.Open "GET", "https://icanhazip.com", False
'http.Open "GET", "https://localhost/", False
http.Send
'Gestisco l'errore
If Err.Number <> 0 then
 'errore
 Messaggio = GestisciErrore(Err.Number, Err.Description)
 prdata
 printf Messaggio
 'sendthemail Messaggio,"warning"
Else
'nessun errore   
strresponse = http.responsetext
 
If IsValidIPAddress(strresponse) then
prdata
printf "risposta: " & strresponse
strIP = strresponse
'check If the IP is changed after the first time before to send the email
'If strIP <> "" and strIP <> strIPprevious then 
if strIP <> strIPprevious then 
'yes, IP is changed
'reset del flag
prdata
printf "invio IP " & strIP
sendthemail strIP,"IP"
Else
'warning IP is not changed with timestamp
prdata
printf "L'IP è sempre " & strIP & ", nessuna mail spedita"
End If
Else
'problems with https://icanhazip.com
prdata
printf "https://icanhazip.com non è disponibile"
'sendthemail "https://icanhazip.com non è disponibile","warning"
End If
 
 
End If
Err.Clear
'Wscript.Echo strIP   
prdata
printf "In attesa nuovo check"
wait(checkmin)
i = i + 1
Loop
Set http = Nothing
Set strresponse = nothing
'fine
 
Sub sendthemail (content,tipo)
Set emailObj      = CreateObject("CDO.Message")
emailObj.From     = fromEmail
emailObj.To       = toEmail
emailObj.Subject  = "myIPaddress"
emailObj.TextBody = content
 
Set emailConfig = emailObj.Configuration
emailConfig.Fields("https://schemas.microsoft.com/cdo/configuration/smtpserver")       = "smtp.gmail.com"
emailConfig.Fields("https://schemas.microsoft.com/cdo/configuration/smtpserverport")   = 465
emailConfig.Fields("https://schemas.microsoft.com/cdo/configuration/sendusing")        = 2
emailConfig.Fields("https://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
emailConfig.Fields("https://schemas.microsoft.com/cdo/configuration/smtpusessl")       = true
emailConfig.Fields("https://schemas.microsoft.com/cdo/configuration/sendusername")     = fromEmail
emailConfig.Fields("https://schemas.microsoft.com/cdo/configuration/sendpassword")     = password
emailConfig.Fields.Update
On Error Resume Next
emailObj.Send
'Gestisco l'errore
If Err.Number <> 0 then
prdata
printf "Non è stato possibile inviare la email"
Call  GestisciErrore(Err.Number, Err.Description)
Else
if tipo = "IP" then 
prdata
printf "Nuovo IP "&strIP&" spedito"
strIPprevious=strIP
End If
End If
Err.Clear
'Wscript.Echo "Invio email" 
Set emailobj = nothing
Set emailConfig = nothing
End Sub
 
Function ForceConsole()
    If InStr(LCase(WScript.FullName), vbsInterpreter) = 0 Then
        oWSH.Run vbsInterpreter & " //NoLogo " & Chr(34) & WScript.ScriptFullName & Chr(34)
        WScript.Quit
    End If
 End Function
 
 Function printf(txt)
    WScript.StdOut.WriteLine txt
 End Function
 
 Function printl(txt)
    WScript.StdOut.Write txt
 End Function
 
 'funzione pausa
 Function wait(n)
    WScript.Sleep Int(n * 60000) 'minuti
 End Function
 
 'stampa data
 Function prdata()
strSafeDate = Right("0" & DatePart("d",Date), 2) &"-"& Right("0" & DatePart("m",Date), 2) &"-"& DatePart("yyyy",Date) 
strSafeTime = Right("0" & Hour(Now), 2) &":"& Right("0" & Minute(Now), 2) &":"& Right("0" & Second(Now), 2) 
printl strSafeDate & " " & strSafeTime & "  "
 End Function
 
 'La procedura per la gestione dell'errore, stampa data e messaggio
Sub GestisciErrore(NumeroErrore, DescrizioneErrore)
  'compongo il messaggio
   Messaggio = "Errore nell'applicazione" & vbCrLf
   Messaggio = Messaggio & "Numero errore: " & NumeroErrore & vbCrLf
   Messaggio = Messaggio & "Descrizione Errore: " & DescrizioneErrore
   prdata
   printf Messaggio
   GestisciErrore = Messaggio
 End Sub
 
 Function IsValidIPAddress (strIPAddress)
     On Error Resume Next
     Dim varAddress, n , lCount
if strIPAddress is not null and strIPAddress<>"" then
varAddress = Split(strIPAddress, ".",-1, 1)
'//
If IsArray(varAddress) Then
For n = LBound(varAddress) To UBound(varAddress)
lCount = lCount + 1
varAddress(n) = CByte(varAddress(n))
Next
'//
IsValidIPAddress = (lCount = 4)
End If
else
IsValidIPAddress=False
end if
     '//
On Error GoTo 0
 End Function
--------------------------------------------------
 
3. Modificare indirizzo e-mail e password di accesso a gmail, ovviamente l'indirizzo email di spedizione dovrà essere quello che avete autorizzato all'accesso ad "Accesso per app meno sicure"
4. Creare un file run.bat con scritto:
 
------------------------------
cscript sendIP.vbs > sendIP.log
------------------------------
 
5. depositare entrambi i file nella stessa cartella
6. Lanciare run.bat   
7. il log verrà generato nello stesso percorso dei due file creati con il nome di sendIP.log e verrà sovrascritto ad ogni riavvio dello script.
 
 

Contattami sulla pagina Facebook :  DG Project