Wie erhalte ich die Client-IP-Adresse eines Benutzers in ASP.NET?

387

Wir müssen Request.UserHostAddressdie IP-Adresse in ASP.NET erhalten, aber dies ist normalerweise die IP-Adresse des ISP des Benutzers, nicht genau die Computer-IP-Adresse des Benutzers, der beispielsweise auf einen Link geklickt hat. Wie kann ich die echte IP-Adresse erhalten?

In einem Benutzerprofil für Stapelüberlauf heißt es beispielsweise: "Letzte Kontoaktivität: vor 4 Stunden von 86.123.127.8" , aber die IP-Adresse meines Computers ist etwas anders. Wie erhält Stack Overflow diese Adresse?

In einigen Websystemen wird für einige Zwecke eine IP-Adressprüfung durchgeführt. Kann der Benutzer beispielsweise bei einer bestimmten IP-Adresse alle 24 Stunden nur 5 Klicks auf Download-Links haben? Diese IP-Adresse sollte eindeutig sein, nicht für einen ISP mit einer großen Anzahl von Clients oder Internetbenutzern.

Habe ich gut verstanden

Mehdi
quelle
4
Sie machen normalerweise dasselbe und funktionieren für gemeinsam genutzte IP-Adressen nicht richtig. In diesem Bereich kann nicht viel getan werden.
Mehrdad Afshari
Was ist das Problem, das Sie hier lösen möchten? Warum benötigen Sie Ihrer Meinung nach die IP-Adresse?
Steve
3
Ich habe eine Anwendung, die einen bestimmten Link klickt, und ein bestimmter Benutzer (nach IP) kann nicht mehr als 5 Mal an einem Tag auf den Link klicken. Das Problem ist, dass Request.UserHostAddress für eine Reihe von Benutzern unter einem ISP oder Netzwerk oder ein bestimmter Benutzer?
Mehdi

Antworten:

142

Wie andere gesagt haben, können Sie nicht tun, was Sie verlangen. Wenn Sie das Problem beschreiben, das Sie lösen möchten, kann vielleicht jemand helfen?

Z.B

  • Versuchen Sie, Ihre Benutzer eindeutig zu identifizieren?
  • Könnten Sie ein Cookie oder die Sitzungs-ID anstelle der IP-Adresse verwenden?

BearbeitenDie Adresse, die Sie auf dem Server sehen, sollte nicht die Adresse des Internetdienstanbieters sein, da dies ein großer Bereich wäre. Die Adresse für einen Heimbenutzer im Breitbandbereich ist die Adresse an seinem Router, sodass jedes Gerät im Haus außen identisch erscheint. Der Router verwendet jedoch NAT, um sicherzustellen, dass der Datenverkehr korrekt an jedes Gerät weitergeleitet wird. Für Benutzer, die von einer Büroumgebung aus zugreifen, kann die Adresse für alle Benutzer gleich sein. Websites, die IP-Adressen für IDs verwenden, laufen Gefahr, sehr falsch zu liegen. Die von Ihnen angegebenen Beispiele sind gut und schlagen häufig fehl. Zum Beispiel befindet sich mein Büro in Großbritannien. Der Breakout-Punkt (an dem ich im Internet "zu sein" scheine) befindet sich in einem anderen Land, in dem sich unsere Haupt-IT-Einrichtung befindet. Von meinem Büro aus scheint sich meine IP-Adresse nicht in Großbritannien zu befinden. Aus diesem Grund kann ich nicht nur auf Webinhalte in Großbritannien zugreifen. wie der BBC iPlayer). Zu jedem Zeitpunkt gab es in meinem Unternehmen Hunderte oder sogar Tausende von Personen, die anscheinend über dieselbe IP-Adresse auf das Internet zugreifen.

Wenn Sie Servercode schreiben, können Sie nie sicher sein, auf welche IP-Adresse Sie sich beziehen. Einige Benutzer mögen es so. Einige Leute verwenden absichtlich einen Proxy oder ein VPN, um Sie weiter zu verwirren.

Wenn Sie sagen, dass sich Ihre Computeradresse von der in StackOverflow angezeigten IP-Adresse unterscheidet, wie ermitteln Sie Ihre Computeradresse? Wenn Sie nur lokal mit ipconfigoder so etwas suchen , würde ich erwarten, dass es aus den oben genannten Gründen anders ist. Wenn Sie überprüfen möchten, was die Außenwelt denkt, schauen Sie sich whatismyipaddress.com/ an .

Dieser Wikipedia-Link zu NAT bietet Ihnen Hintergrundinformationen dazu.

Steve
quelle
Daher habe ich in serverseitigen Anwendungen verstanden, dass wir uns über die IP-Adresse nicht sicher sein können. es bedeutet, dass clientseitige Programmierung die Lösung ist? Sie meinen zum Beispiel mit einigen JavaScript-Codes können wir das tun?
Mehdi
12
NEIN, dies wäre sinnlos. Die IP-Adresse, die der Kunde "denkt", ist intern oder privat. In der Außenwelt ist sie bedeutungslos. Beispielsweise geben die meisten Heimrouter IP-Adressen im Bereich 192.168.1.xxx aus, sodass Tausende von Computern in ihren eigenen Netzwerken dieselbe Adresse haben.
Steve
12
Nein, es ist nicht einzigartig. Zwei Benutzer hinter demselben Router, die NAT verwenden, haben dieselbe IP-Adresse. Ich denke wirklich, dass Sie dies nachlesen müssen, siehe Link in meiner Bearbeitung.
Steve
1
Warum verwenden Unternehmen wie AWS, Azure usw. die IP-Adresse in Sicherheitsgruppenregeln und lassen nur diese IP-Adresse eine Verbindung zur VM herstellen?
2
@ user5950947: Da Azure erwartet, dass Sie ein Unternehmen mit einer statischen öffentlichen IP-Adresse sind. Es ist davon auszugehen, dass Ihr Unternehmen immer nur von seiner öffentlichen IP-Adresse aus zugreifen kann. Dies ist also eine nette zusätzliche Sicherheitsfunktion. IP-Adressen können jedoch gefälscht oder Ihr Netzwerk gehackt werden. Daher sollte dies niemals die einzige Sicherheit sein.
Deantwo
449

Oft möchten Sie die IP-Adresse einer Person kennen, die Ihre Website besucht. Während ASP.NET mehrere Möglichkeiten hat, dies zu tun, ist eine der besten Möglichkeiten, die wir gesehen haben, die Verwendung von "HTTP_X_FORWARDED_FOR" der ServerVariables-Auflistung.

Hier ist der Grund...

Manchmal befinden sich Ihre Besucher entweder hinter einem Proxyserver oder einem Router, und der Standard Request.UserHostAddresserfasst nur die IP-Adresse des Proxyservers oder Routers. In diesem Fall wird die IP-Adresse des Benutzers in der Servervariablen ("HTTP_X_FORWARDED_FOR") gespeichert.

Wir wollen also zuerst "HTTP_X_FORWARDED_FOR" überprüfen und wenn das leer ist, kehren wir einfach zurück ServerVariables("REMOTE_ADDR").

Diese Methode ist zwar nicht kinderleicht, kann jedoch zu besseren Ergebnissen führen. Unten finden Sie den ASP.NET-Code in VB.NET aus James Crowleys Blog-Beitrag "Gotcha: HTTP_X_FORWARDED_FOR gibt mehrere IP-Adressen zurück".

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
quelle
24
Verwenden Sie diesen Code nicht aus Sicherheitsgründen, da jeder HTTP_X_FORWARDED_FOR oder ähnliche Header fälschen kann. Wenn Sie dies für sicherheitsrelevante Protokollierung oder Sicherheitsüberprüfungen verwenden, kann ein Angreifer es leicht umgehen.
dr. böse
4
Von Ihrem Link, what we actually needed to be doing was take the last IP addressaber Ihr Code bekommt den ersten addresses[0]. Welches ist richtig?
Nelson Rothermel
4
@NelsonRothermel Basierend auf en.wikipedia.org/wiki/X-Forwarded-For#Format Wenn Sie den Client (und nicht den vorherigen Proxy) möchten, verwenden Sie den ersten .
Richard
4
@ dr.evil Also was würdest du stattdessen vorschlagen? Weil ich den Zugriff für WCF-Dienste über bestimmte IPs festlegen möchte.
Krypru
7
addresses.Length != 0ist nicht notwendig, da es nie 0 sein kann.
James Wilkins
78

UPDATE: Danke an Bruno Lopes. Wenn mehrere IP-Adressen kommen könnten, müssen Sie diese Methode verwenden:

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

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

        return Request.ServerVariables["REMOTE_ADDR"];
    }
algreat
quelle
3
Wie in anderen Antworten angegeben, kann HTTP_X_FORWARDED_FOR eine durch Kommas getrennte Liste von IPs sein.
Bruno Lopes
Als Antwort auf die Funktion bekomme ich jedes Mal :: 1. Kann ich keine vollständige IP-Adresse erhalten?
Farhangdon
1
Auf dem lokalen Host wird :: 1 zurückgegeben. Probieren Sie es in einer Produktumgebung aus und es sollte in Ordnung sein.
Benny Margalit
1
@farhangdon, der folgende Code wird IP-Adresse im lokalen Host zurückgeben, wie @Bat_Programmer unten schriebSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit
TUN SIE DAS NICHT! Achten Sie darauf, nicht einfach die erste IP-Adresse in der Liste zu verwenden. Sie sollten bekannte Proxy-IPs nur ab dem Eintrag ganz rechts überspringen, um Man-in-the-Middle-Angriffe und Header-Spoofing zu vermeiden.
Jpsy
24

Wenn c # so sieht, ist das sehr einfach

string clientIp = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? 
                   Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();
Juan David Nicholls Cardona
quelle
8
Wenn beide Servervariablen null sein können, kann dies eine Ausnahme auslösen.
Michael Freidgeim
Was ist Anforderungsreferenzierung hier? Ich ServerVariables nicht gefunden
Brownbagger11
23

Was halten Sie noch von der Benutzer-IP-Adresse? Wenn Sie die IP-Adresse des Netzwerkadapters möchten, gibt es leider keine Möglichkeit, dies in einer Web-App zu tun. Wenn Ihr Benutzer hinter NAT oder anderen Dingen steht, können Sie die IP auch nicht erhalten.

Update : Es gibt zwar Websites, die IP verwenden, um den Benutzer einzuschränken (z. B. Rapidshare), sie funktionieren jedoch in NAT-Umgebungen nicht ordnungsgemäß.

Mehrdad Afshari
quelle
22

Ich denke, ich sollte meine Erfahrungen mit euch allen teilen. Nun, ich sehe in einigen Situationen REMOTE_ADDR Ihnen NICHT das bringt, wonach Sie suchen. Wenn Sie beispielsweise einen Load Balancer hinter den Kulissen haben und versuchen, die IP des Clients abzurufen, sind Sie in Schwierigkeiten. Ich habe es mit meiner IP-Maskierungssoftware überprüft und auch mit meinen Kollegen auf verschiedenen Kontinenten. Also hier ist meine Lösung.

Wenn ich die IP eines Kunden wissen möchte, versuche ich, alle möglichen Beweise auszuwählen, damit ich feststellen kann, ob sie eindeutig sind:

Hier habe ich eine andere Sever-Var gefunden, die Ihnen allen helfen könnte, wenn Sie die genaue IP der Client-Seite erhalten möchten. Also benutze ich: HTTP_X_CLUSTER_CLIENT_IP

Mit HTTP_X_CLUSTER_CLIENT_IP erhalten Sie immer die genaue IP des Clients. In jedem Fall sollten Sie nach HTTP_X_FORWARDED_FOR suchen, wenn es Ihnen nicht den Wert gibt, da es der zweitbeste Kandidat ist, um Ihnen die Client-IP und dann die REMOTE_ADDR-Variable zu geben, die Ihnen die IP zurückgeben kann oder nicht, aber ich habe alle diese Drei ist das, was ich am besten finde, um sie zu überwachen.

Ich hoffe das hilft einigen Jungs.

KMX
quelle
Es muss gesagt werden, dass http_x _...-Header in Bezug auf die Variable remote_addr leicht gefälscht werden können. Daher bleibt remote_addr die zuverlässigste Quelle für die Client-IP-Adresse.
Ciro Corvino
1
@CiroCorvino Sie haben Recht, aber wenn Sie Ihre Website auf einem Server gehostet haben, der hinter dem Load Balancer läuft (wie ich bereits in meinem Beitrag erwähnt habe), gibt Ihnen die remote_addr nicht die IP, die Sie suchen. Ich habe erfahren, was Sie sagen, aber wenn ich die Lösung ausgrabe, funktioniert das, was ich angegeben habe, am besten für mich.
KMX
Sorry @KMX, tatsächlich verwende ich auch eine Kombination aus remote_addr und http_x_forwarded, um auf einige Annahmen über den Ursprung der Anfrage zu schließen. Wenn Sie Ihren Beitrag bearbeiten, aktualisiere ich meine Stimme
Ciro Corvino
15

Sie können verwenden:

System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
Bat_Programmer
quelle
1
Vielen Dank, für mich ist dies die einzige Methode, die meine IP auf dem lokalen Host wirklich zurückgibt.
Benny Margalit
Eigentlich habe ich verwendet, um die IP-Adresse des lokalen Hosts zu erhaltenSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit
1
Dieser Code funktioniert nur für mich und ich kann IPv6 und IPv4 mit GetValue (0) bzw. GetValue (1) abrufen. Danke Upvoted!
Raj Baral
Ich Request for the permission of type 'System.Net.DnsPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
erhalte jedoch
OP fragt, wie die IP des Remote-Webbenutzers abgerufen werden soll, nicht die Adresse seines lokalen Hosts.
t.durden
13

IP-Adressen sind Teil der Netzwerkschicht im "Sieben-Schichten-Stapel". Die Netzwerkschicht kann mit der IP-Adresse alles tun, was sie will. Das passiert mit einem Proxyserver, NAT, Relay oder was auch immer.

Die Anwendungsschicht sollte in keiner Weise von der IP-Adresse abhängen. Insbesondere soll eine IP-Adresse keine Kennung für etwas anderes als die Identität eines Endes einer Netzwerkverbindung sein. Sobald eine Verbindung geschlossen wird, sollten Sie damit rechnen, dass sich die IP-Adresse (desselben Benutzers) ändert.

John Saunders
quelle
1
Das ist alles schön und gut, aber was machen Sie, wenn ein Kunde eines mandantenfähigen Systems verlangt, dass sich die Konten seiner Benutzer nur von einer bestimmten IP-Adresse aus anmelden können?
Ronnie Overby
1
Dann müssen sie Ihnen mitteilen, welche IP-Adresse Ihr Server sehen wird. Wenn sie eine bestimmte Adresse benötigen, können sie sich nicht hinter einem NAT oder ähnlichem befinden.
John Saunders
@ RonnieOverby Ich bin in der gleichen Situation. Ich muss wissen, von welcher IP-Adresse sie eine Verbindung herstellen, und sie muss auf meiner Whitelist stehen. Dann kann die App bestimmte Funktionen basierend auf ihrer IP ein- oder ausschalten. Das will der Kunde.
t.durden
10

Alle bisherigen Antworten berücksichtigen den nicht standardisierten, aber sehr häufigen X-Forwarded-ForHeader. Es gibt einen standardisierten ForwardedHeader, der etwas schwieriger zu analysieren ist. Einige Beispiele sind wie folgt:

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

Ich habe eine Klasse geschrieben, die diese beiden Header bei der Ermittlung der IP-Adresse eines Clients berücksichtigt.

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

Im Folgenden sind einige Komponententests aufgeführt, mit denen ich meine Lösung validiert habe:

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
quelle
9

Wenn Sie CloudFlare verwenden, können Sie diese Erweiterungsmethode ausprobieren :

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

dann

string IPAddress = Request.GetIPAddress();
Tony
quelle
Und mit F5 oder Palo Alto?
Kiquenet
8
string IP = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;
GorkemHalulu
quelle
7

Sie können die Router-IP Ihres Benutzers und auch die weitergeleitete IP speichern und versuchen, diese mithilfe der IPs [External Public und Internal Private] zuverlässig zu machen. Nach einigen Tagen wird dem Client möglicherweise eine neue interne IP vom Router zugewiesen, die jedoch zuverlässiger ist.

Shahid
quelle
5

Durch die Kombination der Antworten von @Tony und @mangokun habe ich die folgende Erweiterungsmethode erstellt:

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
quelle
Warum benutzt du HTTP_X_FORWARDED_FORaber nicht X_FORWARDED_FOR? Sind sie gleich?
Igor Yalovoy
3

Verwendung in der Ashx-Datei

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
quelle
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();
                }
            }
        }
    }
}

Verwenden;

string _ip = this.GetClientIP();
VolkanCetinkaya
quelle
0

Es ist einfach. Probieren Sie es aus:

var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

nur das :))

akbar
quelle
1
Zu Ihrer Information, der obige Code funktioniert nur in Asp.Net Core und nicht im regulären Asp.Net- Link
Dobin
-1

Hallo Leute, die meisten Codes, die Sie finden, geben Ihre Server-IP-Adresse zurück, nicht die Client-IP-Adresse. Dieser Code gibt jedoch die richtige Client-IP-Adresse zurück. Probieren Sie es aus. Für weitere Informationen überprüfen Sie einfach diese

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

Um Ihre lokale IP-Adresse mit Javascript zu erhalten, können Sie diesen Code in Ihr Skript-Tag einfügen

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

und Um Ihre öffentliche IP-Adresse zu erhalten, können Sie diesen Code in Ihr Skript-Tag einfügen

  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
quelle
-3

benutze das

Dns.GetHostEntry(Dns.GetHostName())
user1657913
quelle
4
Dns.GetHostEntry Die GetHostEntry-Methode fragt einen DNS-Server nach der IP-Adresse ab, die einem Hostnamen oder einer IP-Adresse zugeordnet ist. Siehe msdn.microsoft.com/en-us/library/ms143998(v=vs.80).aspx
Milind Thakkar
-7

Versuchen:

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
quelle
Dies gibt die Server-IP-Adresse zurück
Sreekumar P
Es geht um asp.net, eine Webanwendung, die auf einem Server und nicht auf dem Computer des Benutzers ausgeführt wird.
Doekman