Skip to content

Commit 1a9bc92

Browse files
committed
feat: add PPPoE and DHCP active sessions monitoring
- Fetch active PPPoE sessions with uptime and IP - Fetch active DHCP leases with hostname, IP, MAC and status - Fetch recent PPPoE logs from RouterOS - Handles empty results gracefully
1 parent f01ed74 commit 1a9bc92

1 file changed

Lines changed: 93 additions & 0 deletions

File tree

examples/pppoe_active_sessions.php

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?php
2+
3+
/**
4+
* Monitor Active Sessions (PPPoE + DHCP)
5+
*
6+
* how to fetch active PPPoE sessions,
7+
* DHCP leases and monitor user login/logout activity from MikroTik RouterOS.
8+
*/
9+
10+
require_once __DIR__ . '/../vendor/autoload.php';
11+
12+
use RouterOS\Client;
13+
use RouterOS\Query;
14+
15+
// Connect to RouterOS
16+
$client = new Client([
17+
'host' => '192.168.10.1', // router IP address
18+
'user' => 'test', // mikrotik username
19+
'pass' => 'test', // mikrotik password
20+
'port' => 8728, // API port
21+
]);
22+
23+
// ============================================================
24+
// PPPoE Active Sessions
25+
// ============================================================
26+
$pppoeQuery = new Query('/ppp/active/print');
27+
$pppoeSessions = $client->query($pppoeQuery)->read();
28+
29+
echo "Active PPPoE Sessions:\n";
30+
echo str_repeat('-', 60) . "\n";
31+
32+
if (empty($pppoeSessions)) {
33+
echo "No active PPPoE sessions.\n";
34+
} else {
35+
foreach ($pppoeSessions as $session) {
36+
echo sprintf(
37+
"User: %-20s IP: %-15s Uptime: %s\n",
38+
$session['name'] ?? 'N/A',
39+
$session['address'] ?? 'N/A',
40+
$session['uptime'] ?? 'N/A'
41+
);
42+
}
43+
}
44+
45+
echo "\nTotal PPPoE sessions: " . count($pppoeSessions) . "\n";
46+
47+
// ============================================================
48+
// DHCP Active Leases
49+
// ============================================================
50+
$dhcpQuery = new Query('/ip/dhcp-server/lease/print');
51+
$dhcpLeases = $client->query($dhcpQuery)->read();
52+
53+
echo "\nActive DHCP Leases:\n";
54+
echo str_repeat('-', 60) . "\n";
55+
56+
if (empty($dhcpLeases)) {
57+
echo "No active DHCP leases.\n";
58+
} else {
59+
foreach ($dhcpLeases as $lease) {
60+
echo sprintf(
61+
"Host: %-20s IP: %-15s MAC: %-18s Status: %s\n",
62+
$lease['host-name'] ?? 'N/A',
63+
$lease['address'] ?? 'N/A',
64+
$lease['mac-address'] ?? 'N/A',
65+
$lease['status'] ?? 'N/A'
66+
);
67+
}
68+
}
69+
70+
echo "\nTotal DHCP leases: " . count($dhcpLeases) . "\n";
71+
72+
// ============================================================
73+
// Recent PPP Logs
74+
// ============================================================
75+
$logQuery = (new Query('/log/print'))
76+
->where('topics', 'ppp');
77+
78+
$logs = $client->query($logQuery)->read();
79+
80+
echo "\nRecent PPPoE Logs:\n";
81+
echo str_repeat('-', 60) . "\n";
82+
83+
if (empty($logs)) {
84+
echo "No PPPoE logs found.\n";
85+
} else {
86+
foreach (array_slice($logs, -10) as $log) {
87+
echo sprintf(
88+
"[%s] %s\n",
89+
$log['time'] ?? 'N/A',
90+
$log['message'] ?? 'N/A'
91+
);
92+
}
93+
}

0 commit comments

Comments
 (0)