python獲取linux和windows系統(tǒng)指定接口的IP地址的步驟及代碼
實(shí)驗(yàn)?zāi)康模?/h3>
用戶輸入網(wǎng)卡名稱,通過(guò)函數(shù)返回對(duì)應(yīng)的IPv4和IPv6地址。
實(shí)驗(yàn)代碼:
步驟一: 由于window系統(tǒng)下網(wǎng)卡名稱并不是真正的名字,而真正的ID在注冊(cè)表SYSTEM\CurrentControlSet\Control\Network{4d36e972-e325-11ce-bfc1-08002be10318}目錄下。所以需要通過(guò)如下代碼,返回接口名稱和唯一ID的對(duì)應(yīng)關(guān)系。
win_ifname.py:
import netifaces as ni # import winreg as wr # 將windows下的接口的名稱和唯一ID一一對(duì)應(yīng)存入字典并返回 def get_connection_name_from_guid(iface_guids): wr = __import__('winreg', globals(), locals(), ['wr']) iface_dict = {} reg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE) reg_key = wr.OpenKey(reg, r'SYSTEM\CurrentControlSet\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}') for i in iface_guids: try: reg_subkey = wr.OpenKey(reg_key, i + r'\Connection') iface_dict[wr.QueryValueEx(reg_subkey, 'Name')[0]] = i except FileNotFoundError: pass return iface_dict # 根據(jù)輸入的接口名稱,返回唯一ID def win_from_name_get_id(ifname): x = ni.interfaces() return get_connection_name_from_guid(x).get(ifname) if __name__ == '__main__': import platform if platform.system() == "Windows": print(win_from_name_get_id("WLAN"))
運(yùn)行結(jié)果:
可以看到獲取WLAN接口的ID和注冊(cè)表中查看的一致。
步驟二: 通過(guò)接口名稱(linux)或者接口ID(windows)找到IPv4和IPv6地址。
from netifaces import ifaddresses, AF_INET, AF_INET6 import platform # 獲取接口IPv4地址 def get_ip_address(ifname): if platform.system() == "Linux": try: # AF_INET表示的是IPv4地址(AF_LINK則表示的是MAC地址) return ifaddresses(ifname)[AF_INET][0]['addr'] except ValueError: return None elif platform.system() == "Windows": # 需要首先調(diào)用win_from_name_get_id函數(shù),獲取接口的ID from win_ifname import win_from_name_get_id if_id = win_from_name_get_id(ifname) if not if_id: return else: return ifaddresses(if_id)[AF_INET][0]['addr'] else: print('操作系統(tǒng)不支持,本腳本只能工作在Windows或者Linux環(huán)境!') # 獲取接口IPv6地址,和IPv4同理 def get_ipv6_address(ifname): if platform.system() == "Linux": try: return ifaddresses(ifname)[AF_INET6][0]['addr'] except ValueError: return None elif platform.system() == "Windows": from win_ifname import win_from_name_get_id if_id = win_from_name_get_id(ifname) if not if_id: return else: # 此處依然要提供WIN的網(wǎng)卡ID, 而不是名字 return ifaddresses(if_id)[AF_INET6][0]['addr'] else: print('操作系統(tǒng)不支持,本腳本只能工作在Windows或者Linux環(huán)境!') if __name__ == "__main__": if platform.system() == "Linux": print(get_ip_address('ens33')) print(get_ipv6_address('ens33')) elif platform.system() == "Windows": print(get_ip_address('WLAN')) print(get_ipv6_address('WLAN'))
測(cè)試結(jié)果:
windows平臺(tái)下:
Linux平臺(tái)下:
到此這篇關(guān)于python獲取linux和windows系統(tǒng)指定接口的IP地址的文章就介紹到這了,更多相關(guān)python獲取接口ip地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python列表list操作相關(guān)知識(shí)小結(jié)
今天,本喵帶大家仔細(xì)溫習(xí)一下Python的列表,溫故而知新,不亦說(shuō)乎,需要的朋友可以參考下2020-01-01python+opencv實(shí)現(xiàn)移動(dòng)偵測(cè)(幀差法)
這篇文章主要為大家詳細(xì)介紹了python+opencv實(shí)現(xiàn)移動(dòng)偵測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03python實(shí)現(xiàn)登錄與注冊(cè)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)登錄與注冊(cè)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11python Pandas中數(shù)據(jù)的合并與分組聚合
大家好,本篇文章主要講的是python Pandas中數(shù)據(jù)的合并與分組聚合,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01python實(shí)現(xiàn)自動(dòng)更換ip的方法
這篇文章主要介紹了python實(shí)現(xiàn)自動(dòng)更換ip的方法,涉及Python針對(duì)本機(jī)網(wǎng)絡(luò)配置的相關(guān)操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05基于Keras中Conv1D和Conv2D的區(qū)別說(shuō)明
這篇文章主要介紹了基于Keras中Conv1D和Conv2D的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06