python如何獲取本機正確的內網ip位址?

時間 2021-05-31 22:24:30

1樓:鐘翦

Python 優雅獲取本機 IP 方法

這篇博文裡面那個用UDP的方式不錯。我稍微改了下,是這樣:

import socket

_local_ip = None

def get_host_ip34;""

這個方法是目前見過最優雅獲取本機伺服器的IP方法了。沒有任何的依賴,也沒有去猜測機器上的網路裝置資訊。

而且是利用 UDP 協議來實現的,生成乙個UDP包,把自己的 IP 放如到 UDP 協議頭中,然後從UDP包中獲取本機的IP。

這個方法並不會真實的向外部發包,所以用抓包工具是看不到的。但是會申請乙個 UDP 的埠,所以如果經常呼叫也會比較耗時的,這裡如果需要可以將查詢到的IP給快取起來,效能可以獲得很大提公升。

:return:

"""global _local_ip

s = None

tryif not _local_ips = socket.socket(socket.AF_INET, socket.

SOCK_DGRAMs.connect(('8.8.

8.8', 80local_ip = s.getsockname()[0return _local_ip

finallyif ss.close()

2樓:

沒發現虛擬網絡卡是沒有預設閘道器的嗎?

Windows如下

import

osdef

get_local_ip

():result=

ipv4

=None

ipv6

=None

forx

inos

.popen

('ipconfig'

):result.(

x)forx

inrange

(len

(result

)):if

'IPv4'

inresult[x

]and

result[x

+2][-

2]!=' '

:ipv4

=result[x

][result[x

].find

(':')+

2:-1

]elif

'IPv6'

inresult[x

]and

result[x

+3][-

2]!=' '

:ipv6

=result[x

][result[x

].find

(':')+

2:-1

]return

ipv4

,ipv6

3樓:

事實上socket.gethostbyname()並不好用,所以import socket

def get_host_ip():

trys = socket.socket(socket.AF_INET, socket.

SOCK_DGRAMs.connect(('8.8.

8.8', 80ip = s.getsockname()[0]

finallys.close()

return ip

不知道對你適不適用

4樓:

如果想獲取正在上網所使用的本機IP,通過route命令可以得到:

Windows下用

[a for a in os.popen('route print').readlines() if ' 0.

0.0.0 ' in a][0].

split()[-2]

Linux下用

[a for a in os.popen('/sbin/route').readlines() if 'default' in a][0].split()[1]

Python如何獲取呼叫檔案的路徑?

彭雨嫣 a.py from com.company.testForInspect.c import just print if name main just print hey it s a b.py from com.company.testForInspect.c import just pri...

剛開始接觸Python,如何正確高效的開展Python學習?

zhaossbnu python安裝目錄下有乙個人doc資料夾,裡面又乙個chm檔案,你參考那個學習乙個 官方還有pdf版的Download Python 3.4.5 documentation 傅坦坦 看下基本語法,然後直接開始擼碼。比如前些天我要考學位英語,頻繁查網頁版的有道詞典,其實我的需求只...

Python如何呼叫另乙個py獲取函式名稱?

Python蕭邦 from HelloWorld import Hello h Hello h.hello Hello,world 輸出結果 HelloWorld.py檔案內容 class Hello object def hello self,name world print Hellp,s na...