Quand j'appelle socket.getsockname()
sur un objet socket, il renvoie un tuple de l'IP interne de ma machine et du port. Cependant, j'aimerais récupérer mon IP externe. Quelle est la manière la plus économique et la plus efficace de le faire ?
Réponses
Trop de publicités?
Cody Brocious
Points
24042
Le seul moyen auquel je pense et qui est garanti de vous le donner est de faire appel à un service tel que http://whatismyip.com/ pour l'obtenir.
Rafael Lopes
Points
43
https://github.com/bobeirasa/mini-scripts/blob/master/externalip.py
'''
Finds your external IP address
'''
import urllib
import re
def get_ip():
group = re.compile(u'(?P<ip>\d+\.\d+\.\d+\.\d+)').search(urllib.URLopener().open('http://jsonip.com/').read()).groupdict()
return group['ip']
if __name__ == '__main__':
print get_ip()
Scott
Points
143
Pour ce faire, vous devrez utiliser un système externe.
La réponse IP de DuckDuckGo vous donnera exactement ce que vous voulez, et en JSON !
import requests
def detect_public_ip():
try:
# Use a get request for api.duckduckgo.com
raw = requests.get('https://api.duckduckgo.com/?q=ip&format=json')
# load the request as json, look for Answer.
# split on spaces, find the 5th index ( as it starts at 0 ), which is the IP address
answer = raw.json()["Answer"].split()[4]
# if there are any connection issues, error out
except Exception as e:
return 'Error: {0}'.format(e)
# otherwise, return answer
else:
return answer
public_ip = detect_public_ip()
print(public_ip)
Utilisateur non enregistré
Points
0
- Réponses précédentes
- Plus de réponses