Afficher votre adresse IP publique avec PowerShell
Windows ne connaît pas l'adresse sous laquelle il sort sur Internet : seul un serveur extérieur la voit. Voici comment l'interroger en PowerShell, et quand il vaut mieux lire la réponse sur le routeur.
Une commande comme ipconfig ou Get-NetIPAddress affiche les adresses des cartes réseau. Sur un réseau d'entreprise ou domestique, ce sont presque toujours des adresses privées, et non l'adresse publique sous laquelle la machine apparaît sur Internet. Pour obtenir cette dernière en PowerShell, il faut poser la question à quelqu'un d'extérieur.
Adresse locale ou adresse publique
Le RFC 1918 réserve trois plages d'adresses IPv4 à l'usage privé, non routées sur Internet :
| Plage | Préfixe |
|---|---|
10.0.0.0 – 10.255.255.255 | 10/8 |
172.16.0.0 – 172.31.255.255 | 172.16/12 |
192.168.0.0 – 192.168.255.255 | 192.168/16 |
Une machine en 192.168.10.25 passe par un routeur ou un pare-feu qui traduit son adresse (NAT) vers l'adresse publique du site. Windows ne voit jamais cette traduction : elle a lieu sur un autre équipement. Pour vérifier ce que porte chaque interface :
Get-NetIPAddress -AddressFamily IPv4
Si l'adresse affichée tombe dans l'une des trois plages, ce n'est pas votre adresse publique. Ces adresses privées sont celles que distribue un serveur interne : la page sur la configuration d'un serveur DHCP sous Windows Server montre d'où elles viennent.
La seule méthode fiable : demander à un service extérieur
Un service web voit l'adresse source de la connexion qu'il reçoit. Certains services renvoient simplement cette adresse, en texte brut ou en JSON. En PowerShell, Invoke-RestMethod envoie la requête HTTP ou HTTPS et, selon Microsoft, convertit automatiquement une réponse JSON ou XML en objets.
Invoke-RestMethod -Uri https://<service-d-echo-ip>/
Remplacez l'adresse par celle d'un service que votre organisation a choisi. Cette page n'en recommande aucun en particulier, pour trois raisons :
- vous dépendez d'un tiers : s'il change de format ou ferme, le script casse ;
- vous lui révélez votre adresse et l'heure de vos requêtes ;
- un proxy fausse le résultat : derrière un proxy d'entreprise, c'est l'adresse du proxy que le service voit.
Le choix le plus propre en entreprise reste un petit service interne, hébergé hors du réseau, que vous maîtrisez. Testez le script sur un poste de lab avant de le planifier sur des serveurs.
Dans un script
Si le service renvoie du JSON, Invoke-RestMethod en fait un objet dont vous lisez la propriété voulue ; s'il renvoie du texte, vous obtenez une chaîne. Encadrez l'appel pour qu'un service indisponible ne fasse pas planter le reste du traitement :
try {
$ip = Invoke-RestMethod -Uri https://<service-d-echo-ip>/ -ErrorAction Stop
"Adresse publique : $ip"
}
catch {
"Service injoignable : $($_.Exception.Message)"
}
Le traitement des erreurs avec try, catch et -ErrorAction Stop est expliqué dans la page sur l'écriture de scripts PowerShell.
Sur une VM Azure : le service de métadonnées
Une machine virtuelle Azure dispose d'une source officielle : le service de métadonnées d'instance (IMDS). Microsoft le décrit comme une API REST joignable uniquement depuis la VM, à l'adresse non routable 169.254.169.254, et dont le trafic ne quitte jamais l'hôte. La réponse inclut une rubrique réseau où le champ ipv4.ipAddress.publicIpAddress est documenté comme l'adresse IPv4 publique de la VM.
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance?api-version=2025-04-07"
Microsoft précise que -NoProxy demande PowerShell 6 ou ultérieur. Si le champ revient vide, l'adresse publique de la VM se lit dans le portail Azure. La version d'API ci-dessus est celle de l'exemple Microsoft lu à la date de cette page.
L'alternative sans Internet : le routeur ou le pare-feu
Pour un serveur qui n'a pas le droit de sortir sur le web, ou pour connaître l'adresse d'un site entier, la réponse se trouve sur l'équipement qui fait la traduction d'adresses :
- la page d'état de l'interface WAN du routeur ou du pare-feu ;
- la console de l'opérateur, qui indique l'adresse attribuée à l'abonnement ;
- la configuration NAT sortante, si le site dispose de plusieurs adresses publiques.
Cette méthode a un avantage que n'a pas un service web : elle donne l'adresse attendue, pas seulement celle observée. Si les deux divergent, le trafic ne sort pas par où vous le pensez.
Vérifier ensuite ce qui est joignable
Connaître son adresse publique sert souvent à tester une redirection de port depuis l'extérieur. La cmdlet présentée dans la page sur Test-NetConnection pour tester un port fait ce contrôle, lancée depuis une machine située hors du réseau. Les autres tutoriels sont rassemblés dans la rubrique Windows Server et PowerShell.
Questions fréquentes
Quelle commande PowerShell affiche l'IP publique ?
Aucune commande locale ne la connaît. Il faut interroger un service extérieur avec Invoke-RestMethod -Uri <adresse du service>, ou lire l'adresse WAN sur le routeur ou le pare-feu.
Pourquoi ipconfig n'affiche-t-il pas mon IP publique ?
Parce que la machine porte une adresse privée et qu'un routeur la traduit vers l'adresse publique. Cette traduction se fait ailleurs que sur Windows, qui ne la voit pas.
Comment savoir si mon adresse est privée ?
Comparez-la aux trois plages du RFC 1918 : 10.0.0.0/8, 172.16.0.0/12 et 192.168.0.0/16. Une adresse dans l'une d'elles n'est pas routée sur Internet.
Le résultat est-il fiable derrière un proxy ?
Non : le service voit l'adresse du proxy, pas celle de votre accès. Interrogez-le sans proxy si votre politique réseau l'autorise, ou lisez l'adresse sur l'équipement de sortie.
Comment obtenir l'IP publique d'une VM Azure ?
Interrogez le service de métadonnées d'instance à 169.254.169.254 avec l'en-tête Metadata: true, depuis la VM elle-même. Le champ publicIpAddress de la rubrique réseau contient l'adresse lorsqu'elle est renseignée.