1

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を取得します。解析方法を使用する必要がある場合、これは問題にはなりませんが、よくわかりません。

乾杯

プラシャント

4

3 に答える 3

6
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      

答えを返すクロスプラットフォーム機能です。

于 2010-11-23T17:20:11.420 に答える
4

Linux では、sysfs を介してハードウェア情報にアクセスできます。

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

このようにして、ifconfig へのシェルアウトと出力の解析の複雑さを回避できます。

于 2010-11-23T20:03:33.520 に答える
2

私はソケットベースのソリューションを使用しました.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")

元のソース

于 2010-11-23T18:12:31.043 に答える