Wir müssen Request.UserHostAddress
die 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
quelle
Antworten:
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
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
ipconfig
oder 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.
quelle
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.UserHostAddress
erfasst 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 #
VB.NET
quelle
what we actually needed to be doing was take the last IP address
aber Ihr Code bekommt den erstenaddresses[0]
. Welches ist richtig?addresses.Length != 0
ist nicht notwendig, da es nie 0 sein kann.UPDATE: Danke an Bruno Lopes. Wenn mehrere IP-Adressen kommen könnten, müssen Sie diese Methode verwenden:
quelle
System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Wenn c # so sieht, ist das sehr einfach
quelle
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äß.
quelle
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.
quelle
Sie können verwenden:
quelle
System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Request for the permission of type 'System.Net.DnsPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
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.
quelle
Alle bisherigen Antworten berücksichtigen den nicht standardisierten, aber sehr häufigen
X-Forwarded-For
Header. Es gibt einen standardisiertenForwarded
Header, der etwas schwieriger zu analysieren ist. Einige Beispiele sind wie folgt:Ich habe eine Klasse geschrieben, die diese beiden Header bei der Ermittlung der IP-Adresse eines Clients berücksichtigt.
Im Folgenden sind einige Komponententests aufgeführt, mit denen ich meine Lösung validiert habe:
quelle
Wenn Sie CloudFlare verwenden, können Sie diese Erweiterungsmethode ausprobieren :
dann
quelle
quelle
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.
quelle
Durch die Kombination der Antworten von @Tony und @mangokun habe ich die folgende Erweiterungsmethode erstellt:
quelle
HTTP_X_FORWARDED_FOR
aber nichtX_FORWARDED_FOR
? Sind sie gleich?Verwendung in der Ashx-Datei
quelle
Verwenden;
quelle
Es ist einfach. Probieren Sie es aus:
nur das :))
quelle
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
und Um Ihre öffentliche IP-Adresse zu erhalten, können Sie diesen Code in Ihr Skript-Tag einfügen
quelle
benutze das
quelle
Versuchen:
quelle