Je sais que la réaction initiale à cette question est «non» et «cela ne peut pas être fait» et «vous ne devriez pas en avoir besoin, vous faites quelque chose de mal». Ce que j'essaie de faire, c'est d'obtenir l'adresse IP LAN des utilisateurs et de l'afficher sur la page Web. Pourquoi? Parce que c'est ce sur quoi je travaille, montrant autant d'informations que possible sur vous, le visiteur: http://www.whatsmyip.org/more-info-about-you/
Je ne fais donc rien avec l'adresse IP, à part la montrer à l'utilisateur à des fins d'information. J'avais l'habitude de faire cela en utilisant une petite applet Java. Cela a plutôt bien fonctionné. Mais ces jours-ci, le navigateur vous fait accepter et faire confiance tellement de fois, pour exécuter même l'applet java la plus mineure, que je préfère ne pas en lancer du tout.
Donc, pendant un moment, je viens de me débarrasser de cette fonctionnalité, mais j'aimerais qu'elle revienne si possible. C'était quelque chose que moi, en tant que consultant en informatique, j'utilisais de temps en temps. Il est plus rapide d'aller sur ce site Web pour voir sur quelle plage IP un réseau fonctionne, que d'aller dans Préférences système, Réseau, puis quelle que soit l'interface active.
Alors je me demande, en espérant, s'il existe un moyen de le faire en javascript seul? Peut-être que vous pouvez accéder à un nouvel objet, similaire à la façon dont javascript peut demander au navigateur où se trouve l'emplacement géographique sur Terre. Peut-être qu'il y a quelque chose de similaire pour les informations de réseau client? Sinon, peut-être existe-t-il une autre façon de le faire? Les seuls moyens auxquels je peux penser sont une applet java ou un objet flash. Je préfère ne faire ni l'un ni l'autre.
la source
HTTP_X_FORWARDED_FOR
sur cette page, dites simplement.Réponses:
En fait, la récente extension WebRTC de HTML5 permet à javascript d'interroger l'adresse IP du client local. Une preuve de concept est disponible ici: http://net.ipcalf.com
Cette fonctionnalité est apparemment par conception et n'est pas un bogue. Cependant, étant donné sa nature controversée, je serais prudent de me fier à ce comportement. Néanmoins, je pense que cela répond parfaitement et de manière appropriée à votre objectif (révéler à l'utilisateur ce que son navigateur fuit).
la source
Mettre à jour
Cette solution ne fonctionnerait plus car les navigateurs corrigent la fuite de webrtc: pour plus d'informations à ce sujet, lisez cette autre question: RTCIceCandidate ne renvoie plus d'IP
En plus de la réponse de quatre personnes, ce code fonctionne dans les navigateurs prenant en charge WebRTC (Chrome et Firefox). J'ai entendu dire qu'il y avait un mouvement en cours pour implémenter une fonctionnalité qui oblige les sites à demander l'IP (comme dans le cas de la géolocalisation de l'utilisateur ou du média utilisateur) bien qu'elle n'ait pas encore été implémentée dans l'un de ces navigateurs.
Voici une version modifiée du code source , réduit les lignes, ne faisant aucune demande d'étourdissement puisque vous ne voulez que l'adresse IP locale et non l'adresse IP publique:
Nous créons une connexion d'homologue factice pour que l'homologue distant nous contacte. Nous échangeons généralement des candidats de glace entre eux et en lisant les candidats de glace, nous pouvons dire l'adresse IP de l'utilisateur.
Vous pouvez trouver une démo sur -> Démo
la source
L' API WebRTC peut être utilisée pour récupérer l'adresse IP locale du client.
Cependant, le navigateur peut ne pas le prendre en charge ou le client peut l'avoir désactivé pour des raisons de sécurité. Dans tous les cas, il ne faut pas compter sur ce "hack" sur le long terme car il est susceptible d'être patché dans le futur (voir la réponse de Cullen Fluffy Jennings).
Le code ECMAScript 6 ci-dessous montre comment procéder.
Remarquez que j'écris
return resolve(..)
oureturn reject(..)
comme raccourci. Ces deux fonctions ne renvoient rien.Ensuite, vous pouvez avoir quelque chose comme ça:
la source
J'ai nettoyé le message de mido, puis nettoyé la fonction qu'ils ont trouvée. Cela retournera
false
ou un fichierarray
. Lors du test rappelez -vous que vous avez besoin pour réduire le tableau dans la console développeur web sinon il est le comportement par défaut peut vous tromper non intuitif pour penser qu'il retourne un videarray
.De plus, gardez à l'esprit que ce n'est pas quelque chose d'ancien-nouveau comme CSS,
border-radius
même si l'un de ces bits n'est carrément pas pris en charge par IE11 et les versions antérieures. Utilisez toujours la détection d'objet, testez dans des navigateurs raisonnablement plus anciens (par exemple Firefox 4, IE9, Opera 12.1) et assurez-vous que vos nouveaux scripts ne cassent pas vos nouveaux morceaux de code. De plus, détectez toujours le code conforme aux normes en premier, donc s'il y a quelque chose avec, par exemple, un préfixe CSS, détectez d' abord le code standard non préfixé , puis retombez car à long terme, le support sera finalement normalisé pour le reste de son existence.la source
ip
- ligne 3 et ligne 8.<input name="example1" type="hidden" value="whatever" />
ou utiliser un AJAX POST dans une telle situation. Je recommande fortement d'étudier maajax()
fonction ici: jabcreations.com/docs/javascriptla source
Chrome 76+
L'année dernière, j'ai utilisé la réponse de Linblow (2018-oct-19) pour découvrir avec succès mon adresse IP locale via javascript. Cependant, les récentes mises à jour de Chrome (76?) Ont échoué cette méthode de sorte qu'elle renvoie maintenant une adresse IP obscurcie, telle que:
1f4712db-ea17-4bcf-a596-105139dfd8bf.local
Si vous avez un contrôle total sur votre navigateur, vous pouvez annuler ce comportement en le désactivant dans Chrome Flags, en tapant ceci dans votre barre d'adresse:
et DÉSACTIVER le drapeau
Anonymize local IPs exposed by WebRTC
Dans mon cas, j'ai besoin de l'adresse IP d'un script TamperMonkey pour déterminer mon emplacement actuel et faire différentes choses en fonction de mon emplacement. J'ai également un contrôle total sur les paramètres de mon propre navigateur (pas de politique d'entreprise, etc.). Donc pour moi, changer le
chrome://flags
réglage fait l'affaire.Sources:
https://groups.google.com/forum/#!topic/discuss-webrtc/6stQXi72BEU
https://codelabs.developers.google.com/codelabs/webrtc-web/index.html
la source
Vous pouvez trouver plus d'informations sur les limitations que les navigateurs ajouteront probablement pour atténuer cela et ce que l'IETF fait à ce sujet, ainsi que les raisons pour lesquelles cela est nécessaire à l' IETF SPEC sur la gestion IP.
la source
Un
RTCPeerConnection
peut être utilisé. Dans les navigateurs comme Chrome où unegetUserMedia
autorisation est requise , nous pouvons simplement détecter les périphériques d'entrée disponibles et les demander.la source