# Hardware Properties auslesen



## Ande (2. Apr 2008)

Hi, 

ich habe mal eine Frage:
Ich möchte ein Programm schreiben, dass prüft, ob ein bestimmter USB Stick am PC angeschlossen ist.
Jetz habe ich mir gedacht dass USB sticks irgendwie unterscheidbar sein müssten, sei es unterschiedliche Produktbezeichnung oder unterschiedliche Seriennummern.
Gibt es eine Möglichkeit dies zu implementieren? Also prinzipiell zu checken ob ein bestimmter USB stick angeschlossen ist? Könnte das mit HW properties klappen? Und wenn nein: wie würdet ihr sowas machen?

Viele Grüße
Ande


----------



## foobar (2. Apr 2008)

Es gibt USB-Apis für Java  z.b. JUsb benutz mal die Suchfunktion.


----------



## Ande (2. Apr 2008)

Danke, jetz weiss ich wenigstens wonach ich suchen muss. Meine Suche heute morgen gab keine guten Treffer.


----------



## Milbo (3. Apr 2008)

Da hab ich auch eine Frage dazu:

Ich würde gerne die Hardware Properties wie 

    * Name der Grafikkarte
    * Name der SCSI-Karte
    * Name der IDE-Karte
    * Hardware-Adresse der Netzwerkkarte, MAC-Adresse
    * Größe des Arbeitsspeichers (als Bereiche, wie 0-64 MB, 64-128 MB usw.)
    * Prozessortyp
    * Seriennummer des Prozessors
    * Festplattenbezeichnung
    * Seriennummer der Festplatte
    * Seriennummer des CD-ROM / CD-RW / DVD-ROM
    * CD-Key
    * Ländercode

auslesen können. Naja eigentlich interessiert mich hauptsächlich die *Seriennummer vom Motherboard*.


----------



## tuxedo (3. Apr 2008)

Mit nur nativem Java ist da nicht viel zu machen...

Aber da fällt mir ein: An die MAC-Adresse kommst du. Und viele Mainboards haben Netzwerk schon onBoard. D.h. du könntest die MAC des OnBoard Netzwerks zur Identifikation des Mainboards nutzen.

Ist dann halt nur dumm wenn jemand kein ObBoard-Netzwerk hat und die Netzwerkkarte wechselt. Oder wenn er rausfindet dass du die MAC überprüfst und dann die MAC manuell ändert (was ja nicht so der Sinn einer MAC ist).

Ich nehme an du willst aus all diesen Daten einen Hash generieren und damit deine Software "verdongeln"?

- Alex


----------



## Milbo (3. Apr 2008)

Yepp,

Momentan benutze ich den Namen des Computers (wird in Echtzeit von java abgefragt und die Installationszeit.

Es geht bei mir vorrangig um Betriebe mit mehr als 20 Rechner, daher ist es unwahrscheinlich, dass jmd die Rechner alle gleichbenennt. Ich glaube gleicher Rechnername und gleiche mac-adresse könnte derbe Probleme in einem Netzwerk machen, oder? 

Allerdings wäre die Seriennummer des Motherboards perfekt, weil es sehr selten ist, dass jmd nach einem Motherboard austausch keine Neuinstallation macht (abgesehen von Linuxusern, da geht das besser).

Die Verdonglung ist eine Produktaktivierung übers Inet, welche alle n Tage durchgeführt werden muss (geschieht bei Programmstart automatisch in einem eigenen Thread, dank deiner Hilfe mit https ;-) )

Grüße 
Milbo


----------



## tuxedo (3. Apr 2008)

Milbo hat gesagt.:
			
		

> Yepp,
> 
> Momentan benutze ich den Namen des Computers (wird in Echtzeit von java abgefragt und die Installationszeit.
> 
> ...



Also zwei mac-adressen in einem Netzwerk vertragen sich nicht. Da kollidieren dann ganze Netz-Pakete. Rechnername ist etwas weiter oben in den OSI-Schichten. D.h. der ist nahezu uninteressant.

Würde IP und MAC-Adresse verwenden. Diese Konstellation darf eh nur einmal pro Netz auftreten. 

- Alex


----------



## Milbo (3. Apr 2008)

Nu das ist gut zu wissen, das könnte ich also noch einbauen. Wie sieht dann der Befehl dafür aus? gutes Stichwort zum auffinden reicht ;-)



			
				alex0801 hat gesagt.:
			
		

> Rechnername ist etwas weiter oben in den OSI-Schichten. D.h. der ist nahezu uninteressant.



kannst du das genauer Erklären. Hört sich interessant an. Was ist nochmal die OSI-Schicht?

Weißt du was dieser Befehl macht und ob er leicht auszuhebeln ist?

System.getenv("COMPUTERNAME");


----------



## tuxedo (3. Apr 2008)

Zum ISO-Modell: http://de.wikipedia.org/wiki/OSI-Modell

Netzwerkpakete werden von Switches und Hubs anhand der MAC-Adresse geroutet, und nicht anhand der IP-Adresse. Erst ein Netzwerk-Router arbeitet auf Schicht 3 und schaut sich die IP-Adressen an. Wichtig ist jetzt die zweite Schicht. Hier arbeitet der Switch welcher nur die MAC-Adressen sieht und keine IP.

Wenn du jetzt deine Anwendung mit der IP-Adresse und zugehörigen MAC-Adresse verknüpfst, kannst du quasi sicherstellen, dass keine zwei Rechner im gleichen Netz die gleiche Konstellation fahren. Natürlich kann es irgendwo auf der Welt ein anderes Netz geben wo die gleiche IP mit gleicher MAC existiert. Aber solange niemand was an der MAC rumpfuscht, ist diese weltweit "unique". 

Wie du an die MAC-Adresse und IP-Adresse kommst findest du hier im Forum über die Suche oder via google (hab den Befehl nicht auswendig parat). Geht aber mit reinem Java...

- Alex


----------



## Milbo (3. Apr 2008)

Okey danke,..

Die Frage ist wieder ob es geräuschlos funktionieren kann.

Ich weiss nicht, wie sich das ganze Verhält, wenn z.B. jmd einen Laptop hat mit WLan und Netzwerkkarte und das immer gemischt benutzt. Naja ich werds mir mal angucken, wie das funktioniert mit den MAC-Adressen. Danke dir

Milbo


----------



## tuxedo (3. Apr 2008)

Hmm, okay. Wenn sich das Netzwerkdevice immer mal wieder unterscheidet, dann ist das "doof". 

Eigentlich reicht es aber sich eine MAC-Adresse zu schnappen. Egal ob sie benutzt wird oder nicht. Zum einen weiß der User erstmal nix davon dass du die MAC identifizierst. 

Zum anderen muss die Software, wie du ja bereits geschrieben hast, eh am Server aktiviert werden. Dann machst du's einfach so, dass der Server keine doppelten MACs zulässt. 

Das ganze hat dann folgenden Effekt:

Keine zwei Netzwerkkarten im gleichen Netzwerk können die gleiche MAC haben. Ergo gibt es keine zwei Programminstanzen wo es nur eine LIzenz gibt.

AUSSER:

Einer der beiden hat mehrere Netzwerkinterfaces und nutzt ein Netzwerkinterface dessen MAC nicht registriert ist, besitzt aber ein anderes Netzwerkinterface, welches eine registrierte MAC hat.

Nur so können im lokalen Netz zei Instanzen mit nur einer Lizenz (also gleicher MAC) laufen.

Aber zum einen ist es fraglich ob so eine Konstellation auftritt. Zum anderen weiß ja erstmal niemand dass du die MAC benutzt. Und andererseits kannst du ja auch noch die IP mit ins Spiel bringen und einfach zur Randbedingung machen, dass dein Programm von einer IP-MAC-Kombination abhängt und eine Lizenz für einen Netzwerkanschluss und nicht für einen Rechner gilt. 

Aber das sind jetzt Details. Mit ein wenig C/C++ Code und JNI/JNA kommst du ja auch noch an andere Daten ran...

- Alex


----------

