Avatar billede gzus_dk Nybegynder
07. marts 2003 - 11:20 Der er 9 kommentarer og
1 løsning

Konstant Unikt ID på klient

Hej

Jeg er ved at lave et system som har et antal klienter  som skal forbinde sig til en server. Der skal forgå noget licensering, sikring af klienter m.m. Derfor har jeg brug for at kunne udtrække et unikt id for hver klient, som er konstant, dvs. at næste gang jeg har brug for at få dette id skal det være det samme. Er der nogen muligheder, ideer til hvordan dette kan foregå. Jeg ønsker ikke at placere noget unikt i hver distribution til hver enkelt klient. Jeg vil kunne generere det. Håber i har nogle ideer forslag.

På forhånd tak

Morten N!
Avatar billede viht Nybegynder
07. marts 2003 - 11:31 #1
Medmindre du skal til at gå i hardware og læse hashværdier af indstikskort mv. kan du altid tage hans IP+hans brugernavn.

Hvis du reserverer en tråd til hver klient når han logger på så gem hans IP + currentTimeMilis(). IPerne kan jo godt ske at være de samme på to klienter, men JVM kan aldrig oprette to tråde på samme tid på serveren.
Avatar billede arne_v Ekspert
07. marts 2003 - 11:33 #2
Det er ikke nemt.

Normalt vil man sige at IP adresser identificerer klient, men den
er jo ikke fast hvis man bruger DHCP.

Så kan du bruge netkort ethernet-adresse, harddisk serie-nummer etc. -
og så slagter dine kunder dig, når de skifter noget hardware og dit
program ikke virke længere.

Jeg ville nok lade klienten generere noget første gang den kørte
f.eks. IP nummer + tid. Det vil give en unik ID. Den gemmes så
og sendes med hver gang den kører derefter. Også selvom IP og
tid ændrer sig.

Serveren har så styr på klienterne via dette ID.

Hvis du skal forhindre ulovlig kopiering bliver du nødt til at
binde filen til computeren. Mit bedste bud er computer-navn, fordi:
  - der er næppe computere med samme computer-navn på samme netværk
  - folk beholder normalt deres computer-navn selvom de får skiftet
    diverse hardware-dele
Avatar billede viht Nybegynder
07. marts 2003 - 12:00 #3
Jeg lavede faktisk engang en unik nøgle der blot var den nøjagtige størrelse på indholdet af brugernes Windows mappe. Selv med utrolig mange klienter har jeg aldrig set to ens størrelser! :)
Avatar billede gzus_dk Nybegynder
07. marts 2003 - 12:42 #4
For at give dette lille problem en twist, skal det siges at de klienter der skal bruges er pda'ere og mobiltelefoner, som forbinder sig via GPRS. Der kan være forskel på hvad de indeholder, og derfor også forskel på native kald til fx, cpuid, MAC adresse m.m.,  Jeg har heller ikke en fuldt API, da de skal køre med Personal Java eller J9, dog skal det siges at de vigtigste ting self. er med.
Avatar billede arne_v Ekspert
07. marts 2003 - 12:47 #5
De har alle sammen en IP adresse og en tid går jeg ud fra.

Måske bør du ligge "ulovlig kopierings check" på server,
hvor jeg formoder at du har mere kontrol over environment.

Så holder serveren styr på hvor mange klienter der er tilladt.
Avatar billede gzus_dk Nybegynder
07. marts 2003 - 12:55 #6
Det er ikke sikkert de har en IP-adresse. De skal ikke være forbundet hele tiden, men skal derimod synkronisere op mod serveren. Problemet som det er nu, er at man kan kopiere indhold fra en klient til en anden, og bruge begge op mod serveren, da denne ikke kan se forskel på de to. Jeg ønsker en begrænsning på antal klienter, og ønsker derfor at kunne kende forskel på de to når de forbinder sig. Eller til at kryptere de to filer jeg ønsker de har. En clientID fil, samt en licensfil. Som skal bruges når de skal synkronisere/køres.
Avatar billede _darkstar_ Nybegynder
07. marts 2003 - 13:00 #7
Jeg tror at den bedste løsning vil vise sig at være hvis du tildeler dem et id selv (så ved du jo at de er unikke). Ellers er det noget med at samle en masse tal sammen (vælg frit fra ovenstående forslag), gange dem allesammen modulo et passende stort primtal. Dit problem er så at mange af de nævnte størrelser kan variere på tidspunkter hvor det ikke afspejler at programmet er flyttet til et andet miljø (som er hvad jeg regner med at du ønsker at opdage).

Det tror jeg ikke at du får meget held med at virke.

Derfor vil jeg nok argumentere for at opgive idéen og lave et system hvor man tildeler hver klient et id. Du kan eventuelt lave det sådan at hvis to klienter påstår at have samme id, kan ingen af dem komme på din service. Det virker rimeligt godt i f. eks. half life og andre online-spil.
Avatar billede gzus_dk Nybegynder
07. marts 2003 - 13:05 #8
Hvis jeg tildeler dem hver enkelt et id, vil det stadig kunne lade sig gøre at kopiere hele miljøet til en anden klient. Det er meget sjældent at det vil ske at de begge synkronisere på samme tidspunkt, og jeg kan derfor ikke kende forskel på hvilke klienter der synkroniserer.
Avatar billede _darkstar_ Nybegynder
07. marts 2003 - 15:40 #9
gzus_dk>>> Ja - man kan stadigvæk kopiere hele miljøet til en anden klient, men jeg går ud fra at det er en fordel for brugeren i det tilfælde at det er fordi at han/hun bare har fået en ny PDA.

I den situation hvor vedkommende lige vil give en kopi videre af programmet, kan du vel lave det sådan at de to klienter nødvendigvis deler samme data på serveren og dermed ikke kan bruges i praksis. (Med mail-adresser som det bedste eksempel: hvem har lyst til at *dele* sin mailadresse med en anden?)
Avatar billede gzus_dk Nybegynder
07. marts 2003 - 15:47 #10
Jeg vælger at løse det ved at sende en checksum frem og tilbage ved hver synkronisering, som ændrer sig fra serverens side, og checke på serveren om det er den rigtige checksum, i forhold til hvad der er sendt sidst. Dermed sikrer jeg at der kun kan være en klient som bruger et klientID. Selve ideen med det unikke id for hver klient, tror jeg er en umulig opgave. Men i skal have tak for ideerne, og inspirationen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester