Mostrando postagens com marcador linux. Mostrar todas as postagens
Mostrando postagens com marcador linux. Mostrar todas as postagens

Adicionando uma página de cadastro de usuários (Hotspot) em ASP.NET no Mikrotik

Cada projeto que pego, é uma aventura nova a ser encarada! Dessa vez me adentrei no universo de Linux, rede, SSH, infra e tudo o que é direito. Quem não conhece, a Mikrotik é uma empresa de grande referência no que tange em equipamentos para redes de computadores. Seu principal destaque é o RouterOS que é sistema operacional que torna o roteador um poderoso gerente de rede. Dentro do Mikrotik (irei me referenciar sempre dessa forma generalizando como um produto), há o HotSpot. Com ele pode-se gerenciar quem irá autenticar na rede para usar a internet (ou apenas a intranet), banda usada, taxa de transferência e outras funcionalidades por usuário ou de forma geral. Um exemplo de uso desse sistema é de quando você vai a uma rede corporativa onde precisa autenticar-se para usar a internet... é isso!


Qual é o objetivo desse artigo então? A princípio é apenas obter as páginas originais de hotspot do Mikrotik, colocar um redirecionador para uma página externa, criar uma página externa de cadastro de usuário (para que possa acessar a rede) e fazer funcionar. Não ensinarei como configurar ou criar o hotspot. Pela net há vários tutoriais muito bons sobre o assunto e também não é de minha área. Recomendo fortemente o fórum da Under-Linux que lá o pessoal manja muito no assunto.

Nesse artigo usei o Mikrotik MKBR100 que é bem fácil de usar: basta plugar o cabo de rede da internet, do servidor e da energia. Pronto!

Para acessar seu SO, deve-se utilizar o Winbox como se fosse um daqueles players de máquina virtual ou OpenSSH. Vamos lá colocar a mão na massa!

Conecte o cabo de rede de seu PC (ou servidor) na porta (interface) ether2 do Mikrotik. Agora conecte outro cabo na ether1 para os outros computadores da rede (ou roteador simples). Porquê na ether1? Estou considerando que o hotspot está configurado para monitorar essa interface enquanto a ether2 será utilizado para que o servidor de comunique com o aparelho. Seria algo do tipo:



Vá em IP > Address no Mikrotik para que sejam configuradas as interfaces e sejam endereçados conforme os exemplos abaixo:

  • ether1: 192.168.88.1
  • ether2: 192.168.88.2

Somente através de IP que será possível enviar os arquivos do hotspot. Se ficar conectando, via MAC, pelo Winbox, você terá a mensagem de erro: "router has been disconnected" (logo, conecte-se usando a ether2 - 192.168.88.2). E outra coisa é: se não seguir o esquema acima, outros erros você terá, como:

could not connect to ... no response
could not connect to ... connection refused

could not connect to ... network is unreachable
could not fetch index from ... not found


Tudo isso por causa de configuração apenas! É bom deixar o IP do servidor fixo para que possa dar permissão de porta, firewall, etc. No caso deixei como 192.168.88.30 (que no caso era minha própria máquina). Uma dica: às vezes dê um reboot no aparelho!

O próximo passo é ativar a porta da API que o Mikrotik dispõe para integração com linguagens de programação. É através dela que iremos conectar e fazer a comunicação. Só que precisamos ativá-la. Vá em IP > Services e ative a API na porta 8728.


Também libere, no Firewall, as portas para conexão tanto do sistema quanto do Winbox (pelo IP), senão quando estiver acessando pela página de cadastro, irá surgir o erro: "nenhuma conexão pôde ser feita porque a máquina de destino as recusou ativamente ..:8728.".


Para permitir a navegação e envio de informações, adicione as permissões no Walled Garden.


Vejam que até o momento tudo é configuração e nada de programação. Continuemos...

Agora vamos em Files e selecione todos os arquivos da pasta hotspot, arraste para sua área de trabalho que será copiado. Para enviar faça o processo inverso... Se estiver acessando pelo IP vai dar certo, senão cairá a conexão (lembra que disse acima?).

Abra o HTML da página login.html e acione um link para a página de cadastro que ficará hospedada no servidor. Adicionei o link <a href="http://192.168.88.30/mikrotik/cadastro.aspx">cadastre-se</a> . Customize as demais páginas como desejar e as envie de volta. Praticamente terminamos de trabalhar no Mikrotik.

Agora vem o mais simples: criar a página ASP.NET. Você pode utilizar qualquer linguagem de programação que possa usar TCP na comunicação e que a API suporte: PHP, Delphi, C, C++, C#, Flash, Ruby on Rails, Java, Python, VB.NET, etc.

Faça o download da classe MK, em C# (eles já dispõe de classes prontas para outras linguagens também), nesse link aqui e adicione no seu projeto. Agora crie um Web Form adicionando os campos que queira trabalhar. No meu exemplo, só quis login (username) e senha. Adicione um Button e um método para executar o cadastro do usuário conforme exemplo abaixo:


             // Autenticação
            MK mikrotik = new MK("192.168.88.2");
            if (!mikrotik.Login("admin", ""))
            {
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Houve um problema de comunicação com o Hotspot! Por favor, tente mais tarde.');", true);
                mikrotik.Close();
                return;
            }

            // Requisição
            mikrotik.Send("/ip/hotspot/user/add");
            mikrotik.Send("=name=" + nome.Text);
            mikrotik.Send("=password=" + senha.Text, true);

            //Retorno
            string retorno = string.Empty;
            foreach (string h in mikrotik.Read())
            {
                if (retorno != string.Empty)
                    retorno += ", ";
                retorno += h;
            }

            // Fecha objeto
            mikrotik.Close();

            // Validação
            if (retorno.ToLower().Contains("!done=ret="))
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Cadastro realizado com sucesso!'); location.href='http://192.168.88.1/login.html';", true);
            else if (retorno.ToLower().Contains("message=failure: already have user with this name for this server"))
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Já existe um usuário com esse nome!');", true);
            else
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Falha no cadastro: " + retorno + "!');", true);


Você poderia não só fazer o cadastro de usuário no hotspot como também executar qualquer comando (SSH) no Mikrotik. Lembrando que eu atropelei muita coisa aí no que diz respeito a configuração do dispositivo na qual disse logo no início que não era minha finalidade. Vocês observaram que a parte de programação é bem simples do que configuração... e com certeza é! Agora nunca irá sair de minha cabeça a palavra Mikrotik Mikrotik Mikrotik Mikrotik Mikrotik ... Por favor, qualquer erro ou informação adicional me avise!

[]'s

UPDATE: disponibilizei uma implementação no post http://thiagomarcal.blogspot.com.br/2016/09/implementacao-do-aspnet-c-com-o.html

Usando Certificado Digital para Nota Fiscal Eletrônica no Windows Server 2003/2008

Desde que lançaram a nota fiscal eletrônica, nós programadores ficamos com receio do uso das leitoras e cartões nos sistemas operacionais para a assinatura do XML usando o certificado digital. Geralmente os servidores usufruem de alguma versão do Windows Server para acomodar as aplicações web (que realizam o processo de assinatura) além de proporcionar mais robustez e qualidade diante dos trabalhos. Mas as leitoras e cartões simplesmente não funcionam como deveriam! Incompatibilidade... dizem.
Enfim... como fazer? Simplesmente é só usar outro sistema operacional!

"Mas como vou usar se meu servidor é Windows Server e não posso instalar outro SO?" (Você se perguntando)

Resposta: Use os dois através de uma máquina virtual! Há vários tipos e para vários gostos ficando a critério do que você for utilizar. Recomendo o VMware! Ele dispõe de duas versões (há outras que você pode optar também) que são ótimas para uso: Player e Server. Em resumo, a Player é limitada pois seu uso é simples mas não deixa de ser útil.

Vamos ao processo que será bem simples:
  1. Instale uma das versões do VMware;
  2. Instale um Windows 2000/XP/Vista nela contanto que seja compatível com sua leitora/cartão (a instalação é bem simples e sem dificuldades - é mais fácil do que quando vai instalar no computador "de verdade" bastando seguir o Wizard dela);
  3. Agora conecte a leitora do cartão no PC. Note que no Windows Server não acontecerá nada, mas no Windows interno começará a instalação;
  4. Em seguida espete o cartão na leitora;
  5. Abra o utilitário da leitora (através do Windows da máquina virtual) e verá que o cartão foi lido corretamente.
Pronto! Daí basta compartilhar uma pasta entre o Windows Server e a máquina virtual (através do VMWare se faz isso) e, enquanto no Windows Server vai jogando os XMLs nessa pasta, o Windows MV (da máquina virtual) vai assinando/enviando. Bem louco, não? Mas funciona! Pode até ter o Linux virtualizando um Windows que a leitora irá funcionar.