2017-03-11 1 views
0

Ich versuche, die Client-Computerinformationen für Zugriffsprotokoll zu erhalten. Wie bekomme ich den Client-Gerätenamen und die IP-Adresse in ASP.NET/C#?Wie bekomme ich Client-Geräteinformationen in ASP.NET/C#?

+1

In diesem Beitrag erfahren Sie, wie Sie die öffentliche IP-Adresse des Benutzers abrufen können: http://stackoverflow.com/a/19286308/3126771. Was meinst du mit "Client-Gerät"? Sprechen Sie von Browser-Agent? – Arun

Antwort

2

Sie können die direkte Client-IP vom Request.UserHostAddress Eigentum:

public ActionResult Index() 
{ 
    string ip = Request.UserHostAddress; 
    ... 
} 

Nachdem dies gesagt ist, gibt es viele Situationen, in denen dies nicht gut genug sein könnte. Angenommen, Ihr Webserver befindet sich hinter einem Reverse-Proxy wie z. B. nginx oder HAProxy. In diesem Fall gibt UserHostAddress immer die IP dieses Proxys zurück. Wenn Sie möchten, dass die ursprüngliche Client-IP-Adresse in dieser Situation erhalten Sie die Standard X-Forwarded-For Request-Header, die diese Reverse-Proxy-Server könnte gesetzt verwenden:

string ip = Request.Headers["X-Forwarded-For"]; 

Beachten Sie auch, dass, wenn die Anfrage geht durch viele Proxy-Server, dann ist die X-Forwarded-For Header wird eine durch Kommata getrennte Liste von IP-Adressen jedes Proxy-Server repräsentieren:

X-Forwarded-For: client, proxy1, proxy2 

Sie könnten für diese Situation berücksichtigen müssen, und wenn Sie die IP-Adresse erhalten möchten, die dann am nächsten oder gleich dem Client ist, dass Sie sollte die ganz linke Adresse aus dieser Liste extrahieren.

Soweit es den "Client Device Name" betrifft, ist keine solche Idee in das TCP/HTTP-Protokoll eingebaut, so dass Ihr Client es möglicherweise mit einem benutzerdefinierten Header oder Parameter liefern muss, wenn Sie abrufen möchten es auf dem Server.