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
38 comentários:
ola amigo ... gostei do seu artigo ... mais eu to querendo colocar na minha pagina do hostport em botao de cadastro ... e que esse cadastro quando efetuado... mostre o valor em hora e nao em velocidade ... e que o pagamento seja feito pelo mercado pago ... e que eu seja avisado no meu Imail ... sera que tem como ... forte abraço ... wbp_wbp@hotmail.com
Paschoal, tem como sim. Há duas formas de fazer isso: da mesma forma como fiz acima só que você terá que mudar a página de cadastro do usuário adicionando o envio de e-mail e o cálculo da cobrança. A outra forma é tentar embutir no próprio Mikrotik o formulário de cadastro essas condições o que, ao meu ver, é mais trabalhoso. Veja no link http://www.google.com.br/#sclient=psy-ab&hl=pt-BR&biw=1473&bih=797&source=hp&q=mikrotik+formul%C3%A1rio+google&pbx=1&oq=mikrotik+formul%C3%A1rio+google&aq=f&aqi=q-w1&aql=1&gs_sm=e&gs_upl=267l7179l0l7468l24l18l0l3l3l0l1336l10150l4-1.5.5.2l16l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=9a6d4b235a01f0fb
Preferi separar o formulário de cadastro em outro servidor para ficar mais fácil a manutenção e utilizar a linguagem de programação que quiser. Dentro do Mikrotik a programação é limitada.
ola ate a parte de inseri o link foi numa boa, mais sou muito fraco em criação de paginas, e asp net fica fora dos meus conhecimentos, tentei usando o front page criar a pagina mais dai em diante nada andou, vc poderia ajudar postando ou enviando para email um passo a passo para pessoas como eu que nada sabe de programação. cwsm@live.com
Christian, o passo-a-passo que fiz foi exatamente esse. Nada de diferente... O que mostrei foi muito de configuração do Mikrotik. A programação em ASP também resume-se nisso aí. Não tem muito o que ajudar nesse aspecto, mas qual seria o seu objetivo? Seria também fazer o cadastro? Posso depois lhe enviar as páginas produzidas e programadas das quais fiz o teste. Pode ser?
Oi Thiago, é uma solução dessa que estou procurando. Já vi em outro hotspot em que o cliente se conecta na rede, já navega na página do hotspot e lá tem as opções de planos para se cadastrar, ele escolhe o plano de acesso e quando clica em comprar, é direcionado para outra página com formulário para preencher os seus dados para pagamento, seja por cartão de crédito ou pagseguro. Como seria possível fazer essa implementação em uma página de hotspot?
Grande abraço.
Hayttle
Hayttle, a essência é quase a mesma. O que muda é a página de cadastro que terá que alterá-la para funcionar dessa forma. Lembrando que essa página de cadastro deve ficar em outro servidor, pois a programação dentro do hotspot não é permitida de acordo com esse contexto. Se você souber um pouco de programação dá para fazer essa página tranquilamente. Então você publica esse formulário em alguma servidor de aplicação e faz as devidas configurações no hotspot para ir a essa página.
Boa dia Thiago.
Gostei muito do seu tutorial. Mas mesmo que ele esteja mastigadinho eu to apanhando pakas.. Não tenho conhecimento em ASP. Teria como me enviar esta página pronta e programada, se nao for um abuso meu te pedir isso!? Segue e-mail, se possível: maranhao_net@hotmail.com
eu fechei um contrato com uma escola pra colocar paginas de login,para os alunos naum mecherem na internet porque eles usam a opção de mostrar senha da internet no windows 7, mais como eu naum entendo muito disso vou direto ao ponto,
eu moro a uns 700 km da escola e ja sei instalar o servidos mikrotik em um pc com duas placas de redes e distribuir a internet pra naum haver fraude eu queria criar uma pagina apenas para um usuario em especifico pra adcionar e exclui usuarios do sistema, e colocar tambem na pagina de login a opção do proprio usuario alterar a sua senha, com dados do tipo de pergunta secreta e tal, seria possivel isso
Diego, é possível sim. Todos os dados que são armazenados no Hotspot podem ser manipulados via API. Quanto à pergunta secreta não sei se será possível porque acho que esse dado não pode ser armazenado no cadastro a não ser que utilize um banco de dados à parte para realizar isso.
Me da uma ajuda aí eu nao tenho um sistema pronto que cadastra pppoe no mysql e tudo mais, só nao consigo essa integracao direta com mk porque nao sei uma usar esse api, me da um help ai. Quando crio um aplicacao agente joga na pasta bim alguma possivel dll tipo a do mysql porexemplo e essa api? Programa com c#. Meu e-mail maicon.tab10@gmail.com
nick-rj você pode fazer isso tanto com ASP.NET quanto PHP, por exemplo. Na verdade, no próprio site da Mikrotik já dispõe algumas classe prontas para uso: http://wiki.mikrotik.com/wiki/Manual:API . Não precisa de DLL, apenas a classe dentro de sua aplicação.
thiago boa noite cara ...eu personalizei meu hotspot está funcionando 100% estava pesquisando e achei muito interessante esse trabalho....vc poderia tbm me enviar esse material para eu poder imcrementar meu site?páginas produzidas e programadas das quais vocÊ fez e comentou com o cristhian e o maranhão sobre cadastro e também configurar para liberação pós pagamento via cartão ou boleto...abç
Tem como ser em ASP no lucar de ASP.NET?
luisecia@hotmail.com
Possível é, contudo é mais trabalhoso uma vez que na própria wiki eles não dispõe o código pronto: http://wiki.mikrotik.com/wiki/Manual:API#API_examples_in_the_Wiki . Para fazer em ASP clássico você poderia converter o código PHP ou usar o modelo em VB ou fazer uma chamada à uma biblioteca compilada em C#. Infelizmente não tenho o código convertido :(
Ólá Thiago,
Seu artigo ficou muito bom, e dessa forma (com um servidor separado para cadastro) abre-se um leque de possibilidades. Gostaria de fazer uma pergunta:
Eu consigo fazer o código para autenticação em bash?
Desde ja agradeço!
Ola Tiago, primeiramente gostaria de parabeniza-lo pelo post é um excelente material e de grande valia.
Eu estou com um caso na mãos e não seu como seguir pois prestamos serviços sociais aqui na nossa cidade e estamos para implementar um hotspot gratuito em alguns pontos.
Vamos utilizar apenas uma Routerboard RB433Ah como roteador e autenticação do hotspot, tenho o layout pronto da tela de login e o que preciso é que na tela de login o usuário tenha um botão cadastrar, onde ele fará um cadastro simples, com usuario, senha, nome completo, Rg e telefone.
Após cadastrado o sistema já libera ele automaticamente pra fazer o seu login que acabou de fazer.
Vc tem algum modelo nesse esquema que pode me passar por email
Se for o caso eu compro de vc claro que se não for muito caro, já que uma vez estamos fazendo isso de graça também..
Meu contato: antenas.megalink@gmail.com A/C André
Obrigado e fique com Deus
Thiago, Beleza... Seu tutorial é extremamente jóia! valeu! Preciso só tirar uma dúvida, mas após o cliente efetuar o registro já sai navegando? como faço para que o cliente primeiro faça o cadastro e depois que pagar possa navegar?!
Daniel, só fiz a parte mesmo do cadastro. A autenticação não fiz, pois depois do cadastro volto para a tela de autenticação do próprio hotspot (já que ele tem tudo já pronto para fazer o login).
Para fazer o login automático após o cadastro, teria que dar uma olhada na documentação para ver se há algum comando que já envie para o Mikrotik que o usuário já está logado no sistema (o que acho que deve ter). E quanto ao pagamento, você pode fazer de várias formas. O que sugiro é que redirecione o cliente a uma tela de pagamento, a princípio, e que, após efetuado, volte ao cadastro dele. Aí será um bocadinho de código a ser feito :)
Excelente tutorial, pesquisei demais até encontrar esse que me foi muito esclarecedor.
Se puder me tirar umas duvidas ficarei agradecido.
- Dá pra deixar a pagina de cadastro dentro do hotspot ao invés de usar um servidor externo?
- Tem como definir que o login precisa ser criado com nome, e-mail válido, cpf, endereço, telefone, data nascimento? Não precisa confirmar o e-mail, somente evitar que coloquem coisas absurdas como palavrão.
- Tem como receber os e-mails cadastrados em um e-mail particular da empresa? Usaremos estes e-mails para futuras divulgações sem caracterizar spam.
- Na segunda vez que o usuário acessar o hotspot, ele já utilizar o login existente, sem necessitar de novo cadastro e ter opção de recuperar senha.
Se puder me ajudar, mesmo que cobre pra isso! cleber@megalinkti.com.br
Cleber, dentro do Mikrotik creio que não é possível devido ao seu framework próprio. Comentei com alguns amigos e a solução encontrada é a utilização dessa integração que ele permite, apenas. Para criação do login, os campos a serem preenchidos devem ser os mesmos que que o hospot coleta (não pode ter um campo que ele não permite, a menos que adicione em observação ou que seja enviada por e-mail).
A cada cadastro é possível enviar um e-mail com informações do cadastro, sem problemas, a menos, como disse anteriormente, que a aplicação esteja em um servidor cuja linguagem de programação suportada realize tal função.
Só não sei te confirmar a opção de recuperação de senha. Se o hotspot permitir tal comando via linha de comando, basta implementar a chamada. Veja se as respostas ajuda e qualquer coisa é só entrar em contato. Abs
teriqa como enviar pagina de cadastro amytibia@hotmail.com
Thiago Marçal, você tem alguma páginas ja produzida e programada para cadastro se tiver você pode me passar.
luanrafael@outloo.com
Excelente descrição!
Estarei colocando-a em funcionamento hoje em meu mikrotik...
Parabéns!
Thiago, já fiz todos os procedimentos já consigo acessar o MK, tbm fiz um formulário para preenchimentos dos dados dos clientes e jogar para o MK e funfou certinho. Depois fui preparar a página do hotspot, coloquei o link para cadastro conforme havia falado, mas toda vez que clico no link de cadastro ele tenta carregar o formulário, mas me redireciona novamente para a página de login do MK.
Só consigo acessar essa página de cadastro depois que faço login. Os endereços de IP para redirecionar a página estão corretos.
VC teria alguma ideia do que pode estar acontencendo???
Muito bom, vou trabalhar aqui para interpretar isso.
Thiago, pode me dar um help!
Seguinte, estou desenvolvendo uma aplicação em asp.net para autenticar usuários, porém acredito que precise enviar alguma informação para o mikrotik para liberar esse acesso para navegar, você sabe o que devo fazer para liberar esse acesso?
Obrigado,
Muito bom seu tutoria.
Gostaria de saber como posso fazer se o servidor for externo
seria otimo se fizesse um video repetindo este processo para auxiliar aos leigos no assunto :)
Por aí e difícil achar um conteúdo desse tão rico em informacoes. A maioria q já vi por ai a resposta é sempre a mesma (mkauth já faz tudo isso é blablabla), as pessoas devem entender que todos fixado por tecnologia quer botar a mão na massa e fazer acontecer para o conhecimento e não usar sistemas prontos mastigado como (MKauth). Parabéns Thiago continue assim propagando conhecumento. um abraço.
Em breve irei fazer outro artigo e disponibilizarei o código fonte. Há vários e-mails pedindo exemplos de integração.
Thiago boa tarde, estou com duvidas na hora de integrar a API, e só copiar o codigo do site da MK criar uma classe no asp.net e colar o codigo?
att,
Allan, você precisa criar uma página (ou uma aplicação) em ASP.NET com utilizando a classe MK. O método utiliza essa classe para realizar as ações.
Thiago boa noite, então eu criei uma aplicação em mvc porem não consegui integrar essa classe. Para ser sincero nao faço ideia de como efetuar esta integração e embora tenha pesquisado bastante obtive muito pouco material sobre integração com o MK.
Poderia enviar por favor o Cod fonte para Wellerson23@hotmail.com
Allan, disponibilizei uma aplicação teste de como é realizado.
Olá achei este post muito bom,deu para intender quase tudo somente quando chego na parte da programação asp que buguei,ainda sou nub nessa area, gostaria de ver com vc se tem como vc criar uma pagina de cadastro somete com o campo de user e pass e o botão para enviar em php, o resto eu ja consigo fazer, vc pode esta entrando em contato pelo o danielvcr_pessoal@outlook.com se precisa passo meu whats por lá. Des de já obrigado!
Daniel, dê uma olhada no código que disponibilizei aqui http://thiagomarcal.blogspot.com.br/2016/09/implementacao-do-aspnet-c-com-o.html.
Quanto em PHP posso tentar disponibilizar uma versão depois.
alguem me ajuda a implementar a classe php no mikrotik
Postar um comentário