Adres fizyczny komputera

0

Potrzebuję informacji w jaki sposób najlepiej pobrać jakiś fizyczny adres komputera. Chciałbym zrobić zabezpieczenie na mój program, aby jedna licencja była przypisana fizycznie do jednego komputera. Taki adres komputera chciałbym w bazie danych online przetrzymywać.

1

Masz na myśli adres fizyczny którejś z kart sieciowych?

0

Jeżeli w praktyce wykorzystuje się akurat adres tego podzespołu to tak, chodzi o ten adres :).

2

W praktyce przechodzi się na model SaaS, bo nie istnieje sensowny i sprawiedliwy sposób licencjonowania w oparciu o identyfikację hardware ^1 ;-)

Tym niemniej od czasu do czasu faktycznie stosuje się jeszcze te klasyczne metody (jak np. numer seryjny płyty głównej), pamiętając, że są ułomne (np. aplikacja przestaje działać po wymianie dysku twardego); możesz poszukać w Google takich haseł jak:

  • c# get motherboard serial number,
  • c# get hdd serial number,
  • c# get mac address,
  • etc.

^1 https://pl.wikipedia.org/wiki/Statek_Tezeusza

0

Jeżeli ta aplikacja byłaby webowa, to może specjalny hosting, który taki adres zdobędzie.

2
ddaawidd napisał(a):

Potrzebuję informacji w jaki sposób najlepiej pobrać jakiś fizyczny adres komputera. Chciałbym zrobić zabezpieczenie na mój program, aby jedna licencja była przypisana fizycznie do jednego komputera. Taki adres komputera chciałbym w bazie danych online przetrzymywać.

To zabezpieczenie rodem z poprzedniego wieku. Nie ma sensu, numer seryjny karty sieciowej zmienia się banalnie, a gdy padnie jakiś podzespół i trzeba go będzie wymienić to licencja przestanie działać co raczej nie jest fair.
W dodatku w dzisiejszych czasach łatwo jak nigdy przedtem to ominąć - wystarczy postawić program na maszynie wirtualnej którą można dowolnie klonować, można postawić jedną instancję na jednym serwerze i pozwolić wielu użytkownikom łączyć się do tej maszyny na różnych użytkownikach (takie rozwiązanie faktycznie stosowano w jednej firmie w której pracowałem gdzie licencja do potrzebnego programu była zbyt droga żeby ją zapewnić wszystkim pracownikom - w dodatku tam zabezpieczenie było w formie fizycznego klucza zabezpieczeń).
Swego czasu na przykład urządziłem lan party korzystając z jednej kopii gry kupionej na steamie i odpaleniu klienta wiele razy w trybie offline na kilku komputerach. Jak widać nawet duże firmy nie potrafią się skutecznie zabezpieczyć przed nadużywaniem licencji.

Najrozsądniej zrobić weryfikację online i nie pozwolić uruchomić dwóch kopii programu w tym samym czasie, lub skorzystać z gotowego rozwiązania. Żadne rozwiązanie nie jest jednak nie do ominięcia, więc tak naprawdę najlepiej jest po prostu zaufać użytkownikowi (to i tak miło z jego strony że kupił jedną licencję zamiast crackować).
Można wysyłać statystyki użycia do siebie i w razie nieprawidłowości w liczbie wykrytych instancji do licencji, wysłać upomnienie mailem użytkownikowi żeby się ogarnął (tak robi np microsoft w firmach). W razie kontroli legalności oprogramowania i tak mieliby problemy, tak naprawdę nie ma sensu tego egzekwować ze strony producenta oprogramowania.
Skuteczne rozwiązania nie istnieją, mogą być tylko bardziej lub mniej uciążliwe dla użytkownika. Dając większą swobodę użytkownikowi zdobywasz uznanie klienta, który może np też poeksperymentować z Twoim produktem i na przykład przetestować za darmo skalowalność co może rzutować na kupno większej ilości licencji później.

2

Jak pisali koledzy - takiego typu zabezpieczenia są łatwe do obejścia, poza tym mogą zrobić wiele problemów legalnym użytkownkom, którzy nie będą mogli odpalić programu po wymianie spalonej płyty głównej (a w efekcie będą tobie zawracać głowę głupimi zgłoszeniami).

Najlepszą i aktualnie najczęściej stosowana formą zabezpieczeń jest jakieś serwer aktywacji/licencji oraz usługa w modelu SaaS. Jeśli to Ci nie pasuje, to możesz wrócić do stosowanego dość często pewien czas temu, a obecnie w dużej mierze wypartego przez licencję online rozwiązania, jakim jest klucz HASP. Jest kilku producentów, osobiście miałem do czynienia z Alladin (to dawna nazwa, teraz to się nazywa Sentinel). Tutaj masz adres do ich polskiego przedstawiciela - https://systherm-info.pl/hasp/sentinel-ldk/, możesz tam trochę poczytać o tym rozwiązaniu a także zamówić pakiet z kluczem demo.

0
/// <summary>
        /// Pobiera adresy MAC kart sieciowych
        /// </summary>
        /// <returns>Zwraca adres MAC</returns>
        /// <exception cref="NetworkInformationException"/>
        /// <exception cref="Exception"/>
        /// <exception cref="ArgumentNullException"/>
        public static string[] GetAllMACArray()
        {
            IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            if (nics == null || nics.Length < 1)
                throw new Exception("Nie znaleziono żadnej karty sieciowej");
            List<string> MAC = new List<string>();
            foreach (var v in nics)
            {
                MAC.Add(string.Join(":", v.GetPhysicalAddress().GetAddressBytes().Select(b => b.ToString("X2"))));
            }
            return MAC.ToArray();
        }
1

@Grzegorz Świdwa: Jaki sens zamieniać listę wynikową na tablicę?

Po co od razu rzucać wyjątek w przypadku braku interfejsów? Nie lepiej zwrócić po prostu pustą kolekcję?

0

Niby tak :d ale tak już miałem w swoim notatniczku i nie chciało mi się zmieniać 😅

1 użytkowników online, w tym zalogowanych: 0, gości: 1