Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mikrotik API ROS6

Mikrotik API ROS6

PHP Version License

Complete, universal PHP client for Mikrotik RouterOS v6 API via Socket Protocol (Port 8728). Framework-agnostic with zero external dependencies.

Features

  • Universal API Client — Execute ANY RouterOS command, not just a pre-defined subset
  • Dual-Mode Login — Auto-detects MD5 Challenge (pre-v6.43) and Plaintext (post-v6.43)
  • Zero Dependencies — Only built-in PHP functions (stream_socket_client, md5, chr, ord)
  • Framework-Agnostic — Works with PHP Native, Laravel, CodeIgniter, Symfony, or any PHP framework
  • SSL Support — Connect via port 8729 with SSL encryption
  • Auto-Retry — Configurable connection retry attempts with delay
  • Auto-Parsing — Raw Mikrotik responses converted to structured PHP arrays

Requirements

  • PHP >= 8.2
  • Network access to Mikrotik router on port 8728 (or 8729 for SSL)

Installation

Via Composer (Recommended)

composer require mivodev/mikrotik-api-ros6

For Laravel Projects

Use the Laravel wrapper instead, which provides ServiceProvider, Facade, and .env configuration:

composer require mivodev/laravel-mikrotik-api-ros6

Quick Start

<?php

use Mivo\MikrotikRos6\Client;

$api = new Client();
$api->connect('192.168.1.1', 'admin', 'password');

// Get router identity
$identity = $api->comm('/system/identity/print');
print_r($identity);

$api->disconnect();

Usage

Connecting to a Router

use Mivo\MikrotikRos6\Client;

$api = new Client();

// Basic connection
$api->connect('192.168.1.1', 'admin', 'password');

// Custom port
$api->connect('192.168.1.1', 'admin', 'password', 8728);

// SSL connection (port 8729)
$api->ssl = true;
$api->connect('192.168.1.1', 'admin', 'password', 8729);

Configuration Options

$api = new Client();

$api->timeout  = 3;     // Connection timeout in seconds (default: 3)
$api->attempts = 5;     // Number of retry attempts (default: 5)
$api->delay    = 3;     // Delay between retries in seconds (default: 3)
$api->ssl      = false; // Use SSL connection (default: false)
$api->debug    = false; // Enable debug output (default: false)

Executing Commands

The comm() method is the universal entry-point. It can execute any RouterOS command:

// ─── READ (print) ───────────────────────────────────
$users    = $api->comm('/ip/hotspot/user/print');
$queues   = $api->comm('/queue/simple/print');
$addrs    = $api->comm('/ip/address/print');
$secrets  = $api->comm('/ppp/secret/print');
$ifaces   = $api->comm('/interface/print');
$firewall = $api->comm('/ip/firewall/filter/print');
$dns      = $api->comm('/ip/dns/print');
$routes   = $api->comm('/ip/route/print');
$resource = $api->comm('/system/resource/print');

// ─── CREATE (add) ───────────────────────────────────
$api->comm('/ip/hotspot/user/add', [
    'name'     => 'pelanggan-baru',
    'password' => 'rahasia123',
    'profile'  => 'paket-50mbps',
]);

$api->comm('/ppp/secret/add', [
    'name'     => 'pppoe-user1',
    'password' => 'secret',
    'service'  => 'pppoe',
    'profile'  => 'default',
]);

$api->comm('/queue/simple/add', [
    'name'       => 'queue-pelanggan',
    'target'     => '192.168.1.100/32',
    'max-limit'  => '10M/10M',
]);

// ─── UPDATE (set) ───────────────────────────────────
$api->comm('/ip/hotspot/user/set', [
    '.id'      => '*1',
    'password' => 'password-baru',
]);

// ─── DELETE (remove) ────────────────────────────────
$api->comm('/ip/hotspot/user/remove', [
    '.id' => '*1',
]);

// ─── SYSTEM OPERATIONS ─────────────────────────────
$api->comm('/system/reboot');
$api->comm('/system/identity/set', [
    'name' => 'Router-Mivo',
]);

Filtering & Queries

Use the ? prefix on keys to filter results:

// Filter by exact value
$activeUsers = $api->comm('/ip/hotspot/active/print', [
    '?user' => 'pelanggan-baru',
]);

// Filter PPPoE secrets by service type
$pppoeOnly = $api->comm('/ppp/secret/print', [
    '?service' => 'pppoe',
]);

// Filter by profile
$premium = $api->comm('/ip/hotspot/user/print', [
    '?profile' => 'paket-premium',
]);

Regex Filtering

Use the ~ prefix for regex-based filtering:

// Find users whose name matches a pattern
$matched = $api->comm('/ip/hotspot/user/print', [
    '~name' => 'pelanggan-.*',
]);

Response Format

All responses are returned as structured PHP arrays:

$users = $api->comm('/ip/hotspot/user/print');

// Returns:
// [
//     ['.id' => '*1', 'name' => 'admin', 'profile' => 'default'],
//     ['.id' => '*2', 'name' => 'pelanggan1', 'profile' => 'paket-50mbps'],
// ]

foreach ($users as $user) {
    echo $user['name'] . '' . $user['profile'] . "\n";
}

Error Handling

use Mivo\MikrotikRos6\Client;
use Mivo\MikrotikRos6\Exceptions\MikrotikException;

$api = new Client();

try {
    $api->connect('192.168.1.1', 'admin', 'wrong-password');
} catch (MikrotikException $e) {
    echo "Connection failed: " . $e->getMessage();
}

try {
    $result = $api->comm('/nonexistent/command');
} catch (MikrotikException $e) {
    echo "Command failed: " . $e->getMessage();
}

Debug Mode

Enable debug mode to see all sent and received words:

$api = new Client();
$api->debug = true;
$api->connect('192.168.1.1', 'admin', 'password');

// Output:
// Connection attempt #1 to 192.168.1.1:8728...
// <<< [/login]
// <<< [=name=admin]
// <<< [=password=password]
// >>> [!done]
// Connected and authenticated.

Architecture

src/
├── Client.php                   # Main client — connect, disconnect, comm
├── Contracts/
│   └── ClientInterface.php      # Universal interface (shared with ROS7)
├── Protocol/
│   ├── WordEncoder.php          # Encode word length → binary prefix
│   ├── WordDecoder.php          # Decode binary prefix → word from socket
│   └── Authenticator.php        # Dual-mode login (MD5 + plaintext)
├── Parser/
│   └── ResponseParser.php       # Raw socket words → PHP arrays
└── Exceptions/
    └── MikrotikException.php    # Structured error handling

References

This package was built using the following references:

License

MIT License. See LICENSE for details.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages