簡體   English   中英

如何通過 Python 獲得“正確”的 IP 地址

[英]How can I get the 'correct' IP-Address via Python

對於一些玩弄的 TCP,我需要 2 個 IP 地址,公共地址和私有地址。 公開對外部服務的一些請求很容易,但如果我這樣做

socket.gethostbyname(socket.gethostname())

我得到 127.0.0.1/8,這是不正確的。 如果我輸入ip a我會得到 2 個數據塊,第一個是 127...,標記為 lo:<LOOPBACK,UP,LOWER_UP>,但我需要第二個,即 192.168...,即 ens3: <廣播,多播,UP,LOWER_UP>。

我不太了解網絡及其周圍的東西,所以如果有一個簡單明了的解決方案,我很抱歉,但是有沒有辦法讓我運行我的代碼的每台機器都能獲得我需要的 IP 地址要運行的代碼?

此外,我應該在主機的 s.bind() 中放入什么? 該程序在互聯網上運行,所以我應該把公共或私人 IP 地址放在那里嗎? 一些教程在那里放了一個空字符串,這讓我現在真的很困惑,而且大多數教程都使用本地網絡,所以我不知道通過互聯網進行操作時該怎么做。

您可以創建一個連接並獲取與活動連接關聯的地址。

import socket


def get_internal_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(('8.8.8.8', 80))
    ip = s.getsockname()[0]
    s.close()
    return ip


def get_external_ip():
    return socket.gethostbyname(socket.gethostname())


print('Internal:', get_internal_ip())
print('External:', get_external_ip())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM