Comment obtenir l'adresse IP du client d'un utilisateur dans ASP.NET?

387

Nous devons Request.UserHostAddressobtenir l'adresse IP dans ASP.NET, mais c'est généralement l'adresse IP du FAI de l'utilisateur, pas exactement l'adresse IP de la machine de l'utilisateur qui, par exemple, a cliqué sur un lien. Comment puis-je obtenir la véritable adresse IP?

Par exemple, dans un profil utilisateur Stack Overflow, c'est: "Dernière activité de compte: il y a 4 heures depuis 86.123.127.8" , mais l'adresse IP de ma machine est un peu différente. Comment Stack Overflow obtient-elle cette adresse?

Dans certains systèmes Web, il existe une vérification d'adresse IP à certaines fins. Par exemple, avec une certaine adresse IP, pour toutes les 24 heures, l'utilisateur ne peut-il avoir que 5 clics sur les liens de téléchargement? Cette adresse IP doit être unique, pas pour un FAI qui a une vaste gamme de clients ou d'utilisateurs Internet.

Ai-je bien compris?

Mehdi
la source
4
Ils font généralement la même chose et ne fonctionnent pas correctement pour les adresses IP partagées. On ne peut pas faire grand-chose dans ce domaine.
Mehrdad Afshari
Quel est le problème que vous essayez de résoudre ici, pourquoi pensez-vous avoir besoin de l'adresse IP?
Steve
3
J'ai une application qui vérifie les clics sur un lien spécifique, et un utilisateur spécifique (par IP) ne peut pas cliquer sur le lien plus de 5 fois par jour. celle d'un utilisateur spécifique?
Mehdi

Réponses:

142

Comme d'autres l'ont dit, vous ne pouvez pas faire ce que vous demandez. Si vous décrivez le problème que vous essayez de résoudre, peut-être que quelqu'un peut vous aider?

Par exemple

  • essayez-vous d'identifier de manière unique vos utilisateurs?
  • Pourriez-vous utiliser un cookie, ou l'ID de session peut-être à la place de l'adresse IP?

ÉditerL'adresse que vous voyez sur le serveur ne doit pas être l'adresse du FAI, car vous dites que ce serait une énorme plage. L'adresse d'un utilisateur domestique sur large bande sera l'adresse de leur routeur, donc chaque appareil à l'intérieur de la maison apparaîtra à l'extérieur pour être le même, mais le routeur utilise NAT pour s'assurer que le trafic est correctement acheminé vers chaque appareil. Pour les utilisateurs accédant à partir d'un environnement de bureau, l'adresse peut être la même pour tous les utilisateurs. Les sites qui utilisent une adresse IP pour l'ID courent le risque de se tromper - les exemples que vous donnez sont bons et ils échouent souvent. Par exemple, mon bureau est au Royaume-Uni, le point de rupture (où je "semble" être sur Internet) est dans un autre pays où se trouve notre principale installation informatique, donc depuis mon bureau, mon adresse IP ne semble pas être au Royaume-Uni. Pour cette raison, je ne peux pas accéder au contenu Web uniquement au Royaume-Uni, comme le BBC iPlayer). À tout moment, il y aurait des centaines, voire des milliers de personnes dans mon entreprise qui semblent accéder au Web à partir de la même adresse IP.

Lorsque vous écrivez du code serveur, vous ne pouvez jamais être sûr de l’adresse IP à laquelle vous voyez. Certains utilisateurs aiment ça. Certaines personnes utilisent délibérément un proxy ou un VPN pour vous confondre davantage.

Lorsque vous dites que l'adresse de votre machine est différente de l'adresse IP indiquée sur StackOverflow, comment trouvez-vous l'adresse de votre machine? Si vous cherchez simplement à utiliser localement ipconfigou quelque chose comme ça, je m'attendrais à ce que ce soit différent pour les raisons que j'ai décrites ci-dessus. Si vous voulez vérifier ce que pense le monde extérieur, consultez whatismyipaddress.com/ .

Ce lien Wikipédia sur NAT vous fournira quelques informations à ce sujet.

Steve
la source
J'ai donc compris dans les applications côté serveur que nous ne pouvons pas être sûrs de l'adresse IP. cela signifie que la programmation côté client est la solution ?? vous voulez dire, par exemple, avec certains codes JavaScript, nous pouvons le faire ??
Mehdi
12
NON, cela serait inutile, l'adresse IP que le client "pense" qu'elle aura sera interne au domicile ou au bureau, elle n'aura aucun sens dans le monde extérieur. Par exemple, la plupart des routeurs domestiques distribuent des adresses IP dans la plage 192.168.1.xxx, donc des milliers de machines ont la même adresse sur leurs propres réseaux.
Steve
12
Non, ce n'est pas unique. Deux utilisateurs derrière le même routeur utilisant NAT auront la même adresse IP. Je pense vraiment que vous devez lire à ce sujet, voir le lien dans ma modification.
Steve
1
Alors, pourquoi des entreprises comme AWS, Azure, etc. utilisent-elles l'adresse IP dans les règles de groupe de sécurité et autorisent-elles uniquement cette adresse IP à se connecter à la machine virtuelle?
2
@ user5950947: parce qu'Azure s'attend à ce que vous soyez une entreprise avec une adresse IP publique statique. Il est sûr de supposer que votre entreprise ne pourra accéder qu'à partir de son adresse IP publique, c'est donc une fonctionnalité de sécurité supplémentaire intéressante. Mais les adresses IP peuvent être truquées ou votre réseau peut être piraté, donc ce ne devrait jamais être la seule sécurité.
Deantwo
449

Souvent, vous voudrez connaître l'adresse IP d'une personne visitant votre site Web. Bien qu'ASP.NET ait plusieurs façons de le faire, l'une des meilleures façons que nous avons vues est d'utiliser le "HTTP_X_FORWARDED_FOR" de la collection ServerVariables.

Voici pourquoi...

Parfois, vos visiteurs se trouvent derrière un serveur proxy ou un routeur et la norme Request.UserHostAddresscapture uniquement l'adresse IP du serveur proxy ou du routeur. Dans ce cas, l'adresse IP de l'utilisateur est alors stockée dans la variable serveur ("HTTP_X_FORWARDED_FOR").

Donc, ce que nous voulons faire, c'est d'abord vérifier "HTTP_X_FORWARDED_FOR" et si c'est vide, nous revenons simplement ServerVariables("REMOTE_ADDR").

Bien que cette méthode ne soit pas infaillible, elle peut conduire à de meilleurs résultats. Ci-dessous, le code ASP.NET dans VB.NET, extrait du billet de blog de James Crowley "Gotcha: HTTP_X_FORWARDED_FOR renvoie plusieurs adresses 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
mangokun
la source
24
Assurez-vous de ne pas utiliser ce code à des fins de sécurité, car n'importe qui peut truquer HTTP_X_FORWARDED_FOR ou des en-têtes similaires. Donc, si vous l'utilisez pour la journalisation ou les vérifications de sécurité, un attaquant peut le contourner facilement.
dr. evil
4
De votre lien, what we actually needed to be doing was take the last IP addressmais votre code obtient le premier addresses[0]. Qui est correct?
Nelson Rothermel
4
@NelsonRothermel Basé sur en.wikipedia.org/wiki/X-Forwarded-For#Format si vous voulez le client (plutôt que le proxy précédent) alors utilisez le premier .
Richard
4
@ dr.evil Alors, que proposeriez-vous à la place? Parce que je veux définir l'accès aux services WCF par les adresses IP spécifiées.
krypru
7
addresses.Length != 0n'est pas nécessaire, car il ne peut jamais être 0.
James Wilkins
78

MISE À JOUR: Merci à Bruno Lopes. Si plusieurs adresses IP peuvent venir, vous devez utiliser cette méthode:

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

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

        return Request.ServerVariables["REMOTE_ADDR"];
    }
grand
la source
3
Comme indiqué dans une autre réponse, HTTP_X_FORWARDED_FOR peut être une liste d'adresses IP, séparées par des virgules.
Bruno Lopes
En réponse à la fonction, je reçois juste :: 1 à chaque fois. Je ne peux pas obtenir l'adresse IP complète ???
farhangdon
1
il renverra :: 1 sur l'hôte local. essayez-le dans un environnement productino et ça devrait aller.
Benny Margalit
1
@farhangdon, le code suivant renverra l'adresse IP dans l'hôte local comme @Bat_Programmer l'a écrit ciSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit
NE FAITES PAS CELA! Veillez à ne pas utiliser simplement la première adresse IP de la liste. Vous ne devez ignorer les IP proxy connues qu'à partir de l'entrée la plus à droite pour éviter les attaques de l'homme du milieu et l'usurpation d'en-tête.
Jpsy
24

Si est c # voir de cette façon, est très simple

string clientIp = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? 
                   Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();
Juan David Nicholls Cardona
la source
8
Si les deux variables de serveur peuvent être nulles, cela peut lever l'exception.
Michael Freidgeim
Qu'est-ce que le référencement de demande ici? I ServerVariables not found
Brownbagger11
23

Que considérez-vous d'autre comme l'adresse IP de l'utilisateur? Si vous voulez l'adresse IP de la carte réseau, je crains qu'il n'y ait aucun moyen possible de le faire dans une application Web. Si votre utilisateur est derrière NAT ou autre, vous ne pouvez pas non plus obtenir l'IP.

Mise à jour : Bien qu'il existe des sites Web qui utilisent IP pour limiter l'utilisateur (comme rapidshare), ils ne fonctionnent pas correctement dans les environnements NAT.

Mehrdad Afshari
la source
22

Je pense que je devrais partager mon expérience avec vous tous. Eh bien, je vois que dans certaines situations, REMOTE_ADDR ne vous donnera PAS ce que vous cherchez. Par exemple, si vous avez un équilibreur de charge derrière la scène et si vous essayez d'obtenir l'IP du client, vous aurez des problèmes. Je l'ai vérifié avec mon logiciel de masquage IP et j'ai également vérifié avec mes collègues se trouvant sur différents continents. Voici donc ma solution.

Lorsque je veux connaître l'IP d'un client, j'essaie de sélectionner toutes les preuves possibles afin de pouvoir déterminer si elles sont uniques:

Ici, j'ai trouvé un autre serveur qui pourrait vous aider tous si vous voulez obtenir l'IP exacte du côté client. donc j'utilise: HTTP_X_CLUSTER_CLIENT_IP

HTTP_X_CLUSTER_CLIENT_IP vous obtient toujours l'adresse IP exacte du client. Dans tous les cas, si cela ne vous donne pas la valeur, vous devez alors rechercher HTTP_X_FORWARDED_FOR car c'est le deuxième meilleur candidat pour vous obtenir l'adresse IP du client, puis la variable REMOTE_ADDR qui peut ou non vous renvoyer l'IP, mais pour moi, avoir tout cela trois est ce que je trouve le mieux pour les surveiller.

J'espère que cela aide certains gars.

KMX
la source
Il faut dire que les en-têtes http_x _... peuvent être facilement usurpés par rapport à la variable remote_addr. Et donc remote_addr reste la source la plus fiable pour l'adresse IP du client.
Ciro Corvino
1
@CiroCorvino vous avez raison, mais lorsque votre site Web est hébergé sur un serveur qui s'exécute derrière l'équilibreur de charge (comme je l'ai déjà mentionné dans mon article), le remote_addr ne vous donnera pas l'IP que vous recherchez. J'ai expérimenté ce que vous dites mais quand j'ai creusé dans la solution, ce que j'ai dit fonctionne le mieux pour moi.
KMX
Désolé @KMX, en fait j'utilise également une combinaison de remote_addr et http_x_forwarded pour déduire certaines hypothèses sur l'origine de la demande. Si vous modifiez votre message, je mets à jour mon vote
Ciro Corvino
15

Vous pouvez utiliser:

System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
Bat_Programmer
la source
1
merci, pour moi, c'est la seule méthode qui renvoie vraiment mon adresse IP sur l'hôte local.
Benny Margalit
En fait, ce que j'ai utilisé pour obtenir l'adresse IP de l'hôte local estSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit
1
Ce code ne fonctionne que pour moi et je peux obtenir IPv6 et IPv4 en utilisant respectivement GetValue (0) et GetValue (1). Merci a voté!
Raj Baral
Cependant, je reçois une erreur lors de l'exécution de cela dans le violon Request for the permission of type 'System.Net.DnsPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
vibs2006
OP demandant comment obtenir l'adresse IP de l'internaute distant, pas l'adresse de son propre hôte local.
t.durden
13

Les adresses IP font partie de la couche Réseau dans la "pile à sept couches". La couche réseau peut faire tout ce qu'elle veut faire avec l'adresse IP. C'est ce qui se passe avec un serveur proxy, NAT, relais ou autre.

La couche Application ne doit en aucun cas dépendre de l'adresse IP. En particulier, une adresse IP n'est pas censée être un identifiant de quelque chose d'autre que l'idenfitier d'une extrémité d'une connexion réseau. Dès qu'une connexion est fermée, vous devez vous attendre à ce que l'adresse IP (du même utilisateur) change.

John Saunders
la source
1
C'est bien beau, mais que faites-vous lorsqu'un client d'un système multi-locataire exige que les comptes de ses utilisateurs ne puissent se connecter qu'à partir d'une adresse IP spécifiée?
Ronnie Overby
1
Ensuite, ils doivent vous dire quelle adresse IP votre serveur verra. S'ils ont besoin qu'il y ait une adresse particulière, ils ne pourront pas être derrière un NAT ou similaire.
John Saunders,
@RonnieOverby Je suis dans la même situation. J'ai besoin de savoir de quelle IP ils se connectent et cela doit être sur ma liste blanche. Ensuite, l'application peut activer ou désactiver certaines fonctionnalités en fonction de leur adresse IP. C'est ce que veut le client.
t.durden
10

Jusqu'à présent, toutes les réponses tiennent compte de l'en- tête non normalisé, mais très courant X-Forwarded-For. Il existe un en- Forwardedtête standardisé qui est un peu plus difficile à analyser. Voici quelques exemples:

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

J'ai écrit une classe qui prend en compte ces deux en-têtes lors de la détermination de l'adresse IP d'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;
        }
    }
}

Voici quelques tests unitaires que j'ai utilisés pour valider ma solution:

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; }
        }
    }
}
dana
la source
9

Si vous utilisez CloudFlare, vous pouvez essayer cette méthode d'extension :

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;
    }
}

puis

string IPAddress = Request.GetIPAddress();
Tony
la source
Et en utilisant F5 ou Palo Alto?
Kiquenet
8
string IP = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;
GorkemHalulu
la source
7

Ce que vous pouvez faire est de stocker l'IP du routeur de votre utilisateur et également l'IP transféré et essayez de le rendre fiable en utilisant à la fois les IP [Public externe et Privé interne]. Mais encore une fois, après quelques jours, le client peut se voir attribuer une nouvelle adresse IP interne à partir du routeur, mais ce sera plus fiable.

Shahid
la source
5

En combinant les réponses de @Tony et @mangokun , j'ai créé la méthode d'extension suivante:

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;
    }
}
Nitesh
la source
Pourquoi utilisez-vous HTTP_X_FORWARDED_FORmais pas X_FORWARDED_FOR? Sont-ils les mêmes?
Igor Yalovoy du
3

utiliser dans le fichier 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"];
}
Behnam Mohammadi
la source
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();
                }
            }
        }
    }
}

Utilisation;

string _ip = this.GetClientIP();
VolkanCetinkaya
la source
0

C'est facile, essayez:

var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

juste ça :))

akbar
la source
1
Pour info, le code ci-dessus ne fonctionne que dans Asp.Net Core et non sur le lien
Dobin
-1

Bonjour les gars La plupart des codes que vous trouverez vous renverront l'adresse IP du serveur et non l'adresse IP du client. Cependant, ce code renvoie l'adresse IP du client correcte. Essayez-le. Pour plus d'informations, vérifiez ceci

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

pour obtenir votre adresse IP locale en utilisant javascript, vous pouvez mettre ce code dans votre balise de 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>

et pour obtenir votre adresse IP publique, vous pouvez utiliser ce code à l'intérieur de votre balise de 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>
Shubham
la source
-3

utilisez ceci

Dns.GetHostEntry(Dns.GetHostName())
user1657913
la source
4
Dns.GetHostEntry La méthode GetHostEntry interroge un serveur DNS pour l'adresse IP associée à un nom d'hôte ou une adresse IP. Reportez-vous à msdn.microsoft.com/en-us/library/ms143998(v=vs.80).aspx
Milind Thakkar
-7

Essayer:

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;
}
Nilesh Umaretiya
la source
Cela renvoie l'adresse IP du serveur
Sreekumar P
Il s'agit d'asp.net, qui est une application Web qui s'exécute sur un serveur et non sur l'ordinateur des utilisateurs.
doekman