#  > Desenvolvimento >  > Linguagens de Programação >  >  Mikrotik API + PHP + Mysql

## muriloc4

Ola Amigos, vi que no wiki do mikrotik tem uma API para php
mas não estou conseguindo fazer a API consultar o ip, usuario e senha no banco de dados sql. alguem ja fez isso o exeplo segue abaixo:
(retorna o erro : Connection attempt #1 to $ip:8728... Connection attempt #2 to $ip:8728... )
se alguem sabe como fazer por SSH, a comunicação php-mikrotik me deixe pelo menso um link pora favor.


$API = new routeros_api();
$API->debug = true;

//BUSCA NO BANCO DE DADOS O USUARIO
$ip= $row_mikrotik['ip'];
$login= $row_mikrotik['ip'];
$password= $row_mikrotik['ip'];


if ($API->connect('$ip', '$login', '$password')) 

grato

----------


## alexandrecorrea

por um acaso vc ativou o serviço de API no mikrotik ?

ip >> services

----------


## muriloc4

> por um acaso vc ativou o serviço de API no mikrotik ?
> 
> ip >> services


grande alexandre, esta ativado sim, tanto q se eu coloca o ip manualmente no api (php) ele funciona..add regras e etc..mas eu num quero colocar o ip, usuario e senha manual (funcionado normal). eu que q busque num DB mysql...
tipo eu crio um front end em php-mysql, coloco os dados ip,usuario, senha no campo, salvo e depois ao clica no botão add regra..a api.php busca no banco de dados ip, usuario e senha e add a regra.

lembrado...na api seu eu setar os dados funciona normal, não funciona buscando no db (uso dreamwaver)

----------


## alexandrecorrea

voce precisa fazer um select no BANCO de dados antes pra poder obter os dados de usuario e senha..

algo assim oh:


```
<?php
$ip = strip_tags($_GET['ip']);
 
$server = \"189.0.0.1\";
$user = \"usuario\";
$senha = \"senha\";
$banco = \"apimikrotik\";
$tabela = \"servidores\";
 
$db = @mysql_connect($server,$user,$senha) or die(mysql_error());
@mysql_select_db($banco,$db) or die(mysql_error());
 
$query = \"SELECT * from \" . $tabela . \" WHERE ip = ' . $ip . ' LIMIT 0,1\";
$sql = @mysql_query($query,$db) or die(mysql_error());
$total = mysql_num_rows($sql);
if ($total == 1) {
     $row = mysq_fetch_row($sql);
     $m_ip = $row['ip'];
     $m_login = $row['login'];
     $m_password = $row['password'];
     if ($API->connect($m_ip,$m_login,$m_senha))  {
          //codigo do api depois da conexao....
     }
     else { die('Erro ao conectar mikrotik'); }
}
else { die('Erro, total servidores encontrados: -> ' . $total); }
```

 
deve funcionar !! fiz aqui sem testar.. mas acho que ta ok.. 

vc precisa criar no mysql o banco de dados chamado 'apimikrotik' e a tabela 'servidores', a estrutura da tabela servidores é assim:

sid = int(11) auto_increment
login = varchar(32)
ip = varchar(15)
password = varchar(32)

ai vc cadastra os seus mikrotiks nesta tabela.. e pronto.. 

vc executa assim:

http://www.seusite.com.br/api.php?ip=192.168.33.66

onde 192.168.33.66 é o ip do mikrotik q vc precisa adicionar/remover as regras

----------


## thenet

Pessoal,

Estou precisando de alguem com certa experiencia em API para desenvolver um simples sistema de monitoramento de alguns Mikrotiks em PHP.
Por favor, quem tiver interesse em prestar esse serviço, entre em contato comigo por MP.

Obrigado.

----------


## rodrigoadachi

Estou com um servidor Apache+PHP+MySQL por fora do MK estou tendo dificuldade para conectar o API com o MK, teria que liberar algo alem da API em service para a interface externa?

Connection attempt #1 to 10.0.0.2:8728... Connection attempt #2 to 10.0.0.2:8728... Connection attempt #3 to 10.0.0.2:8728... Connection attempt #4 to 10.0.0.2:8728... Connection attempt #5 to 10.0.0.2:8728... Error...

Internet >>> Servidor >>> MK >> Clientes

Servidor: 10.0.0.1/24
MK: 10.0.0.2/24

----------


## fsoaress76

*#Adicionada ip via API*
<?php
require_once('api/Router_API_class.php');
$API = new routeros_api();
$nome = $UserName;
$ip = $ip_rede .'/30';
$interface = $ether;

$API->debug = false;
if ($API->connect($servidor_mk, $user_api, $pass_api)) { // Change this as necessery

//Adiciona ID Desabilitado
$API->write('/ip/address/add
=disabled=no
=interface='.$interface.'
=comment='.$nome.'
=address='.$ip.'');

$ARRAY = $API->read();
// print_r($ARRAY);
$API->disconnect();
}
?>

*#Remove IP via API*

<?php
//Metodo $UserName
require_once('api/Router_API_class.php');
$API = new routeros_api();
$API->debug = false;

if ($API->connect($servidor_mk, $user_api, $pass_api)) { // Change this as necessery

//Busca ID por MAC
$API->write('/ip/address/print
?comment='.$UserName.'');
$find = $API->read();

// print_r($find);
//Remove ID encontrado
foreach ($find as $find){
$API->write('/ip/address/remove', false);
$API->write('=.id='.$find['.id']);
$API->read();
}

// print_r($ARRAY);
$API->disconnect();
}
?>

*#Adciona MAC no access-list via API*

<?php
require_once('api/Router_API_class.php');

$API = new routeros_api();
$API->debug = false;

if($mac){
if ($API->connect($ip_rep, $user_api, $pass_api)) { // Change this as necessery

//Adiciona POP acess-list
$API->write('/interface/wireless/access-list/add
=forwarding=no
=disabled=no
=authentication=yes
=interface='.$pop.'
=comment='.$UserName.'
=mac-address='.$mac.'');

$ARRAY = $API->read();
// print_r($ARRAY);
$API->disconnect();
}
}
?>

----------


## betopcx

Galera, esse é o posto certo, ativo API no /ip/services do mikrotik, ok !
Após este passo não entendi como proceder, preciso fazer... criar um arquivo em php ?
Estou um pouco perdido neste início, se alguém puder me orientar neste começo !
Meu objetivo é criar um solução prática para controle interno conforme minhas necessidades! 
Qualquer tipo de ajuda será bem vinda, desde já fico grato a todos !

----------


## diegonaster

estou com o mesmo problema! a api não esta coletando informações do mysql!

----------


## fsoaress76

> Galera, esse é o posto certo, ativo API no /ip/services do mikrotik, ok !
> Após este passo não entendi como proceder, preciso fazer... criar um arquivo em php ?
> Estou um pouco perdido neste início, se alguém puder me orientar neste começo !
> Meu objetivo é criar um solução prática para controle interno conforme minhas necessidades! 
> Qualquer tipo de ajuda será bem vinda, desde já fico grato a todos !


Este script é para colocar em um arquivo php.
Nesta linha coloca o IP, User e senha do mikrotik.
"if ($API->connect($servidor_mk, $user_api, $pass_api))

----------


## Carlosaps

Desculpe a ignorância, mas qual a função deste API que está sendo postado aqui no tópico? Pelo que vi os códigos são só para conectar ao MK. 
A pergunta é a seguinte: Eu posso desenvolver em php uma página capaz de eu poder adicionar clientes, mudar planos, bloquear, etc... ??
Gostei desse tópico...

----------


## xyunamx

Bom noite, nao sei muito sobre php... mas ja tentou printar as variaveis pra ver o q esta sendo retornado do banco de dados?

o meu aki com variaveis esta funcionando

<?php
$endereco = '192.168.0.1' ;
$usuario = 'testeapi' ;
$senha = 'testeapi' ;
require('routeros_api.class.php');


$API = new routeros_api();


$API->debug = false;


if ($API->connect($endereco, $usuario, $senha)) {

----------


## andersonsilva

Galera, boa tarde.

Alguém aí sabe/tem o comando (via API) para ler um arquivo de 'file' e imprimir na tela?

----------


## netspi

Boa noite pessoal, tive uma experiência bem parecida com a do colega que iniciou o tópico, e se bem entendi ele quer que o login seja feito via MySQL ao selecionar o servidor em uma página antes, consegui fazer algo parecido, fiz um select optgroup onde o valor era o IP e o nome dado a esse valor era o nome do servidor, para que eu soubesse qual servidor eu gostaria de acessar
E funcionou perfeitamente, meu conselho é que faça o optgroup com um while do seu banco de dados com a tabela onde guardas os dados dos servidores, e tenham um usuário e senha definidos como padrão na routerboard, onde ficaria mais fácil a integração pois vc só faria a API receber o IP do servidor, pois nome e senha já estariam definidas na página que exibiria tal função desejada! Espero ter ajudado! Abraços!

----------

