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

13voto

Jit9 Points 189

A mon avis, la solution la plus simple est

import requests
f = requests.request('GET', 'http://myip.dnsomatic.com')
ip = f.text

C'est tout.

9voto

Ahmed Points 314

Utilice demande module :

import requests

myip = requests.get('https://www.wikipedia.org').headers['X-Client-IP']

print("\n[+] Public IP: "+myip)

8voto

Eli Points 400

Si vous ne voulez pas utiliser de services externes (sites web IP, etc.), vous pouvez utiliser l'option Protocole UPnP .

Pour ce faire, nous utilisons une simple bibliothèque client UPnP ( https://github.com/flyte/upnpclient )

Installer :

pip install upnpclient

Code simple :

import upnpclient

devices = upnpclient.discover()

if(len(devices) > 0):
    externalIP = devices[0].WANIPConn1.GetExternalIPAddress()
    print(externalIP)
else:
    print('No Connected network interface detected')

Code complet (pour obtenir plus d'informations comme mentionné dans le readme de github)

In [1]: import upnpclient

In [2]: devices = upnpclient.discover()

In [3]: devices
Out[3]: 
[<Device 'OpenWRT router'>,
 <Device 'Harmony Hub'>,
 <Device 'walternate: root'>]

In [4]: d = devices[0]

In [5]: d.WANIPConn1.GetStatusInfo()
Out[5]: 
{'NewConnectionStatus': 'Connected',
 'NewLastConnectionError': 'ERROR_NONE',
 'NewUptime': 14851479}

In [6]: d.WANIPConn1.GetNATRSIPStatus()
Out[6]: {'NewNATEnabled': True, 'NewRSIPAvailable': False}

In [7]: d.WANIPConn1.GetExternalIPAddress()
Out[7]: {'NewExternalIPAddress': '123.123.123.123'}

8voto

JavDomGom Points 41

Il suffit de l'exécuter dans Python3 :

import os

externalIP  = os.popen('curl -s ifconfig.me').readline()
print(externalIP)

8voto

NUACHE Points 166

Essayez :

import requests 
ip = requests.get('http://ipinfo.io/json').json()['ip']

J'espère que cela vous aidera

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