J'essaye actuellement d'obtenir l'adresse IP de l'utilisateur demandé. Le problème est que l'adresse IP revient ::ffff:127.0.0.1
au lieu de 127.0.0.1
. J'ai essayé d'utiliser l' trusted proxy
option (sans utiliser de proxy) et le req.ips
est vide. Utilisation de 4.x Express.js.
router.get('/', function(req, res, next) {
console.log('ip', req.ip)
res.send({})
});
req.ip
oureq.ips
?req.ip
, juste essayéreq.ips
comme test. Je ne suis tout simplement pas sûr de la cause du préfixe::ffff:
.Dotted-quad notation
.Réponses:
::ffff:
est un préfixe de sous-réseau pour les adresses IPv4 (32 bits) placées dans un espace IPv6 (128 bits). IPv6 est divisé en deux parties, le préfixe de sous-réseau et le suffixe d'interface. Chacun a une longueur de 64 bits, soit 4 groupes de 4 caractères hexadécimaux.Dans IPv6, vous êtes autorisé à supprimer les zéros non significatifs, puis à supprimer les zéros consécutifs, ce
::ffff:
qui signifie en fait que0000:0000:ffff:0000
cette adresse a été désignée comme le préfixe de sous-réseau IPv4 à IPv6, de sorte que tout processeur IPv6 comprendra qu'il fonctionne avec une adresse IPv4 et la traitera en conséquence.Dans un proche avenir, les adresses IP seront toutes IPv6, c'est parce que nous sommes presque à court de chiffres (4,2 milliards, moins un peu d'espace à des fins diverses) dans l'espace d'adressage IPv4.
Il est important de commencer à adresser les adresses IP en utilisant l'espace de noms IPv6 et donc d'inclure le
::ffff:
dans votre code car à l'avenir, il y aura de vraies données hexadécimales entre ces deux points. Si vous le supprimez pour des raisons esthétiques, votre code se cassera lorsqu'il basculera sur un réseau IPv6 ou sera confronté à une adresse IPv6.Certains réseaux utilisent actuellement IPv6 et vous serez bientôt confronté à des adresses IP IPv6; faites le saut maintenant ou risquez de casser votre code à l'avenir.
La version TL; DR (courte) du problème est la suivante: tout fonctionne correctement. Ne le changez pas, c'est la version IPv6 d'une adresse IPv4.
Si vous souhaitez rendre votre code compatible avec IPv6, il vous suffit de vérifier le
::ffff:
préfixe ... s'il existe, supprimez-le et traitez le reste comme IPv4 ... s'il::ffff:
n'existe pas, c'est une adresse IPv6 et doit être traité comme tel. Vous pouvez revérifier en voyant si les points sont dans la chaîne, si c'est le cas, c'est IPv4.Gardez à l'esprit que pour tout sauf les ajustements que vous devez apporter aux adresses IP, vous enregistrez simplement l'adresse IP, non? Il sera important pour l'analyseur et les agrégats de journaux de s'attendre
::ffff:127.0.0.1
à l'avenir. À moins que vous n'ayez besoin de modifier une adresse IP, laissez-la comme ce que vous recevez.la source
::ffff:
préfixe , cependant. Vous savez, un IPv6 a de nombreuses notations.Cela semble être une bizarrerie d'ipv6: pour les adresses ipv4, ipv6 semble mélanger la notation ipv6 avec la notation ipv4.
Afin d'obtenir à la fois les adresses ipv4 et ipv6 dans la notation simple et non mélangée, j'utilise:
la source
Si vous avez juste besoin d'IPv4, vous pouvez forcer le serveur de nœuds à écouter en utilisant IPv4.
Pour une modification d'application express
/bin/www
:changement
à
Cela a fonctionné pour moi au moins.
https://nodejs.org/api/net.html#net_server_listen_port_host_backlog_callback
la source
Windows 7 a activé IPv6 par défaut. Même si mon serveur écoute uniquement sur IPv4, Windows 7 envoie le
::ffff:
préfixe à l'IPv4 dans le cadre de la transition vers IPv6Transition depuis IPv4
la source
J'avais des problèmes en essayant de comparer les adresses mappées ipv4 et j'ai trouvé la bibliothèque ipaddr.js utile :-)
par exemple
la source
Essayez ceci pour obtenir l'adresse IP exacte en supprimant le sous-réseau,
la source
Vous pouvez obtenir votre adresse IP seule ou avec la famille spécifiée à l'aide de sockets
la source
la source