Merhaba arkadaşlar,
Kişiye öze seril no oluşturmaya çalışıyorum. Bunun için bilgisayara özel bir çeşit kimlik numarası edinmek istedim. MAC ID denilen bir numara varmış.
uuid kütüphanesinin uuid.getnode() metodundan faydalanarak elde ettiğim int() değerli numara tam istediğim işi gördü. Ancak bir süre sonra bilgisayarımın id si kendiliğinden değişerek benim serialimi geçersiz hale getirdi!! Problem getnode() metodunun netvörke birden fazla cihaz bağlıysa gerçek MacId yerine kendi bir sayı üretiyor olmasında.
Bu durumu nasıl aşabiliriz? bilgisayardan Mac Id almanın daha sağlıklı bir yolu varmı yada bunun gibi ama değişmeyecek bir veri alabilirmiyiz?
Bahsettiğiniz metod MAC adresini döndürüyormuş. Ancak MAC adresini alamazsa 48 bitlik bit sayı döndürüyormuş ve 8. bitini 1 yapıyormuş. Yani aldığınız sayının MAC mi değil mi olduğunu anlayabilmek için 8. bite bakmalısınız. Bu arada niye bir kullanıcı girişi yapmıyorsunuz?
verdiği sayısı hex(“123456789…”) metodu ile normal haline dönüştürüp gerçek MAC adresi ile kıyaslayabiliyorum.
Gerçek adresi cmd komut sisteminde ipconfig/all komutu ile gelen listeden “Ethernet Bağdaştırıcı…” başlığı altından görüyorum.
Normalde getnode() metodunun hex() karşılığı ile eşleşiyor. Bunu serial için kullanıyorum ama bazen değişip başka bir sayı değeri çıktığında serial’im geçersiz oluyor…
Bunu online değil PC üzerinde çalışacak exe formatında bir programın serial nosu olarak tasarlamıştım. MAC adresiyle üretilen serial no, sadece o bilgisayarda geçerli olabilmesi idi amaç. Ama MAC adresini sağlıklı alamadığımı fark edince hesap bozuldu
Açıkçası eğitimini aldığım bir konu değil ve tamamen kendi fikr yürütmemle icad ettiğim bir yöntemdi. Bunu düzeltmek mümkün olabilir mi yada farklı bir metod öneriniz olur mu?
Gerçek Mac Adresi, ipconfig/all : C8-9C-DC-13-00-C3 int(“C89CDC1300C3”, 16) --> 220576032686275 değerini veriyor
getnode() metodunu kullandığımda aldığım değer de buydu. Buna göre de tanımladığım serial no ile program aktif oluyordu.
Şuan ipconfig/all aynı sonucu vermesine rağmen getnode metodu; 189607935831867 sayı değerini veriyor. Bunun hex(220576032686275) karşılığı ise AC-72-89-A9-6F-3B. Bu durumda ilk verdiğim serial no ile eşleşmediğinden program çalışmıyor.
Durum değişken, birkaç gün sonra yine orjinal Mac no yu görüp devam edebiliyor ama güvensiz bir durum.
Bilgisayardan gelen Mac adresine göre serial no düzenleneceğinden, ikinci bir bilgisayar için yeniden lisanslanmalı. Amaç da zaten aynı serial no ile birden fazla bilgisayarda çalışmaması.
Şu gönderimde de açıklamaya çalıştığım gibi sanırım her durumda MAC adresini alamıyor. Yanlış olduğunu söylediğiniz sayının 8. biti 1. Siz de 8. biti 1 olmayan bir sayı bulana kadar MAC adresini bir döngü içinde almayı deneyebilirsiniz.
Python ie bilgisayardan Mac adresini çekmek için uuid kütüphanesinden (getnode() metoduyla) başka bir yol var mı önerebileceğiniz?
Bu metod ya cmd >> ipconfig/all’ ın verdiği değerin yanısını veriyor, ya da onun yerine ürettiği başka bir değer. (henüz 3. bir değere rastlamadım,)
Eğer komut satırı üzerinden doğru bir şekilde bu adresi alabildiğinizi düşünüyorsanız, os.system fonksiyonu ile bu komutu çalıştırıp sonucu almak sizin için en iyisi olabilir.
Aylardır peşinde olduğum konu, belki istifade edecek arkadaşlar olur. Şöyle bir derleme yaptım;
import os
cs = os.popen('wmic csproduct get UUID').read().split()
di = os.popen('wmic diskdrive get serialnumber').read().split()
bi = os.popen('wmic bios get serialnumber').read().split()
bina = os.popen('wmic bios get name').read().split()
ra = os.popen('wmic memorychip get serialnumber').read().split()
ba = os.popen('wmic baseboard get serialnumber').read().split() # anakart
ma = os.popen('wmic nic get macaddress').read().split()
vo = os.popen('wmic logicaldisk get volumename').read().split()
ca = os.popen('wmic logicaldisk get caption').read().split()
de = os.popen('wmic logicaldisk get description').read().split()
dr = os.popen('wmic logicaldisk get drivetype').read().split()
pr = os.popen('wmic logicaldisk get providname').read().split()
di1 = os.popen('wmic diskdrive list brief/format:list').read().split()
bi1 = os.popen('wmic bios list brief/format:list').read().split()
ra1 = os.popen('wmic memorychip list brief/format:list').read().split()
ba1 = os.popen('wmic baseboard list brief/format:list').read().split()
print("UUID\t :", cs)
print("Hard Disc:", di)
print("Bios\t :", bi)
print("Bios Name:", bina)
print("Ram\t :", ra)
print("Anakart :", ba)
print("Mac Add :", ma)
print("-------------------------------")
print(vo)
print(ca)
print(de)
print(dr)
print(pr)
print("-------------------------------")
print("Hard Disc:", di1)
print("Bios\t :", bi1)
print("Ram\t :", ra1)
print("Anakart :", ba1)
Asıl problemim uuid.getnode metodu ile herzaman doğru sonucu alamamamdı. Şuanda bu bilgisayarımda hala hatalı sonuç veriyor ancak ma = os.popen(‘wmic nic get macaddress’).read().split()[1] kodunun verdiği sonuç, cmd>>ipconfig/all ın verdiği sonuç ile aynı.
ÖNEMLİ NOT: Bu kodları kaydettiğiniz .py dosyasına sakın WMIC.py adını vermeyin! hiçbir sonuç vermediği gibi bu tırnak içindeki komutları doğrudan cmd içinden çalıştırmayı bile deneseniz hem hem o da sonuç vermiyor, hem de bir şekilde kendiliğinden PyCharm ı açıyor…!