Question

Quand j'appelle socket.getsockname() sur un objet socket, il renvoie un tuple de l'adresse IP interne de ma machine et du port.Cependant, je souhaite récupérer mon IP externe.Quelle est la manière la moins chère et la plus efficace de procéder ?

Était-ce utile?

La solution

Cela n'est pas possible sans la coopération d'un serveur externe, car il peut y avoir n'importe quel nombre de NAT entre vous et l'autre ordinateur.S'il s'agit d'un protocole personnalisé, vous pouvez demander à l'autre système d'indiquer à quelle adresse il est connecté.

Autres conseils

La seule façon à laquelle je peux penser d'être sûr de vous le donner est d'accéder à un service comme http://whatismyip.com/ pour l'obtenir.

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()

prise d'importation

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(("msn.com",80))

s.getsockname()

print (urllib.urlopen('http://automation.whatismyip.com/n09230945.asp').read())

Vous devrez utiliser un système externe pour ce faire.

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)

En utilisant l'adresse suggérée dans la source de http://whatismyip.com

import urllib
def get_my_ip_address():
    whatismyip = 'http://www.whatismyip.com/automation/n09230945.asp'
    return urllib.urlopen(whatismyip).readlines()[0]

Vous devez vous connecter à un serveur externe et obtenir votre adresse IP publique à partir de la réponse


comme ça:

   import requests

   myPublic_IP = requests.get("http://wtfismyip.com/text").text.strip()

   print("\n[+] My Public IP: "+ myPublic_IP+"\n")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top