簡體   English   中英

MAC,使用python的以太網ID

[英]MAC, ethernet id using python

如何使用python獲取正確的本地網卡的MAC /以太網ID? Google / stackoverflow上的大多數文章都建議解析ipconfig / all(windows)和ifconfig(Linux)的結果。 在Windows(2x / xp / 7)上,“ ipconfig / all”工作正常,但這是一種故障安全方法嗎? 我是Linux新手,不知道'ifconfig'是否是獲取MAC /以太網ID的標准方法。

我必須在基於本地MAC /以太網ID的python應用程序中實現許可證檢查方法。

當您安裝了VPN或虛擬化應用程序(例如VirtualBox)時,是一種特殊情況。 在這種情況下,您將獲得不止一個MAC /以太網ID。 如果我必須使用解析方法,但這不是問題,但我不確定。

干杯

普拉尚

import sys
import os

def getMacAddress(): 
    if sys.platform == 'win32': 
        for line in os.popen("ipconfig /all"): 
            if line.lstrip().startswith('Physical Address'): 
                mac = line.split(':')[1].strip().replace('-',':') 
                break 
    else: 
        for line in os.popen("/sbin/ifconfig"): 
            if line.find('Ether') > -1: 
                mac = line.split()[4] 
                break 
    return mac      

是一個跨平台功能,它將為您返回答案。

在Linux上,您可以通過sysfs訪問硬件信息。

>>> ifname = 'eth0'
>>> print open('/sys/class/net/%s/address' % ifname).read()
78:e7:g1:84:b5:ed

這樣,您就避免了炮轟ifconfig和解析輸出的復雜性。

我使用了基於套接字的解決方案,在Linux上運行良好,並且我相信Windows也可以

def getHwAddr(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', ifname[:15]))
    return ''.join(['%02x:' % ord(char) for char in info[18:24]])[:-1]

getHwAddr("eth0")

原始資料

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM