最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python獲取本機(jī)所有網(wǎng)卡IP/MAC地址的三種方法

 更新時(shí)間:2026年04月22日 09:40:49   作者:曾阿倫  
本文詳細(xì)介紹了三種Python獲取網(wǎng)絡(luò)適配器信息的解決方案,,支持Windows、Linux和Mac系統(tǒng),每種方案都有其優(yōu)缺點(diǎn),推薦使用netifaces庫(kù),因其可以完美適配多網(wǎng)卡場(chǎng)景,需要的朋友可以參考下

本文詳解 3 種 Python 實(shí)現(xiàn)方案,支持

Windows/Linux/MacOS

跨平臺(tái),完美適配多網(wǎng)卡場(chǎng)景,可直接獲取所有網(wǎng)絡(luò)適配器的 IP 地址、MAC 地址、網(wǎng)卡名稱、子網(wǎng)掩碼等信息,代碼開(kāi)箱即用!

一、應(yīng)用場(chǎng)景

在網(wǎng)絡(luò)編程、運(yùn)維自動(dòng)化、設(shè)備授權(quán)等場(chǎng)景中,經(jīng)常需要獲取本機(jī)網(wǎng)卡信息,常見(jiàn)需求包括:

  • 多網(wǎng)卡服務(wù)器自動(dòng)識(shí)別可用 IP
  • 設(shè)備綁定(基于 MAC + IP 校驗(yàn)授權(quán))
  • 本地網(wǎng)絡(luò)調(diào)試、自動(dòng)化腳本開(kāi)發(fā)
  • 設(shè)備信息采集與上報(bào)系統(tǒng)

二、核心方案對(duì)比(先選對(duì)再用)

實(shí)現(xiàn)方案依賴庫(kù)多網(wǎng)卡支持信息完整性(IP+MAC + 網(wǎng)卡名)跨平臺(tái)推薦度
標(biāo)準(zhǔn)庫(kù)(socket+uuid)無(wú)(內(nèi)置)一般僅 IP + 默認(rèn) MAC,無(wú)網(wǎng)卡名???
netifaces 第三方庫(kù)需安裝完美完整(IP+MAC + 網(wǎng)卡名 + 子網(wǎng)掩碼)??????
系統(tǒng)命令調(diào)用(ipconfig/ifconfig)無(wú)較好IP+MAC,需解析輸出????

結(jié)論:優(yōu)先使用

netifaces

庫(kù),兼顧穩(wěn)定性、完整性和易用性;無(wú)第三方庫(kù)依賴場(chǎng)景用系統(tǒng)命令調(diào)用。

三、方案 1:標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)(無(wú)依賴,快速獲取)

無(wú)需安裝任何第三方包,基于 Python 內(nèi)置 socket(獲取 IP)和 uuid(獲取 MAC)實(shí)現(xiàn),適合簡(jiǎn)單場(chǎng)景。

完整代碼

import socket

import uuid

def get_default_host_ip():

   """獲取本機(jī)默認(rèn)上網(wǎng) IP(優(yōu)先返回外網(wǎng)可達(dá) IP)"""

   try:

       # 連接公共 DNS(8.8.8.8 為 Google DNS),無(wú)需實(shí)際通信,僅用于獲取本地網(wǎng)卡 IP

       s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

       s.connect(("8.8.8.8", 80))

       ip = s.getsockname()[0]  # 獲取連接對(duì)應(yīng)的本地 IP

   except Exception as e:

       ip = "127.0.0.1"  # 異常時(shí)返回本地回環(huán)地址

   finally:

       s.close()

   return ip

def get_default_mac_address():

   """獲取本機(jī)默認(rèn)網(wǎng)卡 MAC 地址"""

   # uuid.getnode() 返回 48 位整數(shù)形式的 MAC 地址

   mac_int = uuid.getnode()

   mac_hex = hex(mac_int)[2:]  # 轉(zhuǎn)換為十六進(jìn)制(去掉 0x 前綴)

   # 格式化為 xx:xx:xx:xx:xx:xx

   return ":".join([mac_hex[i:i+2] for i in range(0, 12, 2)])

def get_all_ipv4_addresses():

   """獲取所有網(wǎng)卡的 IPv4 地址(過(guò)濾回環(huán)地址)"""

   hostname = socket.gethostname()

   # gethostbyname_ex 返回 (主機(jī)名, 別名列表, IP 列表)

   ip_list = socket.gethostbyname_ex(hostname)[2]

   # 過(guò)濾 127.0.0.1 等回環(huán)地址

   return [ip for ip in ip_list if not ip.startswith("127.")]

if __name__ == '__main__':

   print("=== 本機(jī)網(wǎng)絡(luò)信息(標(biāo)準(zhǔn)庫(kù)方案)===")

   print(f"默認(rèn)上網(wǎng) IP:{get_default_host_ip()}")

   print(f"默認(rèn) MAC 地址:{get_default_mac_address()}")

   print(f"所有網(wǎng)卡 IPv4:{get_all_ipv4_addresses()}")

運(yùn)行效果

=== 本機(jī)網(wǎng)絡(luò)信息(標(biāo)準(zhǔn)庫(kù)方案)===

默認(rèn)上網(wǎng) IP:192.168.1.105

默認(rèn) MAC 地址:a1:b2:c3:d4:e5:f6

所有網(wǎng)卡 IPv4:['192.168.1.105', '192.168.3.26']

優(yōu)缺點(diǎn)

  • ? 優(yōu)點(diǎn):零依賴、代碼簡(jiǎn)潔、快速上手
  • ? 缺點(diǎn):無(wú)法對(duì)應(yīng) “網(wǎng)卡名 - IP-MAC” 三者關(guān)系,多網(wǎng)卡場(chǎng)景信息不完整

四、方案 2:netifaces 庫(kù)(推薦,多網(wǎng)卡完美支持)

netifaces 是專門用于獲取網(wǎng)絡(luò)接口信息的第三方庫(kù),跨平臺(tái)兼容,能精準(zhǔn)獲取每個(gè)網(wǎng)卡的完整信息,是多網(wǎng)卡場(chǎng)景的最優(yōu)選擇。

1. 安裝依賴

# PyPI 安裝(推薦)
pip install netifaces
# 若 Windows 安裝失敗,可使用 conda 安裝
# conda install -c conda-forge netifaces

2. 完整代碼(獲取所有網(wǎng)卡詳細(xì)信息)

import netifaces

def get_all_network_adapters():

   """

   獲取本機(jī)所有網(wǎng)卡的完整信息(IP+MAC+網(wǎng)卡名+子網(wǎng)掩碼)

   返回格式:list[dict],每個(gè)字典對(duì)應(yīng)一個(gè)有效網(wǎng)卡

   """

   network_adapters = []

   # 獲取所有網(wǎng)卡接口名稱(如 eth0、WLAN、以太網(wǎng)等)

   all_interfaces = netifaces.interfaces()

   for interface in all_interfaces:

       adapter_info = {

           "網(wǎng)卡名稱": interface,

           "IPv4 地址": None,

           "子網(wǎng)掩碼": None,

           "MAC 地址": None

       }

       # 1. 獲取 MAC 地址(AF_LINK 對(duì)應(yīng)鏈路層,即 MAC 地址)

       try:

           link_info = netifaces.ifaddresses(interface)[netifaces.AF_LINK][0]

           adapter_info["MAC 地址"] = link_info["addr"]

       except (KeyError, IndexError):

           # 部分虛擬網(wǎng)卡可能無(wú) MAC 地址,忽略異常

           adapter_info["MAC 地址"] = "無(wú)"

       # 2. 獲取 IPv4 地址和子網(wǎng)掩碼(AF_INET 對(duì)應(yīng) IPv4 協(xié)議)

       try:

           inet_info = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]

           adapter_info["IPv4 地址"] = inet_info["addr"]

           adapter_info["子網(wǎng)掩碼"] = inet_info["netmask"]

       except (KeyError, IndexError):

           # 無(wú) IPv4 地址的網(wǎng)卡(如虛擬網(wǎng)卡、未連接的網(wǎng)卡),忽略

           adapter_info["IPv4 地址"] = "無(wú)"

           adapter_info["子網(wǎng)掩碼"] = "無(wú)"

       # 過(guò)濾無(wú)效網(wǎng)卡(無(wú) IPv4 且無(wú) MAC 的虛擬接口)

       if adapter_info["IPv4 地址"] != "無(wú)" or adapter_info["MAC 地址"] != "無(wú)":

           network_adapters.append(adapter_info)

   return network_adapters

def print_network_info(adapters):

   """格式化輸出網(wǎng)卡信息"""

   print("=== 本機(jī)所有網(wǎng)卡詳細(xì)信息(netifaces 方案)===\n")

   for idx, adapter in enumerate(adapters, 1):

       print(f"【網(wǎng)卡 {idx}】")

       for key, value in adapter.items():

           print(f"  {key}:{value}")

       print("-" * 50)

if __name__ == "__main__":

   adapters = get_all_network_adapters()

   print_network_info(adapters)

運(yùn)行效果

=== 本機(jī)所有網(wǎng)卡詳細(xì)信息(netifaces 方案)===

【網(wǎng)卡 1】

 網(wǎng)卡名稱:以太網(wǎng)

 IPv4 地址:192.168.1.105

 子網(wǎng)掩碼:255.255.255.0

 MAC 地址:a1:b2:c3:d4:e5:f6

--------------------------------------------------

【網(wǎng)卡 2】

 網(wǎng)卡名稱:WLAN

 IPv4 地址:192.168.3.26

 子網(wǎng)掩碼:255.255.255.0

 MAC 地址:b2:c3:d4:e5:f6:a7

--------------------------------------------------

【網(wǎng)卡 3】

 網(wǎng)卡名稱:虛擬機(jī)網(wǎng)卡

 IPv4 地址:192.168.100.5

 子網(wǎng)掩碼:255.255.255.0

 MAC 地址:c3:d4:e5:f6:a7:b8

--------------------------------------------------

核心 API 說(shuō)明

  • netifaces.interfaces():返回所有網(wǎng)卡接口名稱列表
  • netifaces.ifaddresses(interface):返回指定網(wǎng)卡的所有地址信息(字典格式)
    • netifaces.AF_LINK:鏈路層地址(MAC 地址)
    • netifaces.AF_INET:IPv4 地址信息
    • netifaces.AF_INET6:IPv6 地址信息(如需支持,可參考 IPv4 邏輯擴(kuò)展)

優(yōu)缺點(diǎn)

  • ? 優(yōu)點(diǎn):信息完整、多網(wǎng)卡精準(zhǔn)匹配、跨平臺(tái)穩(wěn)定、易用性強(qiáng)
  • ? 缺點(diǎn):需要額外安裝第三方庫(kù)(僅需一行命令)

五、方案 3:系統(tǒng)命令調(diào)用(無(wú)依賴,兼容所有環(huán)境)

通過(guò)調(diào)用系統(tǒng)原生命令(Windows ipconfig /all、Linux/Mac ifconfig -a),解析輸出結(jié)果獲取 IP 和 MAC,適合無(wú)法安裝第三方庫(kù)的場(chǎng)景。

完整代碼

import subprocess

import re

import sys

def get_ip_mac_by_system_cmd():

   """

   調(diào)用系統(tǒng)命令獲取 IP 和 MAC 地址(跨平臺(tái)兼容)

   返回格式:list[dict]

   """

   ip_mac_list = []

   try:

       if sys.platform == "win32":

           # Windows 系統(tǒng):執(zhí)行 ipconfig /all,編碼用 gbk(避免中文亂碼)

           result = subprocess.check_output(

               "ipconfig /all",

               shell=True,

               encoding="gbk",

               stderr=subprocess.STDOUT

           )

           # 正則匹配:網(wǎng)卡名稱、IPv4、MAC(物理地址)

           adapter_pattern = r"(Ethernet adapter|Wireless LAN adapter).*?:(.*?)(?=\n\n|\Z)"

           adapters = re.findall(adapter_pattern, result, re.DOTALL)

          

           for adapter_type, adapter_content in adapters:

               # 提取網(wǎng)卡名稱(如 "以太網(wǎng)"、"WLAN")

               name_match = re.search(r"([^:]+)", adapter_content.strip())

               name = name_match.group(1) if name_match else adapter_type

              

               # 提取 IPv4 地址

               ip_match = re.search(r"IPv4 地址.*?: ([\d.]+)", adapter_content)

               ip = ip_match.group(1) if ip_match else "無(wú)"

              

               # 提取 MAC 地址(物理地址)

               mac_match = re.search(r"物理地址.*?: ([0-9A-Fa-f-]+)", adapter_content)

               mac = mac_match.group(1).replace("-", ":") if mac_match else "無(wú)"

              

               if ip != "無(wú)" and not ip.startswith("127."):

                   ip_mac_list.append({

                       "網(wǎng)卡名稱": name,

                       "IPv4 地址": ip,

                       "MAC 地址": mac

                   })

      

       else:

           # Linux/Mac 系統(tǒng):執(zhí)行 ifconfig -a,編碼用 utf-8

           result = subprocess.check_output(

               "ifconfig -a",

               shell=True,

               encoding="utf-8",

               stderr=subprocess.STDOUT

           )

           # 正則匹配:網(wǎng)卡名、MAC(ether)、IPv4(inet)

           interface_pattern = r"(\w+):.*?ether ([0-9a-f:]+).*?inet ([\d.]+)", re.DOTALL

           matches = re.findall(interface_pattern, result)

          

           for name, mac, ip in matches:

               if not ip.startswith("127."):

                   ip_mac_list.append({

                       "網(wǎng)卡名稱": name,

                       "IPv4 地址": ip,

                       "MAC 地址": mac

                   })

  

   except Exception as e:

       print(f"獲取失?。簕str(e)}")

  

   return ip_mac_list

if __name__ == '__main__':

   print("=== 本機(jī)網(wǎng)絡(luò)信息(系統(tǒng)命令方案)===\n")

   network_info = get_ip_mac_by_system_cmd()

   for idx, info in enumerate(network_info, 1):

       print(f"【網(wǎng)卡 {idx}】")

       for key, value in info.items():

           print(f"  {key}:{value}")

       print("-" * 50)

運(yùn)行效果(Windows 示例)

=== 本機(jī)網(wǎng)絡(luò)信息(系統(tǒng)命令方案)===

【網(wǎng)卡 1】

 網(wǎng)卡名稱:以太網(wǎng)

 IPv4 地址:192.168.1.105

 MAC 地址:a1:b2:c3:d4:e5:f6

--------------------------------------------------

【網(wǎng)卡 2】

 網(wǎng)卡名稱:WLAN

 IPv4 地址:192.168.3.26

 MAC 地址:b2:c3:d4:e5:f6:a7

--------------------------------------------------

優(yōu)缺點(diǎn)

  • ? 優(yōu)點(diǎn):零依賴、兼容所有系統(tǒng)、無(wú)需額外安裝
  • ? 缺點(diǎn):需要解析命令輸出(正則易受系統(tǒng)語(yǔ)言影響)、信息不如 netifaces 完整

六、關(guān)鍵注意事項(xiàng)

  1. 權(quán)限問(wèn)題
  • Linux/Mac 系統(tǒng)中,部分網(wǎng)卡信息可能需要 sudo 權(quán)限(如 ifconfig -a),建議運(yùn)行時(shí)添加 sudo
  • Windows 系統(tǒng)無(wú)需管理員權(quán)限,直接運(yùn)行即可。
  1. 虛擬網(wǎng)卡過(guò)濾
  • 虛擬機(jī)(VMware、VirtualBox)、Docker 等會(huì)創(chuàng)建虛擬網(wǎng)卡,代碼中已過(guò)濾無(wú) IP 的無(wú)效網(wǎng)卡,可根據(jù)需求調(diào)整過(guò)濾邏輯。
  1. 編碼問(wèn)題
  • Windows 的 ipconfig /all 輸出為 GBK 編碼,需指定 encoding="gbk" 避免中文亂碼。
  • Linux/Mac 的 ifconfig 輸出為 UTF-8 編碼,指定 encoding="utf-8" 即可。
  1. IPv6 支持
  • 若需獲取 IPv6 地址,可擴(kuò)展 netifaces.AF_INET6(方案 2)或調(diào)整正則表達(dá)式(方案 3),邏輯與 IPv4 類似。

以上就是Python獲取本機(jī)所有網(wǎng)卡IP/MAC地址的三種方法的詳細(xì)內(nèi)容,更多關(guān)于Python獲取本機(jī)網(wǎng)卡IP/MAC地址的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • numpy中矩陣合并的實(shí)例

    numpy中矩陣合并的實(shí)例

    今天小編就為大家分享一篇numpy中矩陣合并的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)

    python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用Python搭建虛擬環(huán)境的配置方法

    使用Python搭建虛擬環(huán)境的配置方法

    python 的虛擬環(huán)境可以為一個(gè) python 項(xiàng)目提供獨(dú)立的解釋環(huán)境、依賴包等資源,既能夠很好的隔離不同項(xiàng)目使用不同 python 版本帶來(lái)的沖突,而且還能方便項(xiàng)目的發(fā)布。這篇文章主要介紹了使用Python虛擬環(huán)境,需要的朋友可以參考下
    2018-02-02
  • python元組拆包實(shí)現(xiàn)方法

    python元組拆包實(shí)現(xiàn)方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python元組拆包實(shí)現(xiàn)方法及相關(guān)實(shí)例,有興趣的朋友們可以學(xué)習(xí)下。
    2021-02-02
  • python給list排序的簡(jiǎn)單方法

    python給list排序的簡(jiǎn)單方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python給list排序的簡(jiǎn)單方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • 如何優(yōu)雅地處理Django中的favicon.ico圖標(biāo)詳解

    如何優(yōu)雅地處理Django中的favicon.ico圖標(biāo)詳解

    默認(rèn)情況下,瀏覽器訪問(wèn)一個(gè)網(wǎng)站的時(shí)候,同時(shí)還會(huì)向服務(wù)器請(qǐng)求"/favicon.ico"這個(gè)URL,目的是獲取網(wǎng)站的圖標(biāo),下面這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅地處理Django中favicon.ico圖標(biāo)的相關(guān)資料,需要的朋友可以參考下
    2018-07-07
  • Python traceback模塊獲取異常信息的使用

    Python traceback模塊獲取異常信息的使用

    Python的traceback模塊提供了多種方法來(lái)獲取和展示異常的堆棧信息,本文主要介紹了Python traceback模塊獲取異常信息的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 用Python實(shí)現(xiàn)批量生成法務(wù)函代碼

    用Python實(shí)現(xiàn)批量生成法務(wù)函代碼

    大家好,本篇文章主要講的是用Python實(shí)現(xiàn)批量生成法務(wù)函代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Python學(xué)習(xí)之異常處理的避坑指南

    Python學(xué)習(xí)之異常處理的避坑指南

    這篇文章主要介紹了Python中異常處理的一些避坑指南,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-03-03
  • python爬取微信公眾號(hào)文章圖片并轉(zhuǎn)為PDF

    python爬取微信公眾號(hào)文章圖片并轉(zhuǎn)為PDF

    大家好,本篇文章主要講的是python爬取微信公眾號(hào)文章圖片并轉(zhuǎn)為PDF,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02

最新評(píng)論

延庆县| 安庆市| 定西市| 黄平县| 咸丰县| 诸城市| 松滋市| 成武县| 十堰市| 武乡县| 通化县| 电白县| 道孚县| 天等县| 宁城县| 葵青区| 岳西县| 昭平县| 布尔津县| 日土县| 阿巴嘎旗| 清新县| 宁蒗| 漾濞| 都安| 阿克苏市| 夏邑县| 湖南省| 封丘县| 固始县| 桦川县| 池州市| 中山市| 平南县| 新乡县| 晋江市| 万安县| 塘沽区| 平和县| 鲜城| 卢龙县|