Wie erhalte ich die externe IP des Steckers in Python?
Frage
Wenn ich socket.getsockname()
auf einem Socket-Objekt aufrufen, gibt es ein Tupel von meiner Maschine internen IP und den Hafen. Ich möchte aber meine externe IP erhalten. Was ist die billigste und effizienteste Art und Weise, dies zu tun?
Lösung
Dies ist nicht möglich, ohne die Zusammenarbeit von einem externen Server, denn es gibt eine beliebige Anzahl von NATs zwischen Ihnen sein könnte und den anderen Computer. Wenn es ein eigenes Protokoll ist, können Sie das andere System fragen zu berichten, welche Adresse es verbunden ist.
Andere Tipps
Der einzige Weg, ich daran denken kann, ist garantiert, es geben Sie einen Service wie http://whatismyip.com zu schlagen sind / es zu erhalten.
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()
Import-Buchse
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())
Sie müssen ein externes System verwenden, um dies zu tun.
DuckDuckGo IP Antwort gibt Ihnen genau das, was Sie wollen, und in 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)
, um die in der Quelle vorgeschlagene Adresse Verwendung von http://whatismyip.com
import urllib
def get_my_ip_address():
whatismyip = 'http://www.whatismyip.com/automation/n09230945.asp'
return urllib.urlopen(whatismyip).readlines()[0]
Sie müssen den Anschluss an einen externen Server machen und Ihre öffentliche IP aus der Antwort Get
wie folgt: :
import requests
myPublic_IP = requests.get("http://wtfismyip.com/text").text.strip()
print("\n[+] My Public IP: "+ myPublic_IP+"\n")