07. marts 2003 - 11:20Der 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.
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.
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
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! :)
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.
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.
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.
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.
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?)
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.
Synes godt om
Ny brugerNybegynder
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.