كيف يمكنني الحصول على عنوان IP الخارجي للمقبس في بايثون؟

StackOverflow https://stackoverflow.com/questions/58294

  •  09-06-2019
  •  | 
  •  

سؤال

عندما أتصل socket.getsockname() على كائن مأخذ توصيل، يقوم بإرجاع مجموعة من عنوان IP الداخلي لجهازي والمنفذ.ومع ذلك، أود استرداد IP الخارجي الخاص بي.ما هي الطريقة الأرخص والأكثر فعالية للقيام بذلك؟

هل كانت مفيدة؟

المحلول

وهذا غير ممكن بدون التعاون من خادم خارجي، لأنه من الممكن أن يكون هناك أي عدد من NATs بينك وبين الكمبيوتر الآخر.إذا كان بروتوكولًا مخصصًا، فيمكنك أن تطلب من النظام الآخر الإبلاغ عن العنوان المتصل به.

نصائح أخرى

الطريقة الوحيدة التي يمكنني التفكير في ضمان إعطائها لك هي النقر على خدمة مثل http://whatismyip.com/ للحصول عليه.

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

مقبس الاستيراد

الصورة = المقبس.socket(socket.AF_INET، المقبس.SOCK_STREAM)

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

s.getsockname()

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

ستحتاج إلى استخدام نظام خارجي للقيام بذلك.

ستمنحك إجابة DuckDuckGo IP ما تريده بالضبط، وبصيغة 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)

باستخدام العنوان المقترح في مصدر http://whatismyip.com

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

تحتاج إلى الاتصال بخادم خارجي والحصول على عنوان IP العام الخاص بك من الرد


مثله:

   import requests

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

   print("\n[+] My Public IP: "+ myPublic_IP+"\n")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top