161 votes

Obtenir l'adresse IP externe d'une machine avec Python

Vous cherchez un meilleur moyen d'obtenir le numéro IP externe actuel d'une machine... La méthode ci-dessous fonctionne, mais je préférerais ne pas dépendre d'un site externe pour obtenir l'information... Je suis limité à l'utilisation des bibliothèques Python 2.5.1 standard fournies avec Mac OS X 10.5.x.

import os
import urllib2

def check_in():

    fqn = os.uname()[1]
    ext_ip = urllib2.urlopen('http://whatismyip.org').read()
    print ("Asset: %s " % fqn, "Checking in from IP#: %s " % ext_ip)

0 votes

5voto

Thomas Ahle Points 10403

Si vous pensez qu'une source externe est trop peu fiable, vous pouvez regrouper plusieurs services différents. Pour la plupart des pages de recherche d'adresses IP, ils vous demandent de gratter du html, mais quelques-uns d'entre eux ont créé des pages allégées pour les scripts comme le vôtre - aussi pour pouvoir réduire les visites sur leurs sites :

5voto

Fernando Points 81

J'ai écrit un module pour ça : ipgetter . Il est conçu pour récupérer votre adresse IP externe sur Internet. Il est utilisé principalement derrière un NAT. Il choisit votre adresse IP de manière aléatoire à partir d'une liste de serveurs afin de minimiser la charge de la demande sur un seul serveur. En fait, avec 44 serveurs et une fonction de test pour vérifier si les serveurs renvoient la même IP.

https://github.com/phoemur/ipgetter

va comme ça :

>>> import ipgetter
>>> IP = ipgetter.myip()
>>> print(IP)
'xxx.xxx.xxx.xxx'

>>> ipgetter.IPgetter().test()
Number of servers: 44
IP's :
'xxx.xxx.xxx.xxx' = 44 ocurrencies

5voto

user2800435 Points 21

Il existe quelques autres moyens qui ne reposent pas sur la vérification par Python d'un site Web externe, mais le système d'exploitation peut le faire. Le problème principal est que même si vous n'utilisez pas Python, si vous utilisez la ligne de commande, il n'y a pas de commandes "intégrées" qui peuvent simplement vous indiquer l'adresse IP externe (WAN). Des commandes telles que "ip addr show" et "ifconfig -a" vous indiquent les adresses IP du serveur au sein du réseau. Seul le routeur détient réellement l'adresse IP externe. Cependant, il existe des moyens de trouver l'adresse IP externe (WAN IP) à partir de la ligne de commande.

Ces exemples sont :

http://ipecho.net/plain ; echo
curl ipinfo.io/ip
dig +short myip.opendns.com @resolver1.opendns.com
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com

Par conséquent, le code python serait :

import os
ip = os.popen('wget -qO- http://ipecho.net/plain ; echo').readlines(-1)[0].strip()
print ip

OU

import os
iN, out, err = os.popen3('curl ipinfo.io/ip')
iN.close() ; err.close()
ip = out.read().strip()
print ip

OU

import os
ip = os.popen('dig +short myip.opendns.com @resolver1.opendns.com').readlines(-1)[0].strip()
print ip

Ou, branchez n'importe quel autre exemple ci-dessus, dans une commande comme os.popen, os.popen2, os.popen3, ou os.system.

P.S. vous pouvez utiliser "pip3 install pytis" et utiliser/regarder le programme "getip", écrit en Python. Vous pouvez également trouver son code ici : https://github.com/PyTis/PyTis/blob/development/src/pytis/getip.py

5voto

Incogma Points 41

J'utilise IPGrab parce que c'est facile à retenir :

# This example requires the requests library be installed.  You can learn more
# about the Requests library here: http://docs.python-requests.org/en/latest/
from requests import get

ip = get('http://ipgrab.io').text
print('My public IP address is: {}'.format(ip))

5voto

Al Sweigart Points 198

Malheureusement, il n'existe aucun moyen d'obtenir votre adresse IP externe sans consulter un ordinateur sur Internet. Au mieux, vous pouvez obtenir l'adresse IP du réseau local de votre carte réseau (qui est probablement une 192.16. . adresse).

Vous pouvez utiliser le whatismyip pour obtenir les adresses IP externes. Il n'a aucune dépendance en dehors de la bibliothèque standard de Python 3. Il se connecte aux serveurs STUN publics et aux sites web what-is-my-ip pour trouver l'adresse IPv4 ou IPv6. Exécuter pip install whatismyip

Exemple :

>>> import whatismyip
>>> whatismyip.amionline()
True
>>> whatismyip.whatismyip()  # Prefers IPv4 addresses, but can return either IPv4 or IPv6.
'69.89.31.226'
>>> whatismyip.whatismyipv4()
'69.89.31.226'
>>> whatismyip.whatismyipv6()
'2345:0425:2CA1:0000:0000:0567:5673:23b5'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X