Nous devons Request.UserHostAddress
obtenir l'adresse IP dans ASP.NET, mais c'est généralement l'adresse IP du FAI de l'utilisateur, pas exactement l'adresse IP de la machine de l'utilisateur qui, par exemple, a cliqué sur un lien. Comment puis-je obtenir la véritable adresse IP?
Par exemple, dans un profil utilisateur Stack Overflow, c'est: "Dernière activité de compte: il y a 4 heures depuis 86.123.127.8" , mais l'adresse IP de ma machine est un peu différente. Comment Stack Overflow obtient-elle cette adresse?
Dans certains systèmes Web, il existe une vérification d'adresse IP à certaines fins. Par exemple, avec une certaine adresse IP, pour toutes les 24 heures, l'utilisateur ne peut-il avoir que 5 clics sur les liens de téléchargement? Cette adresse IP doit être unique, pas pour un FAI qui a une vaste gamme de clients ou d'utilisateurs Internet.
Ai-je bien compris?
la source
Réponses:
Comme d'autres l'ont dit, vous ne pouvez pas faire ce que vous demandez. Si vous décrivez le problème que vous essayez de résoudre, peut-être que quelqu'un peut vous aider?
Par exemple
ÉditerL'adresse que vous voyez sur le serveur ne doit pas être l'adresse du FAI, car vous dites que ce serait une énorme plage. L'adresse d'un utilisateur domestique sur large bande sera l'adresse de leur routeur, donc chaque appareil à l'intérieur de la maison apparaîtra à l'extérieur pour être le même, mais le routeur utilise NAT pour s'assurer que le trafic est correctement acheminé vers chaque appareil. Pour les utilisateurs accédant à partir d'un environnement de bureau, l'adresse peut être la même pour tous les utilisateurs. Les sites qui utilisent une adresse IP pour l'ID courent le risque de se tromper - les exemples que vous donnez sont bons et ils échouent souvent. Par exemple, mon bureau est au Royaume-Uni, le point de rupture (où je "semble" être sur Internet) est dans un autre pays où se trouve notre principale installation informatique, donc depuis mon bureau, mon adresse IP ne semble pas être au Royaume-Uni. Pour cette raison, je ne peux pas accéder au contenu Web uniquement au Royaume-Uni, comme le BBC iPlayer). À tout moment, il y aurait des centaines, voire des milliers de personnes dans mon entreprise qui semblent accéder au Web à partir de la même adresse IP.
Lorsque vous écrivez du code serveur, vous ne pouvez jamais être sûr de l’adresse IP à laquelle vous voyez. Certains utilisateurs aiment ça. Certaines personnes utilisent délibérément un proxy ou un VPN pour vous confondre davantage.
Lorsque vous dites que l'adresse de votre machine est différente de l'adresse IP indiquée sur StackOverflow, comment trouvez-vous l'adresse de votre machine? Si vous cherchez simplement à utiliser localement
ipconfig
ou quelque chose comme ça, je m'attendrais à ce que ce soit différent pour les raisons que j'ai décrites ci-dessus. Si vous voulez vérifier ce que pense le monde extérieur, consultez whatismyipaddress.com/ .Ce lien Wikipédia sur NAT vous fournira quelques informations à ce sujet.
la source
Souvent, vous voudrez connaître l'adresse IP d'une personne visitant votre site Web. Bien qu'ASP.NET ait plusieurs façons de le faire, l'une des meilleures façons que nous avons vues est d'utiliser le "HTTP_X_FORWARDED_FOR" de la collection ServerVariables.
Voici pourquoi...
Parfois, vos visiteurs se trouvent derrière un serveur proxy ou un routeur et la norme
Request.UserHostAddress
capture uniquement l'adresse IP du serveur proxy ou du routeur. Dans ce cas, l'adresse IP de l'utilisateur est alors stockée dans la variable serveur ("HTTP_X_FORWARDED_FOR").Donc, ce que nous voulons faire, c'est d'abord vérifier "HTTP_X_FORWARDED_FOR" et si c'est vide, nous revenons simplement
ServerVariables("REMOTE_ADDR")
.Bien que cette méthode ne soit pas infaillible, elle peut conduire à de meilleurs résultats. Ci-dessous, le code ASP.NET dans VB.NET, extrait du billet de blog de James Crowley "Gotcha: HTTP_X_FORWARDED_FOR renvoie plusieurs adresses IP"
C #
VB.NET
la source
what we actually needed to be doing was take the last IP address
mais votre code obtient le premieraddresses[0]
. Qui est correct?addresses.Length != 0
n'est pas nécessaire, car il ne peut jamais être 0.MISE À JOUR: Merci à Bruno Lopes. Si plusieurs adresses IP peuvent venir, vous devez utiliser cette méthode:
la source
System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Si est c # voir de cette façon, est très simple
la source
Que considérez-vous d'autre comme l'adresse IP de l'utilisateur? Si vous voulez l'adresse IP de la carte réseau, je crains qu'il n'y ait aucun moyen possible de le faire dans une application Web. Si votre utilisateur est derrière NAT ou autre, vous ne pouvez pas non plus obtenir l'IP.
Mise à jour : Bien qu'il existe des sites Web qui utilisent IP pour limiter l'utilisateur (comme rapidshare), ils ne fonctionnent pas correctement dans les environnements NAT.
la source
Je pense que je devrais partager mon expérience avec vous tous. Eh bien, je vois que dans certaines situations, REMOTE_ADDR ne vous donnera PAS ce que vous cherchez. Par exemple, si vous avez un équilibreur de charge derrière la scène et si vous essayez d'obtenir l'IP du client, vous aurez des problèmes. Je l'ai vérifié avec mon logiciel de masquage IP et j'ai également vérifié avec mes collègues se trouvant sur différents continents. Voici donc ma solution.
Lorsque je veux connaître l'IP d'un client, j'essaie de sélectionner toutes les preuves possibles afin de pouvoir déterminer si elles sont uniques:
Ici, j'ai trouvé un autre serveur qui pourrait vous aider tous si vous voulez obtenir l'IP exacte du côté client. donc j'utilise: HTTP_X_CLUSTER_CLIENT_IP
HTTP_X_CLUSTER_CLIENT_IP vous obtient toujours l'adresse IP exacte du client. Dans tous les cas, si cela ne vous donne pas la valeur, vous devez alors rechercher HTTP_X_FORWARDED_FOR car c'est le deuxième meilleur candidat pour vous obtenir l'adresse IP du client, puis la variable REMOTE_ADDR qui peut ou non vous renvoyer l'IP, mais pour moi, avoir tout cela trois est ce que je trouve le mieux pour les surveiller.
J'espère que cela aide certains gars.
la source
Vous pouvez utiliser:
la source
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.
Les adresses IP font partie de la couche Réseau dans la "pile à sept couches". La couche réseau peut faire tout ce qu'elle veut faire avec l'adresse IP. C'est ce qui se passe avec un serveur proxy, NAT, relais ou autre.
La couche Application ne doit en aucun cas dépendre de l'adresse IP. En particulier, une adresse IP n'est pas censée être un identifiant de quelque chose d'autre que l'idenfitier d'une extrémité d'une connexion réseau. Dès qu'une connexion est fermée, vous devez vous attendre à ce que l'adresse IP (du même utilisateur) change.
la source
Jusqu'à présent, toutes les réponses tiennent compte de l'en- tête non normalisé, mais très courant
X-Forwarded-For
. Il existe un en-Forwarded
tête standardisé qui est un peu plus difficile à analyser. Voici quelques exemples:J'ai écrit une classe qui prend en compte ces deux en-têtes lors de la détermination de l'adresse IP d'un client.
Voici quelques tests unitaires que j'ai utilisés pour valider ma solution:
la source
Si vous utilisez CloudFlare, vous pouvez essayer cette méthode d'extension :
puis
la source
la source
Ce que vous pouvez faire est de stocker l'IP du routeur de votre utilisateur et également l'IP transféré et essayez de le rendre fiable en utilisant à la fois les IP [Public externe et Privé interne]. Mais encore une fois, après quelques jours, le client peut se voir attribuer une nouvelle adresse IP interne à partir du routeur, mais ce sera plus fiable.
la source
En combinant les réponses de @Tony et @mangokun , j'ai créé la méthode d'extension suivante:
la source
HTTP_X_FORWARDED_FOR
mais pasX_FORWARDED_FOR
? Sont-ils les mêmes?utiliser dans le fichier ashx
la source
Utilisation;
la source
C'est facile, essayez:
juste ça :))
la source
Bonjour les gars La plupart des codes que vous trouverez vous renverront l'adresse IP du serveur et non l'adresse IP du client. Cependant, ce code renvoie l'adresse IP du client correcte. Essayez-le. Pour plus d'informations, vérifiez ceci
https://www.youtube.com/watch?v=Nkf37DsxYjI
pour obtenir votre adresse IP locale en utilisant javascript, vous pouvez mettre ce code dans votre balise de script
et pour obtenir votre adresse IP publique, vous pouvez utiliser ce code à l'intérieur de votre balise de script
la source
utilisez ceci
la source
Essayer:
la source