Come ottenere l'indirizzo IP del client di un utente in ASP.NET?


387

Dobbiamo Request.UserHostAddressottenere l'indirizzo IP in ASP.NET, ma di solito si tratta dell'indirizzo IP dell'ISP dell'utente, non esattamente dell'indirizzo IP della macchina dell'utente che, ad esempio, ha fatto clic su un collegamento. Come posso ottenere il vero indirizzo IP?

Ad esempio, in un profilo utente Stack Overflow è: "Ultima attività dell'account: 4 ore fa da 86.123.127.8" , ma l'indirizzo IP della mia macchina è leggermente diverso. In che modo Stack Overflow ottiene questo indirizzo?

In alcuni sistemi Web esiste un controllo dell'indirizzo IP per alcuni scopi. Ad esempio, con un determinato indirizzo IP, per ogni 24 ore l'utente può avere solo 5 clic sui collegamenti di download? Questo indirizzo IP dovrebbe essere univoco, non per un ISP che ha una vasta gamma di client o utenti Internet.

Ho capito bene?


4
Di solito fanno la stessa cosa e non funzionano correttamente per gli indirizzi IP condivisi. Non si può fare molto in quest'area.
Mehrdad Afshari,

Qual è il problema che stai cercando di risolvere qui, perché pensi di aver bisogno dell'indirizzo IP?
Steve,

3
ho un'applicazione che controlla i clic di un collegamento specifico e un utente specifico (tramite IP) non può fare clic sul collegamento più di 5 volte in un giorno. Il problema è che se Request.UserHostAddress è per un intervallo di utenti in un ISP o in rete o uno specifico utente?
Mehdi,

Risposte:


142

Come altri hanno già detto, non puoi fare quello che stai chiedendo. Se descrivi il problema che stai cercando di risolvere, forse qualcuno può aiutarti?

Per esempio

  • stai cercando di identificare in modo univoco i tuoi utenti?
  • Potresti usare un cookie o forse l'ID di sessione invece dell'indirizzo IP?

modificareL'indirizzo che vedi sul server non dovrebbe essere l'indirizzo dell'ISP, poiché dici che sarebbe un intervallo enorme. L'indirizzo per un utente di casa sulla banda larga sarà l'indirizzo del proprio router, quindi ogni dispositivo all'interno della casa apparirà all'esterno per essere lo stesso, ma il router utilizza NAT per garantire che il traffico venga instradato correttamente a ciascun dispositivo. Per gli utenti che accedono da un ambiente di ufficio l'indirizzo potrebbe essere lo stesso per tutti gli utenti. I siti che utilizzano l'indirizzo IP per l'ID corrono il rischio di sbagliarlo: gli esempi forniti sono validi e spesso falliscono. Ad esempio, il mio ufficio è nel Regno Unito, il punto di rottura (dove "mi sembra" di essere su Internet) è in un altro paese in cui si trova la nostra struttura IT principale, quindi dal mio ufficio il mio indirizzo IP sembra non essere nel Regno Unito. Per questo motivo non riesco ad accedere al solo contenuto web del Regno Unito, come BBC iPlayer). In qualsiasi momento ci sarebbero centinaia o addirittura migliaia di persone nella mia azienda che sembrano accedere al Web dallo stesso indirizzo IP.

Quando scrivi il codice del server non puoi mai essere sicuro di quale indirizzo IP stai vedendo. Ad alcuni utenti piace così. Alcune persone usano deliberatamente un proxy o una VPN per confonderti ulteriormente.

Quando dici che il tuo indirizzo macchina è diverso dall'indirizzo IP mostrato su StackOverflow, come stai scoprendo il tuo indirizzo macchina? Se stai solo guardando localmente usando ipconfigo qualcosa del genere, mi aspetto che sia diverso per i motivi che ho descritto sopra. Se vuoi ricontrollare cosa pensa il mondo esterno dai un'occhiata a whatismyipaddress.com/ .

Questo link di Wikipedia su NAT ti fornirà alcune informazioni al riguardo.


quindi ho capito nelle applicazioni lato server non possiamo essere sicuri dell'indirizzo IP. significa che la programmazione lato client è la soluzione ?? intendi ad esempio con alcuni codici JavaScript possiamo farlo ??
Mehdi,

12
No, questo sarebbe inutile, l'indirizzo IP che il client "pensa" che avrà sarà interno alla casa o all'ufficio, sarà privo di significato nel mondo esterno. Ad esempio, la maggior parte dei router domestici distribuisce gli indirizzi IP nell'intervallo 192.168.1.xxx, quindi migliaia di macchine hanno lo stesso indirizzo sulle proprie reti.
Steve,

12
No, non è unico. Due utenti dietro lo stesso router che utilizzano NAT avranno lo stesso indirizzo IP. Penso davvero che devi leggere su questo, vedi link nella mia modifica.
Steve,

1
Quindi perché aziende come AWS, Azure ecc. Usano l'indirizzo IP nelle regole del gruppo di sicurezza e consentono solo a quell'indirizzo IP di connettersi alla VM?

2
@ user5950947: perché Azure prevede che tu sia un'azienda con un indirizzo IP pubblico statico. È sicuro presumere che la tua azienda accederà solo dal suo indirizzo IP pubblico, quindi è una bella funzionalità di sicurezza aggiuntiva. Ma gli indirizzi IP possono essere falsificati o la tua rete può essere compromessa, quindi non dovrebbe mai essere l'unica sicurezza.
Deantwo,

449

Spesso vorrai conoscere l'indirizzo IP di qualcuno che visita il tuo sito web. Mentre ASP.NET ha diversi modi per farlo, uno dei modi migliori che abbiamo visto è usare "HTTP_X_FORWARDED_FOR" della raccolta ServerVariables.

Ecco perché...

A volte i visitatori si trovano dietro un server proxy o un router e lo standard Request.UserHostAddressacquisisce solo l'indirizzo IP del server proxy o del router. In questo caso, l'indirizzo IP dell'utente viene quindi memorizzato nella variabile del server ("HTTP_X_FORWARDED_FOR").

Quindi quello che vogliamo fare è prima controllare "HTTP_X_FORWARDED_FOR" e se quello è vuoto, allora semplicemente ritorniamo ServerVariables("REMOTE_ADDR").

Sebbene questo metodo non sia infallibile, può portare a risultati migliori. Di seguito è riportato il codice ASP.NET in VB.NET, tratto dal post sul blog di James Crowley "Gotcha: HTTP_X_FORWARDED_FOR restituisce più indirizzi IP"

C #

protected string GetIPAddress()
{
    System.Web.HttpContext context = System.Web.HttpContext.Current; 
    string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (!string.IsNullOrEmpty(ipAddress))
    {
        string[] addresses = ipAddress.Split(',');
        if (addresses.Length != 0)
        {
            return addresses[0];
        }
    }

    return context.Request.ServerVariables["REMOTE_ADDR"];
}

VB.NET

Public Shared Function GetIPAddress() As String
    Dim context As System.Web.HttpContext = System.Web.HttpContext.Current
    Dim sIPAddress As String = context.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    If String.IsNullOrEmpty(sIPAddress) Then
        Return context.Request.ServerVariables("REMOTE_ADDR")
    Else
        Dim ipArray As String() = sIPAddress.Split(New [Char]() {","c})
        Return ipArray(0)
    End If
End Function

24
Assicurati di non utilizzare questo codice per motivi di sicurezza perché chiunque può falsificare HTTP_X_FORWARDED_FOR o intestazioni simili. Pertanto, se lo si utilizza per la registrazione relativa alla sicurezza o per i controlli di sicurezza, un utente malintenzionato può ignorarlo facilmente.
dott. male il

4
Dal tuo link, what we actually needed to be doing was take the last IP addressma il tuo codice ottiene il primo addresses[0]. Che è corretto?
Nelson Rothermel,

4
@NelsonRothermel Basato su en.wikipedia.org/wiki/X-Forwarded-For#Format se vuoi il client (piuttosto che il proxy precedente) usa il primo .
Richard,

4
@ dr.evil Cosa proporresti invece? Perché voglio impostare l'accesso per i servizi WCF tramite IP specificati.
Krypru,

7
addresses.Length != 0non è necessario, poiché non può mai essere 0.
James Wilkins,

78

AGGIORNAMENTO: Grazie a Bruno Lopes. Se potrebbero venire più indirizzi IP, è necessario utilizzare questo metodo:

    private string GetUserIP()
    {
        string ipList = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (!string.IsNullOrEmpty(ipList))
        {
            return ipList.Split(',')[0];
        }

        return Request.ServerVariables["REMOTE_ADDR"];
    }

3
Come indicato in un'altra risposta, HTTP_X_FORWARDED_FOR può essere un elenco di IP, separati da virgole.
Bruno Lopes,

In risposta alla funzione ottengo sempre :: 1 ogni volta. Non riesco a ottenere l'indirizzo IP completo ???
Farhangdon,

1
restituirà :: 1 sull'host locale. provalo sull'ambiente productino e dovrebbe andare bene.
Benny Margalit,

1
@farhangdon, il seguente codice restituirà l'indirizzo IP nell'host locale come @Bat_Programmer ha scritto di seguitoSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit,

NON FARE QUESTO! Fare attenzione a non utilizzare semplicemente il primo indirizzo IP nell'elenco. È necessario saltare solo gli IP proxy noti iniziando dalla voce più a destra per evitare attacchi man-in-the-middle e spoofing delle intestazioni.
Jpsy,

24

Se è c # vedere in questo modo, è molto semplice

string clientIp = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? 
                   Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();

8
Se entrambe le variabili del server possono essere nulle, può generare eccezioni.
Michael Freidgeim,

Che cos'è il riferimento alle richieste qui? I ServerVariabili non trovati
Brownbagger11

23

Cos'altro consideri l'indirizzo IP dell'utente? Se desideri l'indirizzo IP della scheda di rete, temo che non sia possibile farlo in un'app Web. Se l'utente si trova dietro NAT o altre cose, non è nemmeno possibile ottenere l'IP.

Aggiornamento : mentre ci sono siti Web che utilizzano l'IP per limitare l'utente (come rapidshare), non funzionano correttamente negli ambienti NAT.


22

Penso che dovrei condividere la mia esperienza con tutti voi. Bene, vedo in alcune situazioni che REMOTE_ADDR NON ti darà quello che stai cercando. Ad esempio, se si dispone di un bilanciamento del carico dietro la scena e se si sta tentando di ottenere l'IP del cliente, si avranno problemi. L'ho verificato con il mio software di mascheramento IP e ho anche verificato che i miei colleghi si trovassero in diversi continenti. Quindi ecco la mia soluzione.

Quando voglio conoscere l'IP di un client, provo a raccogliere tutte le prove possibili in modo da poter determinare se sono univoci:

Qui ho trovato un altro sever-var che potrebbe aiutarti tutti se vuoi ottenere l'IP esatto del lato client. quindi sto usando: HTTP_X_CLUSTER_CLIENT_IP

HTTP_X_CLUSTER_CLIENT_IP ti fornisce sempre l'IP esatto del client. In ogni caso, se non ti dà il valore, dovresti quindi cercare HTTP_X_FORWARDED_FOR in quanto è il secondo miglior candidato a procurarti l'IP del client e quindi la var REMOTE_ADDR che può o meno restituirti l'IP ma a me avere tutti questi tre è quello che trovo la cosa migliore per monitorarli.

Spero che questo aiuti alcuni ragazzi.


Deve dire che le intestazioni http_x _... possono essere facilmente falsificate rispetto alla variabile remote_addr. E quindi remote_addr rimane la fonte più affidabile per l'indirizzo IP del client.
Ciro Corvino,

1
@CiroCorvino hai ragione, ma quando il tuo sito web è ospitato su un server che è in esecuzione dietro Load Balancer (come ho già detto nel mio post), remote_addr non ti darà l'IP che stai cercando. Ho sperimentato quello che stai dicendo, ma quando ho scavato nella soluzione quello che ho affermato funziona meglio per me.
KMX

Scusate @KMX, in effetti utilizzo anche una combinazione di remote_addr e http_x_forwarded per dedurre alcune ipotesi sull'origine della richiesta. Se modifichi il tuo post, aggiorno il mio voto
Ciro Corvino,

15

Puoi usare:

System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();

1
grazie, per me questo è l'unico metodo che restituisce veramente il mio IP sull'host locale.
Benny Margalit,

In realtà quello che ho usato per ottenere l'indirizzo IP dell'host locale èSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit,

1
Questo codice funziona solo per me e sono in grado di ottenere IPv6 e IPv4 utilizzando rispettivamente GetValue (0) e GetValue (1). Grazie votato!
Raj Baral

Tuttavia, visualizzo un errore durante l'esecuzione in fiddle Request for the permission of type 'System.Net.DnsPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
vibs2006,

OP che chiede come ottenere l'IP dell'utente remoto, non l'indirizzo del proprio host locale.
martedì

13

Gli indirizzi IP fanno parte del livello Network nello "stack a sette livelli". Il livello Rete può fare qualsiasi cosa voglia fare con l'indirizzo IP. Questo è ciò che accade con un server proxy, NAT, relay o altro.

Il livello applicazione non dovrebbe dipendere in alcun modo dall'indirizzo IP. In particolare, un indirizzo IP non è pensato per essere un identificatore di qualcosa di diverso dall'identificatore di un'estremità di una connessione di rete. Non appena viene chiusa una connessione, dovresti aspettarti che l'indirizzo IP (dello stesso utente) cambi.


1
Va tutto bene, ma cosa fai quando un cliente di un sistema multi-tenant richiede che gli account dei propri utenti possano accedere solo da un indirizzo IP specificato?
Ronnie Overby,

1
Quindi devono dirti quale indirizzo IP vedrà il tuo server. Se hanno bisogno che ci sia un indirizzo particolare, allora non saranno in grado di essere dietro un NAT o simile.
John Saunders,

@RonnieOverby Sono nella stessa situazione. Devo sapere da quale IP si stanno connettendo e deve essere nella mia lista bianca. Quindi l'app può attivare o disattivare determinate funzionalità in base al loro IP. Questo è ciò che il cliente desidera.
martedì

10

Tutte le risposte finora tengono conto dell'intestazione non standardizzata, ma molto comune X-Forwarded-For. C'è Forwardedun'intestazione standardizzata che è un po 'più difficile da analizzare. Alcuni esempi sono i seguenti:

Forwarded: for="_gazonk"
Forwarded: For="[2001:db8:cafe::17]:4711"
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
Forwarded: for=192.0.2.43, for=198.51.100.17

Ho scritto una classe che tiene conto di entrambe queste intestazioni nel determinare l'indirizzo IP di un client.

using System;
using System.Web;

namespace Util
{
    public static class IP
    {
        public static string GetIPAddress()
        {
            return GetIPAddress(new HttpRequestWrapper(HttpContext.Current.Request));
        }

        internal static string GetIPAddress(HttpRequestBase request)
        {
            // handle standardized 'Forwarded' header
            string forwarded = request.Headers["Forwarded"];
            if (!String.IsNullOrEmpty(forwarded))
            {
                foreach (string segment in forwarded.Split(',')[0].Split(';'))
                {
                    string[] pair = segment.Trim().Split('=');
                    if (pair.Length == 2 && pair[0].Equals("for", StringComparison.OrdinalIgnoreCase))
                    {
                        string ip = pair[1].Trim('"');

                        // IPv6 addresses are always enclosed in square brackets
                        int left = ip.IndexOf('['), right = ip.IndexOf(']');
                        if (left == 0 && right > 0)
                        {
                            return ip.Substring(1, right - 1);
                        }

                        // strip port of IPv4 addresses
                        int colon = ip.IndexOf(':');
                        if (colon != -1)
                        {
                            return ip.Substring(0, colon);
                        }

                        // this will return IPv4, "unknown", and obfuscated addresses
                        return ip;
                    }
                }
            }

            // handle non-standardized 'X-Forwarded-For' header
            string xForwardedFor = request.Headers["X-Forwarded-For"];
            if (!String.IsNullOrEmpty(xForwardedFor))
            {
                return xForwardedFor.Split(',')[0];
            }

            return request.UserHostAddress;
        }
    }
}

Di seguito sono riportati alcuni test unit che ho usato per convalidare la mia soluzione:

using System.Collections.Specialized;
using System.Web;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UtilTests
{
    [TestClass]
    public class IPTests
    {
        [TestMethod]
        public void TestForwardedObfuscated()
        {
            var request = new HttpRequestMock("for=\"_gazonk\"");
            Assert.AreEqual("_gazonk", Util.IP.GetIPAddress(request));
        }

        [TestMethod]
        public void TestForwardedIPv6()
        {
            var request = new HttpRequestMock("For=\"[2001:db8:cafe::17]:4711\"");
            Assert.AreEqual("2001:db8:cafe::17", Util.IP.GetIPAddress(request));
        }

        [TestMethod]
        public void TestForwardedIPv4()
        {
            var request = new HttpRequestMock("for=192.0.2.60;proto=http;by=203.0.113.43");
            Assert.AreEqual("192.0.2.60", Util.IP.GetIPAddress(request));
        }

        [TestMethod]
        public void TestForwardedIPv4WithPort()
        {
            var request = new HttpRequestMock("for=192.0.2.60:443;proto=http;by=203.0.113.43");
            Assert.AreEqual("192.0.2.60", Util.IP.GetIPAddress(request));
        }

        [TestMethod]
        public void TestForwardedMultiple()
        {
            var request = new HttpRequestMock("for=192.0.2.43, for=198.51.100.17");
            Assert.AreEqual("192.0.2.43", Util.IP.GetIPAddress(request));
        }
    }

    public class HttpRequestMock : HttpRequestBase
    {
        private NameValueCollection headers = new NameValueCollection();

        public HttpRequestMock(string forwarded)
        {
            headers["Forwarded"] = forwarded;
        }

        public override NameValueCollection Headers
        {
            get { return this.headers; }
        }
    }
}

9

Se stai usando CloudFlare, puoi provare questo metodo di estensione :

public static class IPhelper
{
    public static string GetIPAddress(this HttpRequest Request)
    {
        if (Request.Headers["CF-CONNECTING-IP"] != null) return Request.Headers["CF-CONNECTING-IP"].ToString();

        if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) return Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();

        return Request.UserHostAddress;
    }
}

poi

string IPAddress = Request.GetIPAddress();

E usando F5 o Palo Alto?
Kiquenet,

8
string IP = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;

7

Quello che puoi fare è archiviare l'IP del router del tuo utente e anche l'IP inoltrato e provare a renderlo affidabile utilizzando entrambi gli IP [esterno pubblico e interno privato]. Ma dopo alcuni giorni al client potrebbe essere assegnato un nuovo IP interno dal router, ma sarà più affidabile.


5

Combinando le risposte di @Tony e @mangokun , ho creato il seguente metodo di estensione:

public static class RequestExtensions
{
    public static string GetIPAddress(this HttpRequest Request)
    {
        if (Request.Headers["CF-CONNECTING-IP"] != null) return Request.Headers["CF-CONNECTING-IP"].ToString();

        if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
        {
            string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if (!string.IsNullOrEmpty(ipAddress))
            {
                string[] addresses = ipAddress.Split(',');
                if (addresses.Length != 0)
                {
                    return addresses[0];
                }
            }
        }

        return Request.UserHostAddress;
    }
}

Perché usi HTTP_X_FORWARDED_FORma no X_FORWARDED_FOR? Sono gli stessi?
Igor Yalovoy,

3

utilizzare nel file ashx

public string getIP(HttpContext c)
{
    string ips = c.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    if (!string.IsNullOrEmpty(ips))
    {
        return ips.Split(',')[0];
    }
    return c.Request.ServerVariables["REMOTE_ADDR"];
}

2
public static class Utility
{
    public static string GetClientIP(this System.Web.UI.Page page)
    {
        string _ipList = page.Request.Headers["CF-CONNECTING-IP"].ToString();
        if (!string.IsNullOrWhiteSpace(_ipList))
        {
            return _ipList.Split(',')[0].Trim();
        }
        else
        {
            _ipList = page.Request.ServerVariables["HTTP_X_CLUSTER_CLIENT_IP"];
            if (!string.IsNullOrWhiteSpace(_ipList))
            {
                return _ipList.Split(',')[0].Trim();
            }
            else
            {
                _ipList = page.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (!string.IsNullOrWhiteSpace(_ipList))
                {
                    return _ipList.Split(',')[0].Trim();
                }
                else
                {
                    return page.Request.ServerVariables["REMOTE_ADDR"].ToString().Trim();
                }
            }
        }
    }
}

Uso;

string _ip = this.GetClientIP();

0

È facile. Provalo:

var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

solo :))


1
Cordiali saluti, il codice sopra funziona solo in Asp.Net Core e non nel normale collegamento
Dobin

-1

Ciao ragazzi La maggior parte dei codici che troverete restituiranno l'indirizzo IP del vostro server non l'indirizzo IP del client. Tuttavia, questo codice restituisce l'indirizzo IP client corretto. Provatelo. Per maggiori informazioni basta controllare questo

https://www.youtube.com/watch?v=Nkf37DsxYjI

per ottenere il tuo indirizzo IP locale tramite JavaScript puoi usare questo codice all'interno del tag dello script

<script>
    var RTCPeerConnection = /*window.RTCPeerConnection ||*/
     window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

         if (RTCPeerConnection) (function () {
             var rtc = new RTCPeerConnection({ iceServers: [] });
             if (1 || window.mozRTCPeerConnection) {      
                 rtc.createDataChannel('', { reliable: false });
             };

             rtc.onicecandidate = function (evt) {

                 if (evt.candidate)
                     grepSDP("a=" + evt.candidate.candidate);
             };
             rtc.createOffer(function (offerDesc) {
                 grepSDP(offerDesc.sdp);
                 rtc.setLocalDescription(offerDesc);
             }, function (e) { console.warn("offer failed", e); });


             var addrs = Object.create(null);
             addrs["0.0.0.0"] = false;
             function updateDisplay(newAddr) {
                 if (newAddr in addrs) return;
                 else addrs[newAddr] = true;
                 var displayAddrs = Object.keys(addrs).filter(function
(k) { return addrs[k]; });
                 document.getElementById('list').textContent =
displayAddrs.join(" or perhaps ") || "n/a";
             }

             function grepSDP(sdp) {
                 var hosts = [];
                 sdp.split('\r\n').forEach(function (line) { 
                     if (~line.indexOf("a=candidate")) {   
                         var parts = line.split(' '),   
                             addr = parts[4],
                             type = parts[7];
                         if (type === 'host') updateDisplay(addr);
                     } else if (~line.indexOf("c=")) {      
                         var parts = line.split(' '),
                             addr = parts[2];
                         updateDisplay(addr);
                     }
                 });
             }
         })(); else
         {
             document.getElementById('list').innerHTML = "<code>ifconfig| grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1</code>";
             document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";

         }




</script>
<body>
<div id="list"></div>
</body>

e per ottenere il tuo indirizzo IP pubblico puoi usare questo codice all'interno del tag dello script

  function getIP(json) {
    document.write("My public IP address is: ", json.ip);
  }


<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>


-7

Provare:

using System.Net;

public static string GetIpAddress()  // Get IP Address
{
    string ip = "";     
    IPHostEntry ipEntry = Dns.GetHostEntry(GetCompCode());
    IPAddress[] addr = ipEntry.AddressList;
    ip = addr[2].ToString();
    return ip;
}
public static string GetCompCode()  // Get Computer Name
{   
    string strHostName = "";
    strHostName = Dns.GetHostName();
    return strHostName;
}

Questo restituisce l'indirizzo IP del server
Sreekumar P,

Si tratta di asp.net, che è un'applicazione web, che gira su un server, non sul computer degli utenti.
doekman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.