Est-il possible de voir mon adresse IP externe sans faire de demande Web sortante?

21

Si votre connexion est NAT, est-il possible de voir votre adresse IP externe sans faire de demande Web sortante?

Tout système d'exploitation (Windows, Linux, etc.) est très bien.

Axel Persinger
la source
7
Essayez-vous seulement d'éviter HTTP, ou essayez-vous d'éviter d'envoyer du trafic sortant du tout? Les seules solutions universelles impliquent l'envoi d'une sorte de trafic sortant, mais il n'est pas nécessaire que ce soit HTTP.
Spiff
C'était plus qu'une hypothèse, je ne voulais pas du tout faire de trafic sortant.
Axel Persinger du
2
Êtes-vous en train de dire que votre réseau / routeur est derrière une configuration NAT de niveau entreprise (c'est-à-dire qu'il obtient une adresse IP privée de votre FAI)? Si c'est le cas, je n'ai aucun moyen de penser que vous pouvez trouver l'adresse IP publique sans que quelque chose n'atteigne le réseau public et essentiellement "regarde en arrière" comme whatsmyip.com ou des services similaires.
acejavelin
le hack que je faisais était de vérifier avec mon routeur - j'avais en fait un script vraiment sale à gratter car, pour une raison quelconque, la plupart des services basés sur le Web ne détectaient pas correctement mon IP. Mon FAI est vraiment amusant de cette façon.
Journeyman Geek
2
Vous pouvez essayer de téléphoner à votre FAI avec vos coordonnées client. Ne nécessite aucune connexion Internet et aucun ordinateur.
Thomas

Réponses:

24

Si votre ordinateur est derrière NAT, il vous est possible de voir l'adresse IP externe de votre routeur, mais vous avez besoin d'un accès administratif au routeur.

Le routeur connaît votre adresse IP externe, donc en accédant à sa page de configuration, vous pouvez trouver cette adresse IP. De cette façon, aucun outil spécialisé n'est requis, à l'exception d'un navigateur Web.

Autres protocoles nécessitant un outil pour obtenir les informations:

Comme testé par l'utilisateur @dirkt, toutes les méthodes ne fonctionnent qu'avec IPv4 (sauf éventuellement pour PCP).

harrymc
la source
L'hyperbole @NicHartley peut certainement faire partie du sarcasme, mais le sarcasme concerne davantage un ton ou une intention de se moquer, qui sont tous deux transmis différemment sous forme de texte qu'en personne. Cela dit, alors que tout protocole doit utiliser IP pour déterminer une adresse IP est une exigence tautologique évidente et oui (puisque vous ne pouvez pas déterminer ce que vous n'utilisez pas), mais un protocole construit sur IP est toujours un protocole différent et il existe on pourrait théoriquement en utiliser plusieurs, ce qui permet d'atteindre ce but. Le point de Lightness était de contrer l'affirmation concernant l'exigence d'une demande Web.
eques
2
"Tout autre moyen nécessitera de faire une demande Web externe" Le Web (c'est-à-dire HTTP) n'est pas requis, mais peut-être le plus facile à comprendre
eques
1
Comme mentionné dans l'autre réponse, uPnP, NAT-PMP et PCP sont différentes façons d'obtenir les informations du routeur en plus d'accéder à sa page de configuration. De la façon dont vous l'avez formulé, cela ressemble à "en plus d'accéder à la page de configuration, toute autre manière nécessitera de faire une demande Web". Correct est "en plus d'obtenir les informations du routeur, tout autre moyen nécessitera une tentative de connexion sortante" (il ne doit pas s'agir d'une demande Web).
dirkt
@dirkt: Pour UPnP, je ne suis pas convaincu; NAT-PMP Je pense que ne fonctionne qu'avec IPv4; PCP sur le réseau IPv6 renverra le préfixe IPv6 et peut faire beaucoup plus, mais cela n'est généralement pas implémenté sur les routeurs commerciaux.
harrymc
1
@harrymc: le point de terminaison du service UPnP pour ma Fritzbox est WANIPConn1/GetExternalIPAddress, et il vient juste de renvoyer la bonne adresse.
dirkt
12

Il existe plusieurs façons de fonctionner avec certains NAT, mais rien n'est garanti pour fonctionner partout.

Je pense que uPnP, NAT-PMP et PCP (Universal Plug And Play, NAT Port Mapping Protocol et Port Control Protocol) ont tous des moyens de demander à une passerelle NAT conforme quelle est l'adresse publique, mais tous les NAT ne prennent pas en charge ces protocoles. La prise en charge est plus courante dans les routeurs de passerelle domestique que dans les solutions NAT d'entreprise ou de classe opérateur.

Lorsque vous vous retrouvez derrière un NAT, le seul moyen sûr de voir dans quelle adresse IP publique il traduit votre trafic est d'envoyer du trafic sortant à un hôte public qui rendra compte, d'une manière que le NAT ne traduira pas, ce que l'adresse de votre trafic semble provenir. L'utilisation d'un service Web est un moyen, mais vous pouvez également le faire en, par exemple, SSHing dans une instance de serveur cloud et voir d'où vient sshdvotre session SSH.

Spiff
la source
8
UPnP etc. pourrait également donner un faux résultat si le système était derrière un NAT double (ou plus).
user71659
@ user71659 Je me demandais s'il existe une adresse anycast qui sera automatiquement acheminée vers le NAT le plus externe de sorte qu'elle puisse être utilisée pour ce type de demande.
kasperd
1
@kasperd Chaque NAT pense que c'est le NAT le plus externe. Il existe certainement des adresses IP qui sont automatiquement routées en dehors de tous les NAT. Ce sont des adresses IP publiques.
user253751
1
@ user20574 Non, les NAT ne pensent pas de cette façon, la plupart s'en moquent. Si une telle adresse anycast devait être définie, la norme devrait également définir quand un NAT s'assigne cette IP à lui-même et quand ce n'est pas le cas. La réponse à cette question est que si l'IP externe est dans RFC 1918 ou RFC 6598, le NAT ne s'attribuera pas l'adresse anycast à lui-même.
kasperd
8

Vous pouvez utiliser une requête DNS qui, je crois, ne rentrerait pas dans la catégorie des "requêtes web":

nslookup myip.opendns.com resolver1.opendns.com
Mehrdad
la source
1
Vous pouvez également utiliser dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns. J'ai trouvé la commande ici: groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…
kasperd
Votre nsslookupcommande échoue pour moi. Je reçois Server: resolver1.opendns.com Address: 2620:119:35::35#53 ** server can't find myip.opendns.com: NXDOMAIN
kasperd
1
@kasperd: Cela ne fonctionne que pour IPv4, désolé. J'ai évité digcar ce n'est pas sous Windows. Bon point myaddrpour Google cependant, je n'en étais pas conscient! Je suppose que l' nslookupéquivalent de Windows seraitnslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
Mehrdad
J'ai exécuté cette commande sur une machine qui a à la fois IPv4 et IPv6, donc si vraiment pris en charge IPv4, cela aurait dû fonctionner. Le problème est apparemment que vous ne pouvez pas indiquer la nslookupversion IP à utiliser pour le transport, mais la façon dont OpenDNS le fait signifie que vous devez le faire. Sans cela, vous devrez prédire quelle version IP nslookuputilisera pour le transport et demander A ou AAAA en conséquence. Si vous êtes coincé avec nslookupvous pouvez utiliser un autre fournisseur tel que Google. Cependant, vous obtenez toujours une seule version de protocole dans la réponse et vous ne pouvez pas choisir laquelle.
kasperd
J'ai testé nslookup -type=txt o-o.myaddr.l.google.com ns3.google.comet ça marche en effet. Mais si j'ai à la fois IPv4 et IPv6, cela ne me permettra pas de choisir lequel d'entre eux je pourrai voir. Très probablement, il me montrera l'adresse IPv6, et très probablement je l'utilise parce que je veux connaître l'adresse IPv4 d'un NAT. Pour contourner cela, il faudrait utiliser un service qui a un nom uniquement IPv4 et un nom uniquement IPv6, qui résoudrait également le problème de NAT64.
kasperd
7

Je voudrais ajouter un point aux réponses déjà existantes.

Cela dépend également de la complexité du réseau. Il est possible que votre ordinateur se trouve dans un réseau qui a plusieurs adresses IP externes et que le routeur quelque part sur la ligne envoie le trafic vers Internet en fonction de certains critères: par exemple, l'adresse IP de destination ou l'heure (peut être un canal de liaison montante est moins cher la nuit ou pour d'autres raisons).

Donc, pour être complète, une notion d '"adresse IP externe" peut nécessiter la définition d'un point de destination auquel votre adresse est externe.

Dans l'exemple ci Router #2- dessous, le NAT pourrait être exécuté et envoyer du trafic vers l'une ou l'autre des liaisons montantes et l'hôte de réception pourrait voir une adresse IP externe différente pour le Host.

Ou il se peut qu'une certaine destination (par exemple host1.example.com) passe toujours par le Uplink A, et que l'hôte passe host2.example.comtoujours par Uplink B. Ainsi, vos adresses IP externes comme on le voit par ces hôtes seront différentes, à condition que Uplink Aet Uplink Bsont différents fournisseurs de services Internet.

   Uplink A                                  Uplink B
-------------                             -------------
      |                                         |
      |                                         |
      |     192.168.1.1         192.168.50.50   |
      |               -----------               |
      |---------------|Router #2|---------------|
                      -----------
                           |  192.168.100.1
                           |
                           |  192.168.100.2
                      -----------
                      |Router #1|
                      -----------
                           |  192.168.200.1
                           |
                           |  192.168.200.2
                      -----------
                      |   Host  |
                      -----------

Ainsi, l'envoi de trafic permettra d'obtenir des résultats plus fiables.

VL-80
la source
4

Vous pouvez utiliser DNS plutôt que HTTP. Par exemple, vous pouvez utiliser:

dig +short TXT o-o.myaddr.l.google.com

Cela affichera l'adresse unicast du serveur DNS que vous utilisez, et s'il prend en charge EDNS, il affichera également votre adresse IP, bien que éventuellement tronquée.

Pour obtenir votre adresse IP complète, vous pouvez contourner votre serveur DNS local et envoyer la demande ci-dessus directement à ns {1,2,3,4} .google.com

dig +short TXT o-o.myaddr.l.google.com @ns3.google.com

Si vous souhaitez voir votre adresse IP dans une version de protocole spécifique, vous pouvez utiliser -6et -4:

dig -6 +short TXT o-o.myaddr.l.google.com @ns3.google.com
dig -4 +short TXT o-o.myaddr.l.google.com @ns3.google.com

Vous pouvez également utiliser OpenDNS si vous le souhaitez. OpenDNS n'utilise pas d'enregistrements TXT pour cela, mais plutôt des enregistrements A et AAAA, vous devez donc spécifier la version de protocole que vous recherchez:

dig -6 +short AAAA myip.opendns.com @resolver2.opendns.com
dig -4 +short A myip.opendns.com @resolver2.opendns.com

Notez que si votre trafic passe par la traduction de protocole, vous pouvez obtenir des résultats différents, voire aucun. Test à partir d'une machine derrière NAT64 J'ai pu voir mon adresse IPv6 avec les commandes ci-dessus mais pas l'adresse IPv4 du NAT64.

Cette réponse est basée sur ces sources 1 2 3 et sur mes propres recherches.

kasperd
la source
2

Le Web fait généralement référence à HTTP, si c'est le sens de votre question, alors par exemple, vous pouvez utiliser STUN ( article Wikipedia ) qui signifie "Session Traversal Utilities for NAT".

Maintenant, comme cela a été mis en évidence dans un commentaire, vous pouvez avoir plusieurs adresses IP externes. De plus, comme les connexions sans fil sont de plus en plus courantes (chose 4G), il n'est pas impossible que l'adresse IP signalée par votre routeur ne soit pas publique. J'ai même rencontré ce scénario sur les connexions en fibre optique dans certains pays, où le FAI donnerait au routeur local une IP privée, qui serait traduit 1: 1 en IP publique plus tard en quittant leur réseau.

Donc, si votre question est "puis-je trouver mon IP publique sans envoyer de paquets hors de mon réseau", vous POURRIEZ dans votre contexte, mais il n'y a pas de solution à 100%.

user1532080
la source