430 Stimmen

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

Wir haben Request.UserHostAddress, um die IP-Adresse in ASP.NET zu bekommen, aber dies ist normalerweise die IP-Adresse des Internetanbieters des Benutzers, nicht genau die IP-Adresse des Benutzers auf dem Gerät, der zum Beispiel auf einen Link geklickt hat. Wie kann ich die echte IP-Adresse bekommen?

Zum Beispiel steht in einem Stack Overflow-Benutzerprofil: "Letzte Kontoaktivität: Vor 4 Stunden von 86.123.127.8", aber meine Geräte-IP-Adresse ist etwas anders. Wie kommt Stack Overflow an diese Adresse?

In einigen Web-Systemen gibt es eine IP-Adressprüfung für bestimmte Zwecke. Zum Beispiel kann mit einer bestimmten IP-Adresse ein Benutzer alle 24 Stunden nur 5 Klicks auf Download-Links haben. Diese IP-Adresse sollte eindeutig sein, nicht für einen Internetanbieter, der eine große Anzahl von Kunden oder Internetnutzern hat.

Habe ich das richtig verstanden?

4 Stimmen

Sie tun in der Regel dasselbe und funktionieren nicht korrekt für gemeinsam genutzte IP-Adressen. In diesem Bereich kann nicht viel getan werden.

0 Stimmen

Was ist das Problem, das Sie hier lösen möchten, warum glauben Sie, dass Sie die IP-Adresse benötigen?

4 Stimmen

Ich habe eine Anwendung, die spezifische Link-Klicks überprüft, und ein spezifischer Benutzer (nach IP) kann den Link an einem Tag nicht mehr als 5 Mal klicken. Das Problem ist, ob Request.UserHostAddress für eine Gruppe von Benutzern unter einem ISP oder Netzwerk oder für einen bestimmten Benutzer ist.

4voto

akbar Punkte 394

Es ist einfach. Probier es aus:

var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

nur so :))

2 Stimmen

FYI, der obige Code funktioniert nur in Asp.Net Core und nicht im regulären Asp.Net link

1voto

Husam Ebish Punkte 2394

Beim Installieren des NuGet-Pakets Microsoft.AspNetCore.HttpOverrides Versuchen Sie dann:

public class ClientDeviceInfo
    {
        private readonly IHttpContextAccessor httpAccessor;

        public ClientDeviceInfo(IHttpContextAccessor httpAccessor)
        {
            this.httpAccessor = httpAccessor;
        }

        public string GetClientLocalIpAddress()
        {
            return httpAccessor.HttpContext.Connection.LocalIpAddress.ToString();
        }

        public string GetClientRemoteIpAddress()
        {
            return httpAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
        }

        public string GetClientLocalPort()
        {
            return httpAccessor.HttpContext.Connection.LocalPort.ToString();
        }

        public string GetClientRemotePort()
        {
            return httpAccessor.HttpContext.Connection.RemotePort.ToString();
        }
     }

-3voto

user1657913 Punkte 15

Verwenden Sie dies

Dns.GetHostEntry(Dns.GetHostName())

4 Stimmen

Dns.GetHostEntry Die GetHostEntry-Methode fragt einen DNS-Server nach der IP-Adresse ab, die mit einem Hostnamen oder einer IP-Adresse verknüpft ist. Siehe msdn.microsoft.com/en-us/library/ms143998(v=vs.80).aspx

-4voto

Shubham Punkte 449

Hallo Leute! Die meisten Codes, die du findest, geben dir die Server-IP-Adresse zurück, nicht die Client-IP-Adresse. Allerdings gibt dieser Code die korrekte Client-IP-Adresse zurück. Probiere es aus. Für weitere Informationen schau einfach hier:

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

Um deine lokale IP-Adresse mit JavaScript zu bekommen, kannst du diesen Code innerhalb deines Script-Tags verwenden:

    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.";

         }

Und um deine öffentliche IP-Adresse zu bekommen, kannst du diesen Code innerhalb deines Script-Tags verwenden:

  function getIP(json) {
    document.write("Meine öffentliche IP-Adresse ist: ", json.ip);
  }

0 Stimmen

Eine Erklärung, was dies tut, wäre hilfreich, aber dies ist nicht einmal ansatzweise ASP.NET, geschweige denn serverseitiger Code.

-5voto

Pradeep Asanka Punkte 381

Einfach

var ip =  Request.UserHostAddress;

Das war's...

Bildbeschreibung hier eingeben

0 Stimmen

Es steht bereits im ersten Satz der Frage, dass UserHostAddress nicht die gewünschte IP-Adresse zurückgibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X