it-swarm.com.de

Wie kann ich die öffentliche IP mit python2.7 erhalten?

Wie kann ich die öffentliche IP mit python2.7 erhalten? Keine private IP.

43
Searene

Derzeit gibt es mehrere Möglichkeiten:

  • ip.42.pl
  • jsonip.com
  • httpbin.org
  • ipify.org

Im Folgenden finden Sie genaue Möglichkeiten, wie Sie die oben genannten Funktionen nutzen können.

ip.42.pl

from urllib2 import urlopen
my_ip = urlopen('http://ip.42.pl/raw').read()

Dies ist die erste Option, die ich gefunden habe. Es ist sehr praktisch für Skripte, Sie brauchen hier keine JSON-Analyse.

jsonip.com

from json import load
from urllib2 import urlopen

my_ip = load(urlopen('http://jsonip.com'))['ip']

Anscheinend besteht der einzige Zweck dieser Domäne darin, die IP-Adresse in JSON zurückzugeben.

httpbin.org

from json import load
from urllib2 import urlopen

my_ip = load(urlopen('http://httpbin.org/ip'))['Origin']

httpbin.org ist ein Service, den ich jungen Entwicklern häufig zum Testen ihrer Skripte/Anwendungen empfehle.

ipify.org

from json import load
from urllib2 import urlopen

my_ip = load(urlopen('https://api.ipify.org/?format=json'))['ip']

Die Leistungsfähigkeit dieses Dienstes ergibt sich aus fehlenden Limits (es gibt keine Ratenbegrenzung), Infrastruktur (bei Heroku unter Berücksichtigung hoher Verfügbarkeit) und Flexibilität (funktioniert sowohl für IPv4 als auch für IPv6).

EDIT: httpbin.org wurde der Liste der verfügbaren Optionen hinzugefügt.

EDIT: ipify.org dank der Anmerkung von kert hinzugefügt.

101
Tadeck

Das Anforderungspaket gefällt mir mit http://ip.42.pl/raw

import requests
requests.get('http://ip.42.pl/raw').text
11
HyperActive

Versuche dies:

import ipgetter
import requests

IP = ipgetter.myip()
url = 'http://freegeoip.net/json/'+IP
r = requests.get(url)
js = r.json()
print 'IP Adress: '         +   js['ip']
print 'Country Code: '      +   js['country_code']
print 'Country Name: '      +   js['country_name']
print 'Region Code: '       +   js['region_code']
print 'Region Name: '       +   js['region_name']
print 'City Name: '         +   js['city']
print 'Zip code: '          +   js['Zip_code']
print 'Time Zone: '         +   js['time_zone']
print 'Latitude: '          +   str(js['latitude'])
print 'Longitude: '         +   str(js['longitude'])
2
Xavi Martínez

Sie können dies einfach tun: 

import requests
print requests.get("http://ipecho.net/plain?").text

Produziert: 

XX.XX.XXX.XXX
1
Isaac Chabot

Mit Anfragen Modul

import requests

public_IP = requests.get("https://www.wikipedia.org").headers["X-Client-IP"]
print public_IP
0
J0KER11

Dies ist ein Weg, um nicht ins Internet zu telefonieren:

Bitte lassen Sie mich wissen, wenn dies nicht funktioniert. Dann kann ich die Antwort aktualisieren (funktioniert für ~ 10 Server von mir).

from subprocess import check_output
out = check_output("/sbin/ifconfig | awk '/inet / { print $2 }' | sed 's/addr://'", Shell=True)
[x for x in out.decode().split() if not x == "127.0.0.1" and 
                                    not (x.startswith("172") and x.endswith("0.1"))]
["x.x.x.x.x"]
0
PascalVKooten

Getip ist ein kleines Modul, das eine öffentliche IP-Adresse von einem zufälligen Server zurückgibt.

Installieren:

~ $ pip install getip2

Benutzen:

>> import getip
>> ip = getip.get()
>>
>> ip
'66.249.76.109'
0
NOP da CALL