Bom dia meu povo!
Gostaria de fazer uma validação da máquina que está utilizando minha aplicação, assim gostaria de saber se tem como pegar por exemplo o endereço mac para eu criar um algoritmo de validação no meu sistema?
se tiver algum outro tipo de recurso por favor me indiquem.
Obrigado!
Uma possível solução seria rodar um comando DOS em sua aplicação java.
Para fazer isso vc deve utilizar Runtime.getRuntime();
e o comando em DOS é getmac.
Vc deve tratar a saída a fim de pegar só o MAC e descartar as outras linhas.
Olá!
Autorizar acesso a uma aplicação por mac address é uma idéia que surge aqui e ali há muito tempo, mas não funciona.
Na verdade é uma ilusão: as pessoas imaginam o Mac Address como um tipo de identificação única do computador, o que não é verdade. Tem vários outros motivos (talvez eu escreva mais sobre isso depois), mas por hora vou colocar os principais:
(1) Nem sempre é possível obter a informação na aplicação de forma confiável.
(2) É MUITO fácil falsificar o mac address de um computador, porque isso costuma ser configurável (no Linux é tão fácil como escolher o IP; no Windows pode ser feito nas configurações avançadas da placa, não são todos os drivers que permitem mas ainda assim é possível).
O melhor seria colocar as suas necessidades relacionadas a segurança, o pessoal pode ajudá-lo a encontrar alternativas!
Isso é uma das maneiras de pegar o Mac Address da sua máquina.
Pegar o da máquina com a qual você está conectado é que é o problema. Só dá pra fazer usando gambiarra, e em alguns cenários simplesmente não existe a informação.
Olha vou colocar algumas linhas aqui que talvez possam te ajudar.
rt = Runtime.getRuntime();
proc = rt.exec("comando DOS");
input = proc.getInputStream();
Já precisei desse negócio ai para ler caracter/caracter do retorno, e pra isso precisei passar o input através de um while para um variável do tipo char.
Fazer algo do tipo:
[code]
int c;
String temp;
while((c = input.read()) != -1) {
//Aqui vc trata o seu retorno
temp+=(char)c;
}[/code]
Isso é uma das maneiras de pegar o Mac Address da sua máquina.
Pegar o da máquina com a qual você está conectado é que é o problema. Só dá pra fazer usando gambiarra, e em alguns cenários simplesmente não existe a informação.[/quote]
@urbgames
Pensando bem, agora reli o tópico e não sei se ele precisa pegar o da máquina local onde está rodando a aplicação, ou se vai validar o Mac do cliente em um servidor!
Se for a primeira opção, esse comando é realmente uma das soluções possívels (existe outra mais portável que é usar java.net.NetworkInterface)… mas o problema da falsificação continua.
gomesrod sim este método de autenticação é falho, porém caso geraldofrancisco insista em utilizar esta autenticação, este comando sim é para pegar o mac da sua máquina e pra isso o desenvolvedor deve implementar este método no módulo cliente e fazer com que ele repasse essas informações ao módulo servidor.
O que quero fazer é o seguinte:
Meu sistema roda cliente-servidor. quero limitar a quantidade de máquinas acessando meu servidor de acordo com a quantidade de máquinas clientes contratadas.
Assim eu pegaria o mac adress por exemplo e usaria uma criptografia tipo sha ou md5 e cadastraria no banco!
Assim mesmo que a pessoa tivesse acesso ao banco de dados ela não entenderia o que foi cadastrado, caso o mac criptografado for diferente do que ta cadastrado no banco o sistema não vai abrir. Lógico, meu cliente não vai saber como a validação funciona,
Algo mais ou menos assim.
Limitar a quantidade de sessões não é o mesmo que limitar uma máquina.
Por exemplo, você vende 15 licenças para um cliente. Ele pode ter 15 máquinas funcionando, 1 queimar, substituir e ainda assim não estará quebrando o acordo.
Sei que pelo MAC é uma maneira, mas se a máquina queimar, upgrade, substituição, será necessário interfência.
Você pode contar as sessões abertas no servidor, por exemplo.
Acho que é mais fácil e funcional.
[quote=geraldofrancisco]
Meu sistema roda cliente-servidor. quero limitar a quantidade de máquinas acessando meu servidor de acordo com a quantidade de máquinas clientes contratadas.
Assim eu pegaria o mac adress por exemplo e usaria uma criptografia tipo sha ou md5 e cadastraria no banco![/quote]
Acho que você poderia mudar a abordagem. Em vez de definir: “o cliente tem direito a conectar ao sistema com as máquinas X, Y e Z” , mude a licença para: “o cliente tem direito a 3 clientes acessando o sistema simultaneamente”. O servidor só precisaria validar quantos já estão conectados e com isso permitir ou não o acesso.
É melhor para o cliente, porque é mais flexível… ele pode mudar de máquina à vontade sem precisar te ligar. E para você é bem mais fácil de administrar.
EDIT:
Falei praticamente a mesma coisa que o btafarelo porque ele mandou enquanto eu digitava…
Sem essa. kkkk
Isso vai depender da sua arquitetura. Mas um jeito simples seria você ter um tabela no banco com as sessões, cada login adiciona uma linha lá. Quando fizer logoff você subtrai essa linha.
Só que aí cai no problema do software travar ou a máquina reiniciar. Então poderia controlar o login, só permitir uma sessão por login.
Mas ainda assim vai depender da sua arquitetura. Explique como funciona o cliente/servidor, quais tecnologias utilizou.
isso se aplica em aplicativos desktops?
Preciso saber sobre sua arquitetura
Clinte/Servidor quer dizer (Cliente) app na estação de trabalho e (Servidor) banco de dados comum?
Se for assim, você vai fazer o login no banco de dados, certo? A aplicação quando validar a autenticação adiciona uma linha numa tabela de sessões com o nome do usuário e uma outra informação, tipo o nome do computador, mac address, ip, etc…
Então só é permitido o login do usuário que não tiver uma sessão aberta ou que já possuir uma sessão aberta no mesmo computador.