+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 1 su 1

Ricavare IP Pubblico

  1. #1
    Ricavare IP Pubblico



    Livello: Principiante/Intermedio


    Introduzione:

    In questo esempio vedremo come sia possibile ricavare il proprio indirizzo ip pubblico attraverso l'ausilio di siti esterni. I siti utilizzati per lo scopo sono: What Is My IP Address - Shows Your IP Address e Current IP Check


    Namespaces:

    Per l'utilizzo del codice sono richiesti i seguenti Namespaces:

    Imports System.Net
    Imports System.Text.RegularExpressions



    Codice

    Il codice è composto da 2 funzioni: nel caso in cui la prima funzione non riesca a ricavare l'ip dal primo sito, verrà richiamata la seconda che proverà sul sito alternativo.

    Vediamo la funzione principale:


    Public Function GetExternalIp() As IPAddress
    Dim MyExternalIp As IPAddress
    Try
    '-- creo la richiesta
    Dim Request As HttpWebRequest = CType(WebRequest.Create("http://whatismyip.com/automation/n09230945.asp"), HttpWebRequest)
    '-- imposto un timeout di 5 secondi
    Request.Timeout = 5000
    '-- ricevo la risposta
    Dim Response As HttpWebResponse = CType(Request.GetResponse(), HttpWebResponse)
    Dim responseStream As IO.StreamReader = New IO.StreamReader(Response.GetResponseStream, System.Text.Encoding.GetEncoding("iso-8859-1"))
    Dim Result As String = responseStream.ReadToEnd
    responseStream.Close()
    Response.Close()
    '-- creo l'ip dai dati ricevuti
    Try
    MyExternalIp = IPAddress.Parse(Result)
    '-- se non ricevo l'ip
    '-- provo a ricavare l'ip da un sito alternativo
    Catch e As ArgumentNullException
    MyExternalIp = GetExternalIpAlternative()
    Catch e As FormatException
    MyExternalIp = GetExternalIpAlternative()
    End Try
    '-- ritorno l'ip
    Return MyExternalIp
    Catch ex As WebException
    '-- se ricevo errori nella connessione al sito
    '-- provo a ricavare l'ip da un sito alternativo
    Return GetExternalIpAlternative()
    End Try
    End Function


    Niente di particolare, sono state utilizzate le Classi HttpWebRequest e HttpWebResponse per connettersi al primo sito e ricevere la risposta; Nel caso di esito positivo verrà ritornato l'IPADDRESS convertito dalla risposta, altrimenti verrà richiamata la seconda funzione alternativa.

    Vediamo la Funzione Alternativa:


    Private Function GetExternalIpAlternative() As IPAddress
    Dim MyExternalIp As IPAddress
    Try
    '-- creo la richiesta
    Dim Request As HttpWebRequest = CType(WebRequest.Create("http://checkip.dyndns.com"), HttpWebRequest)
    '-- imposto un timeout di 5 secondi
    Request.Timeout = 5000
    '-- ricevo la risposta
    Dim Response As HttpWebResponse = CType(Request.GetResponse(), HttpWebResponse)
    Dim responseStream As IO.StreamReader = New IO.StreamReader(Response.GetResponseStream, System.Text.Encoding.GetEncoding("iso-8859-1"))
    '-- estrapolo l'ip con l'aiuto di una Regex
    Dim Result As String = Regex.Match(responseStream.ReadToEnd, "(?<ip>\d+\.\d+\.\d+\.\d+)").Groups("ip").Value
    responseStream.Close()
    Response.Close()
    '-- creo l'ip dai dati ricevuti
    Try
    MyExternalIp = IPAddress.Parse(Result)
    '-- se non ricevo l'ip
    '-- ritorno valore nullo
    Catch e As ArgumentNullException
    Return Nothing
    Catch e As FormatException
    Return Nothing
    End Try
    '-- ritorno l'ip
    Return MyExternalIp
    Catch ex As WebException
    '-- se ricevo errori nella connessione al sito
    '-- ritorno valore nullo
    Return Nothing
    End Try
    End Function


    Anche qui sono state utilizzate le Classi HttpWebRequest e HttpWebResponse ma in aggiunta è stata inserita una Regex per estrapolare in modo corretto i dati che ci interessano (ovvero l'IP in formato String).


    Il pattern utilizzato: "(?<ip>\d+\.\d+\.\d+\.\d+)" effettua le seguenti operazioni:
    • Crea un gruppo, denominato ip, attraverso l'uso del costrutto di raggruppamento (?<name> ...... )
    • All'interno di questo gruppo salva la corrispondenza dell'espressione: \d+\.\d+\.\d+\.\d+
    I raggruppamenti ci permettono di richiamare in maniera più chiara le porzioni di stringa che vogliamo estrapolare nel caso in cui volessimo estrapolare più informazioni, io sono abituato ad utilizzarli anche per singoli valori, mi rendono più leggibile quello che sto facendo.


    Vediamo come richiamare la funzione per ottenere l'IP (magari nell'evento Click di un Button):


    Dim MyExternalIp As IPAddress = GetExternalIp()
    If MyExternalIp IsNot Nothing Then
    MessageBox.Show(MyExternalIp.ToString)
    Else
    MessageBox.Show("Impossibile ricavare Ip Pubblico", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If



    Alla prossima.

    Ultima modifica di Fix; 08-03-2021 14:58  Motivo: Corretta la visualizzazione codice
    ℹ️ Leggi di più su Fix ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. [C++] cambio ip pubblico
    Da spyker10 nel forum C/C++
    Risposte: 1
    Ultimo Post: 29-03-2013, 18:05
  2. VB6 IP Pubblico
    Da Snake nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 07-06-2011, 12:52
  3. IP Pubblico (Delphi7)
    Da camaleonteplus nel forum Delphi
    Risposte: 2
    Ultimo Post: 07-05-2011, 15:48
  4. ISP e IP Pubblico
    Da motoboy nel forum Networking e sicurezza
    Risposte: 2
    Ultimo Post: 09-10-2008, 14:00
  5. Winsock IP pubblico
    Da nickn@me nel forum Visual Basic 6
    Risposte: 10
    Ultimo Post: 05-08-2005, 16:45