Validação de Uso no Software

bom dia a todos.

Estou quebrando a cabeça com o meu software e gostaria de ver se vcs podem me ajudar.

tenho um programa q rodará localmente em uma empresa, eles pagaram um aluguel para o uso, mas querem utilizar esse sistema nas filiais com acesso ao servido da matriz (onde o sistema será instalado). Até aí tudo bem, consigo fazer o programa acessar pela internet, mas o que eu realmente quero é saber como faço para validar esses usuários externos.

Porque é o seguinte, as filiais terão que pagar o aluguel tb e para evitar “golpes” tenho que criar uma forma de que eu libere o acesso a esses que pagam o software e não dê para a matriz “dar um jeitinho” de outras filiais usarem sem pagar.

Pensei no seguinte: 1º opção: validação por ip externo, faz um comparativo e se for igual, passa. Problema: se o ip for dinâmico… ferrou.

2º opção: validação do nome da maq, tem um cadastro na matriz onde o nome da maq está instalado e seu ip interno. Problema: A empresa pode formatar a maq e ela não acessar mais, ou usar o nome da maq em outra estação. Embora eu faria um comparativo de nomes, os nomes não poderiam ser iguais.

3º opção: validação pelo mac address. Problema: Trocou a placa de rede, ferrou.

4º opção: validação do ip interno. Problema: Se mudar o ip interno ou for dinâmico, não dará certo.

Um amigo meu falou para fazer um registro no windows (no caso, o programa rodará em estações windows msm), mas não tenho nem idéia de como criar um registro e como usar isso para validar.

Vcs podem me ajudar a encontrar uma solução?

Desde já agradeço a todos.

Abraço

PS: Caso eu não tenha sido claro em algumas informações, por favor me digam.

O servidor da matriz é você que programa?

Acho que é mais fácil definir um contrato de logins simultâneos. Assim, seu sistema pode contar quantos usuários tem logados e impedir e entrada de novos caso o limite já tenha sido atingido.

Validar por IP realmente não é uma boa. É muito fácil burlar. Seja o interno ou externo.

Por MAC, traz inconvenientes para o seu cliente, e para você também. Ele não poderá trocar o próprio hardware sem ter que falar com você. Se isso ocorrer numa emergência, você pode ter mais dor de cabeça do que gostaria.

Primeiramente, obrigado pela resposta.

Então, só instalarei o bd. nada mais.

Sobre acesso simultaneo, hmm… eu não estava pesando em usar limites de acesso. Mas é um boa alternativa.
eu poderia controlar somente os acessos remotos? por exemplo: para a matriz teria acesso ilimitado mas para acessos das filiais seria controlado.

Poderia fazer isso comparando os ip’s externos, por exemplo: pego o ip externo da matriz e comparo com o q está acessando remotamente, se forem diferentes, conta como um acesso.
Será q dá certo?

Abraço!

Por IP, somente se usado uma conta DNS (como No-IP) ou se o IP público das filiais forem estáticos (pouco provável).

Por MAC, nem é possível, uma vez que os roteadores da Internet trabalham na camada 3 do modelo OSI, o que faz com que todas as informações de camada 2 (o MAC) sejam perdidas a cada salto (a cada roteador que o pacote passa, um novo MAC de origem e de destino).

Portanto, o número máximo de usuários simultâneos que o Vinícius sugeriu parece ser uma boa.

Eu imagino o mac sendo possível apenas se a aplicação incluído no seu handshake, ou seja, se ele programar isso. Direto pelo pacote é virtualmente impossível, até pq o Java nem sequer disponibiliza a leitura do pacote em modo “raw”.

De qualquer forma, mesmo que ele viabilize isso, ainda resta os inconvenientes que eu falei. E eu, particularmente, sou radicalmente contra DRMs que tornem a vida do cliente mais complicada do que já é.

Entendo… realmente a idéia dele é melhor. mas isso terá que ser para todos os acessos certo? tanto interno qto externo.

não tem como identificar que é de fora? e contar somente eles?

Abraços.

[quote=hishin]Entendo… realmente a idéia dele é melhor. mas isso terá que ser para todos os acessos certo? tanto interno qto externo.

não tem como identificar que é de fora? e contar somente eles?

Abraços.[/quote]
Isso é menos complicado. Você pode pegar o IP remoto da conexão e verificá-lo: se for o IP do gateway da rede, é conexão externa. Caso contrário, é da LAN.

Maravilha, vou tentar aq. Grato a todos pela ajuda!

Até mais.

Estou ciente disso, mas como fazer?

tem alguma sujestão?

abraço

[quote=hishin]Estou ciente disso, mas como fazer?

tem alguma sujestão?

abraço[/quote]

talvez o jlicense te ajude

embora eu ache o seguinte, se o sistema está funcionando perfeitamente e o cliente confia no programador, acho difícil ele confiar o source a outro programador msm ele sendo da empresa pq cada um entende o seu codigo… ler o cod dos outros e alterar é um saco e claro se algum dano acontecer, o programador, no caso eu, não se reponsabilizaria. Claro que colocarei isso no contrato, me imunizando disso. Caso tenha a quebra, o cliente paga multa ou para arrumar o soft depois, cobrarei mais caro… daí sei la… tem q ver.

abraços

Restrições aplicadas em fonte não compilada (por exemplo regras no banco de dados) são muito mais fáceis de burlar (ainda mais levando em consideração que o banco de dados esta no cliente).

At.