Soru Windows ve Linux'ta Python'da benzersiz bir bilgisayar kimliği edinin


Windows ve Linux'ta Python ile bir bilgisayara özgü bir kimlik almak istiyorum. CPU kimliği, anakart seri, ... ya da başka bir şey olabilir.

Şanssız birkaç modüle (pycpuid, psi, ...) baktım.

Bunu nasıl yapacağın hakkında bir fikrin var mı?


22
2018-03-17 09:41


Menşei


Buna ne ihtiyacın var? için? - Kimvais
Yazılımım için bilgisayar başına bir lisans sistemi yapmak için buna ihtiyacım var. Lisansın her bilgisayar için benzersiz olmasını istiyorum. Kullanıcı yazılımı başka bir bilgisayara yüklerse ve unlocker Bu bilgisayarda da yazılımı başlatamamalıydı. - darkpotpot
ilgili stackoverflow.com/questions/4193514/... ve stackoverflow.com/questions/227222/... - pmav99


Cevaplar:


MAC adresini benzersiz bir kimlik olarak kullanmaya ne dersiniz?

Burada tartışma Python kullanan Aygıtlardan MAC Adresi Alın MAC adresini nasıl elde edeceğinizi gösterir


0
2018-03-17 09:47



İlk başta yapmak istediğim buydu, ancak birkaç bilgisayarda birkaç test yaptıktan sonra, bazen tek bir bilgisayarda birkaç mac adresi bulunduğunu keşfettim. Örneğin, benim Ölçek Bilgisayarda bir VPN sunucusu ve bir ağ kartı vardı. Ve ağ kartı MAC adresini kullandığınızdan emin olmak istiyorum, VPN'yi (veya başka bir şeyi) değil. - darkpotpot
Sadece bilgisayar için benzersiz bir kimlik almak istediğinden beri. Bilgisayarın donanım / yazılım yapılandırmasının sık sık değişmediğini varsayalım. Bu şekilde TÜM ağ bağdaştırıcıları için MAC adresini alabilir ve bir kimlik oluşturmak için bunları bir araya getirebilirsiniz. Bu ihtiyaçlarınız için kullanılabilir mi? - Jay Zhu
Evet, işe yaramalı. Sanırım daha iyi bir yol bulana kadar yapacağım. - darkpotpot
-1 MAC adresleri kolayca değiştirilebilir ve benzersiz bir tanımlayıcı olarak hiçbir şekilde güvenilir değildir. Adil olmak gerekirse, sadece bunu yapan birçok ticari yazılım ürünü var. ;) - Ryan P
Mac Adresi, bilgisayar başına benzersiz - ama değil - benzersiz. Mac adresi kolayca değiştirilebilir ve / veya taklit edilebilir. Bir makineyi parmak izini daha çok veya daha az güvenilir kılmak için daha çok yönün bir kombinasyonunu istersiniz. Lisans için kullanmak isterseniz, genel / özel anahtarlar ve imzalama hakkında daha fazla bilgi edinmek isteyebilirsiniz - bu benim kullandığım şeydir. Daha kullanıcı dostu olmasının yanı sıra: Özellikle ağır kullanılan ekipmanlarda bazen bileşenler ölüyor ve değiştirilmesi gerekiyor: Ne, eğer ağ adaptörü ise? - Axel Napolitano


Bunu yapmak için doğrudan "python" yolu yok gibi görünüyor. Modern PC donanımında, genellikle BIOS'ta saklanan bir UUID vardır - Linux'ta bir komut satırı yardımcı programı vardır dmidecode bunu okuyabilir; masaüstümden örnek:

System Information
        Manufacturer: Dell Inc.
        Product Name: OptiPlex 755                 
        Version: Not Specified
        Serial Number: 5Y8YF3J
        UUID: 44454C4C-5900-1038-8059-B5C04F46334A
        Wake-up Type: Power Switch
        SKU Number: Not Specified
        Family: Not Specified

MAC adresleriyle ilgili problem, genellikle kolayca bunları programlı olarak değiştirin (en azından işletim sistemini bir VM'de çalıştırırsanız)

Windows'da bunu kullanabilirsiniz C API'sı


13
2018-03-17 14:23



Linux'ta DMI verilerini okumak için root ayrıcalıklarına ihtiyacınız olduğunu unutmayın. Ayrıca, aynı sayı / sys / class / dmi / id / product_uuid dizininde bulunabilir. - Juliano
Sorun benim uygulamamdaki (ve kullanmak istemediğim) root ayrıcalıklarına sahip olmamam. - darkpotpot
UUID'yi okumak için kök olmanız gerekiyor, ancak geri kalanını root olmadan okuyabilirsiniz. Ayrıcalıklı olmayan her şeyin geri kalanı / sys / class / dmi / id / modalias ile birleştirildi. Buna dayanabilirsin. Mac'lerin bir karması ve cpuid komutunun çıktısı ile birleştirin ve oldukça iyi bir sistem parmak izine sahip olursunuz. - Rafael Baptista
Burada soru: Bu BIOS uuid'i değiştirebilen herhangi bir araç var mı? Örneğin, kullanıcının BIOS yazılımı Güncelleme gerçekleştirdiğini varsayalım. Bunu istedim çünkü bazı yazılımları lisanslarken bu özelliği kullanmak istiyorum. - SaidbakR


ihtiyacınız olan Windows için Windows için DmiDecode (bağlantı):

subprocess.Popen('dmidecode.exe -s system-uuid'.split())

Linux için (kök olmayan):

subprocess.Popen('hal-get-property --udi /org/freedesktop/Hal/devices/computer --key system.hardware.uuid'.split())

10
2018-06-30 19:13





Veya alt işlem kullanmak istemiyorsanız, (Bu yavaş) ctipleri kullanın. Bu Linux kökü değil.

import ctypes
from ctypes.util import find_library
from ctypes import Structure

class DBusError(Structure):
    _fields_ = [("name", ctypes.c_char_p),
                ("message", ctypes.c_char_p),
                ("dummy1", ctypes.c_int),
                ("dummy2", ctypes.c_int),
                ("dummy3", ctypes.c_int),
                ("dummy4", ctypes.c_int),
                ("dummy5", ctypes.c_int),
                ("padding1", ctypes.c_void_p),]


class HardwareUuid(object):

    def __init__(self, dbus_error=DBusError):
        self._hal = ctypes.cdll.LoadLibrary(find_library('hal'))
        self._ctx = self._hal.libhal_ctx_new()
        self._dbus_error = dbus_error()
        self._hal.dbus_error_init(ctypes.byref(self._dbus_error))
        self._conn = self._hal.dbus_bus_get(ctypes.c_int(1),
                                            ctypes.byref(self._dbus_error))
        self._hal.libhal_ctx_set_dbus_connection(self._ctx, self._conn)
        self._uuid_ = None

    def __call__(self):
        return self._uuid

    @property
    def _uuid(self):
        if not self._uuid_:
            udi = ctypes.c_char_p("/org/freedesktop/Hal/devices/computer")
            key = ctypes.c_char_p("system.hardware.uuid")
            self._hal.libhal_device_get_property_string.restype = \
                                                            ctypes.c_char_p
            self._uuid_ = self._hal.libhal_device_get_property_string(
                                self._ctx, udi, key, self._dbus_error)
        return self._uuid_

Bunu aşağıdaki gibi kullanabilirsiniz:

get_uuid = HardwareUuid()
print get_uuid()

7
2017-10-06 23:03



Hata alıyorum: AttributeError: function 'libhal_ctx_new' not found yardım et! - Beginner


OS X> = 10.5 çalıştıran Apple makinelerinin donanım seri numarasını almak için bunlardan birini kabukta veya Python'daki bir borudan çağırın:

/usr/sbin/system_profiler SPHardwareDataType | fgrep 'Serial' | awk '{print $NF}'

veya

ioreg -l | awk '/IOPlatformSerialNumber/ { print $4 }' | sed s/\"//g

BTW: MAC adresleri iyi bir fikir değildir: bir makinede> 1 ağ kartı olabilir ve MAC adresleri olabilir sahte.


5
2018-05-12 09:08





Bunu yapmanın güvenilir bir çapraz platform olduğunu düşünmüyorum. MAC adresini bir donanım hatası bildirme biçimi olarak değiştiren bir ağ aygıtını biliyorum ve bunun başarısız olabileceği başka milyonlarca yol var.

Tek güvenilir çözüm, uygulamanızın her bir makineye benzersiz bir anahtar atamasıdır. Evet, sahte olabilir, ancak bunun tamamen kırılması konusunda endişelenmenize gerek yok. Kimlik sahtekarlığı konusunda endişeleriniz varsa, anahtarın taşınıp taşınmadığını belirlemek için bir tür sezgisel (mac adresinde bir değişiklik gibi) başvurabilirsiniz.

GÜNCELLEŞTİRME: Kullanabilirsiniz bakteriyel parmak izi.


4
2018-03-17 13:35



Bu bakteriyel parmak izi referansı, soruna faydalı bir cevap değildir ve bunun da komik bir şaka olduğunu düşünmüyorum. - steveha
Mantıklı bir kıkırdama sahibim. - Will Bradley


UUID - Evrensel Olarak Benzersiz Tanımlayıcı

Python uuid modülü

[RFC 4122] Evrensel Benzersiz Bir Tanımlayıcı (UUID) URN Ad Alanı


2
2018-03-17 09:46



Bu modül GUID'ler gibi alan ve zaman boyunca benzersizlik sağlar. Bence istediği bu değil. Bir bilgisayarı benzersiz bir şekilde tanımlamak için bir yol istiyor (örneğin, lisanslama amacıyla) ancak zaman içinde tutarlı ... - David
Bu tam olarak istediği şeydir, ancak python modülü istediğini yapmaz - UUID'yi BIOS'tan, linux'dan okumalı dmidecode|grep UUID hile yapabilir - Kimvais
Uuid modülü, bir MAC adresi almanın kolay bir yolunu sunar. uuid.getnode (). Dokümanlar, "Birden fazla ağ arabirimi varsa bunların herhangi biri iade edilebilir" diyor. Kendi kısa testimde, birden fazla olduğunda, en azından aynı olanı sürekli olarak iade ediyor gibi görünmektedir. - foz


Kullandığım başka bir şey buldum. Linux için Mac adresi, Windows için MachineGuid ve mac için de bir şey var.

Daha fazla detay burada: http://www.serialsense.com/blog/2011/02/generating-unique-machine-ids/


1
2017-10-20 11:08