Ottenere l'ip del client

lunedì 30 gennaio 2012 - 15.24
Tag Elenco Tags  VB.NET  |  .NET 3.5

volperubbia Profilo | Senior Member

Ciao a tutti,
avrei bisogno di ottenere l'indirizzo ip del client che si collega alla mia applicazione ASP.NET 3.5
(tipo quello che si ottiene andando su http://www.whatismyip.com/). Ho provato queste strade:

Public Function UserHostAddress_1() As String
Return (From addr In System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList() _
Where addr.AddressFamily = Net.Sockets.AddressFamily.InterNetwork _
Select addr).FirstOrDefault().ToString ' FORSE QUESTO E' GIUSTO
End Function

Public Function UserHostAddress_2() As String
Return IIf(HttpContext.Current.Request.UserHostAddress.Equals("::1"), "127.0.0.1", HttpContext.Current.Request.UserHostAddress).ToString()
End Function

Public Function UserHostAddress_3() As String
Dim ip = HttpContext.Current.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If String.IsNullOrEmpty(ip) Then
Return HttpContext.Current.Request.ServerVariables("REMOTE_ADDR")
Else
Return ip.Split(","c)(ip.Split(","c).Length - 1)
End If
End Function

Public Function UserHostAddress_4() As String
Dim ip = HttpContext.Current.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If String.IsNullOrEmpty(ip) Then
Return HttpContext.Current.Request.ServerVariables("REMOTE_ADDR")
Else
Return ip.Split(New [Char]() {","c})(0)
End If
End Function

Public Function UserHostAddress_5() As String
Return HttpContext.Current.Request.UserHostAddress
End Function

Public Function UserHostAddress_6() As String
Return HttpContext.Current.Request.ServerVariables("REMOTE_ADDR")
End Function

ma con nessuna ottengo lo stesso risultato. Qualche idea?

Grazie per l'attenzione,
Davide

luigidibiasi Profilo | Guru

dai un'occhiata qui
http://msdn.microsoft.com/it-it/library/system.net.ipendpoint.aspx

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
http://yadamp.unisa.it/ - YADAMP CMS -

martinez Profilo | Senior Member

Ciao!
Quando il tuo browser richiede una pagina web ad un SEVRVER, invia anche alcune intestazioni, ad esempio: tipo di browser, la o le lingue supportate, ed anche il proprio indirizzo IP.
Nel caso degli IP, sono disponibili due "server variables" piuttosto interessanti: REMOTE_ADDR e HTTP_X_FORWARDED_FOR che rilevano l'indirizzo IP del visitatore. Purtroppo alcuni Client accedono attraverso "terze parti" (per es. un proxy), ragion per cui la variabile del server REMOTE_ADDR non conterrà più il loro indirizzo IP, che sarà contenuta invece in HTTP_X_FORWARDED_FOR e che rappresenta ad esempio l'IP del Proxy server utilizzato oppure, l'IP del firewall a monte della DMZ di una rete locale. Se, ci troviamo in presenza di uno di questi casi quindi, la richiesta diretta di REMOTE_ADDR genererebbe un errore 500 della pagina (errore interno del SERVER). Viene quindi in nostro soccorso HTTP_X_FORWARDED_FOR che contiene l'IP "fittizio" dell'utente. Quindi, per prima cosa, controlleremo il contenuto della variabile HTTP_X_FORWARDED_FOR, poi, se vuoto, controlleremo REMOTE_ADDR. Vediamo come:

string clientIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (String.IsNullOrEmpty(clientIP)) clientIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

Antonio

volperubbia Profilo | Senior Member

Ciao, grazie.
Il problema è che i metodi precedenti non generano risultati attendibili ad esempio se gli utenti
accedono all'applicazione web da clients in una rete aziendale (ottengo l'ip in uscita aziendale per tutti i client).

Il contesto è il seguente:
- sul client ho un applicativo C che gira (è win e ha una determinata chiave impostata durante l'installazione)
- sul server ho un applicazione W (un sito asp.net).

In pratica quando l'utente oltre ad usare l'applicativo C, apre il browser e si collega al sito del server S,
vorrei conoscere dal sito quel'è l'id o la chiave dell'applicativo client che sta girando in quello stesso momento ...

Qualche idea?
Davide

luigidibiasi Profilo | Guru

>Ciao, grazie.
>Il problema è che i metodi precedenti non generano risultati
>attendibili ad esempio se gli utenti
>accedono all'applicazione web da clients in una rete aziendale
>(ottengo l'ip in uscita aziendale per tutti i client).
si, se c'è un NAT vedi per forza un indirizzo univoco poiché quello è il solo indirizzo IP che ha acquistato l'azienda... i client dietro al nat hanno indirizzi di tipo 168.xxx che a te non possono dare informazioni poiché non valgono su internet

>
>Il contesto è il seguente:
>- sul client ho un applicativo C che gira (è win e ha una determinata
>chiave impostata durante l'installazione)

>vorrei conoscere dal sito quel'è l'id o la chiave dell'applicativo
>client che sta girando in quello stesso momento ...
>
la chiave va' associata all'utilizzatore e non al pc (un po' come fa' windows che associa le key all'hardware della macchina) ... una key univoca per ogni utilizzatore che poi ti fai inviare (senza badare agli IP)

>Qualche idea?
>Davide

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
http://yadamp.unisa.it/ - YADAMP CMS -
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5