[英]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.