Unique ID für Computer

internet

Top Contributor
Hallo zusammen,

gibt es einen Indikator einen PC eindeutig zu identifizieren?
MAC-Adresse dachte ich zunächst, was ist aber wenn der PC mehrere Netzwerkadapter hat.

Danke für Hilfen
 
MAC Adresse kann man auch faken. Einen wirklichen sicheren Weg gibt es da nicht. Unter Windows gibt es da einen Registry Eintrag der zum Windows gehört. Also zumindest sicherstellt, das es immer nur auf einem Rechner laufen kann. Aber wenn du Plattform unabhängig sein willst wird das nichts.

Gruß

Claus
 
Hast du Windows-Rechner? Da könntest du auch MAC-Adresse + Windows Serial Key nehmen, faken kann man aber immer, trotzdem wärs net gute Kombi denke ich
 
Moin,

also wir berechnen hier zur eindeutigen Identifizierzung einzelner Rechner einen 20-stelligen Hashcode aus MAC-Adresse (es werden nur bestimmte Adapter berücksichtigt), hardwaremäßigem Rechnername und Volume-ID!

Das funktioniert, aber wie Thallius schon schrieb, ist auch das nicht hundertprozentig sicher!

Gruß Klaus

EDIT: "Windows Serial Key" ist problematisch, wenn in einer größeren Firma die Rechnersysteme einfach nur geclont werden ...
 
Moin,

also wir berechnen hier zur eindeutigen Identifizierzung einzelner Rechner einen 20-stelligen Hashcode aus MAC-Adresse (es werden nur bestimmte Adapter berücksichtigt), hardwaremäßigem Rechnername und Volume-ID!

Das funktioniert, aber wie Thallius schon schrieb, ist auch das nicht hundertprozentig sicher!

Gruß Klaus

wäre für mich ausreichend.
Hast Du ein Codeschnippsel?
Warum werden nur bestimmte Adapter berücksichtigt?
 
Moin,

Hast Du ein Codeschnipsel?
(a) den Rechnernamen bekommst Du doch ganz simpel mit
Java:
System.getenv("computername")
ermitteln

(b) die Volume-ID kannst du mittels
Java:
Runtime.getRuntime().exec( "cmd /C dir" );
ermitteln

Warum werden nur bestimmte Adapter berücksichtigt?
Das Ermitteln einer eindeutigen, immer gleichen MAC-Adresse ist auf Desktop-Rechner kein Problem.
Mies wird das bei Laptops etc. da sich dort die Adapter permanent ändern können (bswp. durch das Einstecken ein WLAN-Sticks)

Ich habe das Problem hier wie folgt gelöst:
Java:
    /**
      * @brief Ermitteln die MAC-Adresse
      * @result die MAC-Adresse
      */
   @SuppressWarnings( "boxing" )
   private String fSeekMACAdresse()
   {
     String strMACAdr = "00-00-00-00-00-00";

     try
     {
       Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
       for( NetworkInterface netint : Collections.list(nets) )
       {
         for( InetAddress address : Collections.list(netint.getInetAddresses()) )
         {
           if( address instanceof Inet4Address )
           {
             System.out.println( "<<" + address + "##" + netint.getName() + "##" + netint.getDisplayName() + ">>" );

             String sName = netint.getName();
             String sDisplayName = netint.getDisplayName();
            
             // ACHTUNG: das führende Blank bei MINIPORT ist zwingend erforderlich
             // (da seit Java JDK 1.7_45 ggf. "Paketplaner-Miniport" ausgelesen wird)!!!
             if( sName.startsWith("eth")
               && !sDisplayName.toUpperCase().contains("WAN")  && !sDisplayName.toUpperCase().contains(" MINIPORT")
               && !sDisplayName.toUpperCase().contains("TUNNEL") && !sDisplayName.toUpperCase().contains("BLUETOOTH")
              )
             {
               String DetectedIpAddress = address.getHostAddress();
               System.out.println( "~~~ Current IP-Address: " + DetectedIpAddress );
    
               byte[] mac = netint.getHardwareAddress();
               StringBuilder sb = new StringBuilder();
               for( int i = 0; i < mac.length; i++ )
               {
                 sb.append( String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "") );
               }
               return sb.toString();
             }
           }
         }
       }
     }
     catch( IOException e )
     {
       e.printStackTrace();
     }
    
     return strMACAdr;
    
   } // fSeekMACAdresse
Musst mal schauen, ob Du damit was anfangen kannst!

Gruß Klaus
 
danke erstmal.

Ich habe den Code gerade bei mir ausprobiert.
Für sName bekomme ich für die verschiedenen Schleifendurchläufe:
a) vnic1
b) en1
c) lo0


Demnach geht er nicht in die Abfrage:
if (sName.startsWith("eth")

Und als Ergebnis ist demnach immer:
strMACAdr = "00-00-00-00-00-00";

Hast Du eine Idee?
 
ja nun, dann findet er keinen gültigen Adapter, der den (meinen) Vorgaben entspricht !!

Welche Adapter sind denn verbaut?
Lies' sie mal von Hand aus mit "cmd /k ipconfig /all > c:\ip.txt" und poste dann den Inhalt der Datei!

Gruß Klaus
 
Ich habe ein MacBook Pro:

Hardware Port: Ethernet
Device: en0
Ethernet Address: c8:2a:14:03:c1:53

Hardware Port: FireWire
Device: fw0
Ethernet Address: c8:2a:14:ff:fe:5d:d6:00

Hardware Port: Wi-Fi
Device: en1
Ethernet Address: e0:f8:47:3a:61:bb
 
ok, dann musst Du den entsprechenden Codeteil (Auswertung von sName und sDisplayName) halt auf deine Bedürfnisse anpassen ..... 🙄

Meine Version ist halt spezifisch für Windowssysteme !
 

Neue Themen


Zurück
Oben