Python獲取本機所有IP地址
眾所周知,Python標準庫socket中有可以獲取本機IPV4地址的方法,下面是網上非常常見的一種用法:
>>> import
socket
>>> hostname = socket.gethostname()
>>> hostname
'DESKTOP-I734J3O'
>>> socket.gethostbyname(hostname)
'192.168.0.103'
上面的程式碼在Windows下執行良好,但是無意中發現在Mac系統下執行不正常,返回的是本機迴環地址127.0.0.1,而不是真正的IP地址。經過查閱大量資料,終於發現socket模組中另一個函式的妙用,那就是getaddrinfo()函式,該函式用法為getaddrinfo(host, port, family=0, type=0, proto=0, flags=0),返回值是一個五元組的列表,該五元組形式為(family,
於是,繼續上面的程式碼:
>>> addrs = socket.getaddrinfo(hostname,None)
>>> for item
in addrs:
print(item)
(<AddressFamily.AF_INET6: 23>, 0, 0, '', ('fe80::b976:b065:27d:3747%10', 0, 0, 10))
(<AddressFamily.AF_INET6: 23>, 0, 0, '', ('fe80::1456:951:2418:27cf%7', 0, 0, 7))
(<AddressFamily.AF_INET: 2>, 0, 0, '', ('192.168.0.103', 0))
(<AddressFamily.AF_INET6: 23>, 0, 0, '', ('2001:0:9d38:6ab8:1456:951:2418:27cf', 0, 0, 0))
如此便可以獲取本機所有IPV4和IPV6地址,如果只想獲取IPV4地址,再繼續執行下面的程式碼:
>>> [item[4][0]
for item in addrs
if ':' not in item[4][0]][0]
'192.168.0.103'
有關文章閱讀:
--------------我是分割線-------------
“Python小屋”公眾號近期主要活動:
1、贈書活動:詳情請進入公眾號以後通過選單“最新資源”===>“歷史文章分類表”進行檢視
2、Python師資培訓班:8月6日-12日,濟南,面向全國高校老師和企業朋友,通知詳見關於舉辦2017年暑期全國高校教師
“Python程式設計及應用”培訓班通知