2016-04-01 6 views
3

Ich versuche Remote (Client) IP addres zu erhalten:ASP.NET Core: Wie bekomme ich eine Remote IP Adresse?

var ip = httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress 

Aber es funktioniert nur für lokale Anforderungen (es ::1 Wert zurück)

Wenn ich Seite von Remote-Rechner laden der Wert null ist. Ich untersuchte, dass es in diesem Fall keine IHttpConnectionFeature in der Features Sammlung gibt.

Warum? Und wie bekomme ich die IP-Adresse richtig?

+1

Es gibt mehrere Probleme mit ihm, soweit ich weiß, vor allem wenn man es hinter einem Loadbalancer und/oder iis hosten. Es gibt einen 'UseOverrideHeaders' oder so, aber wird in' rc2' in 'UseForwardedHeaders' umbenannt, siehe die Ankündigung https://github.com/aspnet/Announcements/issues/147. Aber soweit ich weiß, kann Ihnen das auch nicht weiterhelfen, denn es gibt das letzte X-Forwarded-For zurück, das in vielen Cloud-Bereitstellungen der Reverseproxy und nicht der ursprüngliche Benutzer wäre. – Tseng

+0

Aber es gibt ein Feature in der Diskussion, soweit ich weiß, um zu bestimmen, von welchem ​​Hop das X-Forwarded-For (dh 2 Hops zurück und nicht nur die letzte – Tseng

+0

Ich denke, das ist eine gute Antwort http: // stackoverflow.com/a/36316189/625581 –

Antwort

11

Ich weiß, dass dieser Beitrag ist alt, aber ich kam hier für die gleiche Frage suchen und finnaly tat ich dies:

Auf project.json hinzufügen Abhängigkeit:

"Microsoft.AspNetCore.HttpOverrides": "1.0.0" 

auf Startup.cs im Configure-Methode hinzu:

app.UseForwardedHeaders(new ForwardedHeadersOptions 
     { 
      ForwardedHeaders = ForwardedHeaders.XForwardedFor | 
      ForwardedHeaders.XForwardedProto 
     }); 

Und natürlich:

using Microsoft.AspNetCore.HttpOverrides; 

Dann bekam ich die ip wie folgt aus:

Request.HttpContext.Connection.RemoteIpAddress 

In meinem Fall, wenn in VS Debuggen habe ich immer IpV6 localhost, aber wenn sie auf ein im Einsatz IIS Ich habe immer die Remote IP bekommen.

einige nützliche Links: How do I get client IP address in ASP.NET CORE? und RemoteIpAddress is always null

Das :: 1 kann da sein: bei IIS Abschluss

Verbindungen, die dann nach vorne zu Kestrel, der v.next Web-Server, so dass Verbindungen zum Webserver sind ja von localhost. (https://stackoverflow.com/a/35442401/5326387)

+0

Wenn Sie ähnliche Fragen finden und ähnliche Antworten posten, möchten Sie möglicherweise einen Querverweis zwischen den 2. Vor allem, wenn einer vollständiger scheint als der andere. HTH – superjos

+0

@superjos was meinst du? – Johna

+0

Es gibt eine andere SO-Frage [hier] (https://Stackoverflow.com/a/41335701/540776), die sehr nahe daran ist ein und wo du grundsätzlich kopiert hast die gleiche Antwort.In solchen Fällen kann es nützlich sein, eine Frage auf eine andere zu verweisen. Vielleicht sogar Flagfrage zum Schließen. – superjos

-2

Try this:

Request.ServerVariables["REMOTE_ADDR"]; 
+0

Request.ServerVariables existiert nicht in .NET Core – kiml42

Verwandte Themen