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?

War es hilfreich?

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")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top