Я сделал очень простой PHP-скрипт для отображения зарегистрированных клиентов, их MAC-адресов, уровня сигнала и подключенного интерфейса. Улучшения последуют, я надеюсь. Поместите код в PHP-файл где-нибудь в директории вашего веб-сервера Apache. Убедитесь, что snmpwalk и snmpget установлены в вашей системе, SNMP включен в RouterOS, и что $snmpwalk и $snmpget настроены правильно (где находится snmpwalk).
<?php
/*
TODO:
- Использовать модуль SNMP для Apache
- Таблица SQL над MAC-адресами
- Автоматическое обновление
- Выбор одного клиента
- Когда клиент выбран, отправлять трафик на него (ping/и т.п.), чтобы уровень сигнала обновлялся чаще
- Сообщения об ошибках
*/
/*
Протестировано на Debian Sarge со следующими пакетами:
- Apache 1.3.26-0woody6
- PHP 4.1.2-7.0.1
- net-snmp 5.1.1-2
*/
/* установите эти значения в соответствии с вашей средой. */
$snmpwalk = "/usr/bin/snmpwalk";
$snmpget = "/usr/bin/snmpget";
?>
<html >
<head>
<title>Mikrotik linktest</title>
</head>
<body >
<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="post">
IP Mikrotik AP:
<input type="text" maxlength="15" name="ip" value="<?php echo $_POST['ip']; ?>">
SNMP Community:
<input type="password" name="password" value="<?php echo $_POST['password']; ?>">
<input type="submit" name="submitted" value="Проверка соединения!">
</form>
<?php
if ($_POST['submitted']) {
/* Открыть tmp файл - открыть snmp соединение - бла бла бла */
/* Код/идеи позаимствованы из freeradius-dialupadmin. */
$server = escapeshellcmd($_POST['ip']);
$community = escapeshellcmd($_POST['password']);
$tmp_file = tempnam('/tmp/','LT');
$command_clients = $snmpwalk . " -v 1 -c $community $server .1.3.6.1.4.1.14988.1.1.1.2.1.3" . ' >' . $tmp_file;
$filepointer = popen("$command_clients","w");
pclose($filepointer);
$reply = file($tmp_file);
unlink($tmp_file);
$int = 0;
echo <<< EOM
';
}
?>
</body >
</html >
<?php
/*
TODO:
- Использовать модуль SNMP для Apache
- Таблица SQL над MAC-адресами
- Автоматическое обновление
- Выбор одного клиента
- Когда клиент выбран, отправлять трафик на него (ping/и т.п.), чтобы уровень сигнала обновлялся чаще
- Сообщения об ошибках
*/
/*
Протестировано на Debian Sarge со следующими пакетами:
- Apache 1.3.26-0woody6
- PHP 4.1.2-7.0.1
- net-snmp 5.1.1-2
*/
/* установите эти значения в соответствии с вашей средой. */
$snmpwalk = "/usr/bin/snmpwalk";
$snmpget = "/usr/bin/snmpget";
?>
<html >
<head>
<title>Mikrotik linktest</title>
</head>
<body >
<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="post">
IP Mikrotik AP:
<input type="text" maxlength="15" name="ip" value="<?php echo $_POST['ip']; ?>">
SNMP Community:
<input type="password" name="password" value="<?php echo $_POST['password']; ?>">
<input type="submit" name="submitted" value="Проверка соединения!">
</form>
<?php
if ($_POST['submitted']) {
/* Открыть tmp файл - открыть snmp соединение - бла бла бла */
/* Код/идеи позаимствованы из freeradius-dialupadmin. */
$server = escapeshellcmd($_POST['ip']);
$community = escapeshellcmd($_POST['password']);
$tmp_file = tempnam('/tmp/','LT');
$command_clients = $snmpwalk . " -v 1 -c $community $server .1.3.6.1.4.1.14988.1.1.1.2.1.3" . ' >' . $tmp_file;
$filepointer = popen("$command_clients","w");
pclose($filepointer);
$reply = file($tmp_file);
unlink($tmp_file);
$int = 0;
echo <<< EOM
| Клиент | MAC | сигнал(dBm) | Интерфейс |
|---|---|---|---|
| $int | " . dechex($oid_splitted[8]) . ':' . dechex($oid_splitted[9]) . ':' . dechex($oid_splitted[10]) . ':' . dechex($oid_splitted[11]) . ':' . dechex($oid_splitted[12]) . ':' . dechex($oid_splitted[13]) . " | "; $dbm = explode (" ", $oid_splitted[14]); $command_interface = "$snmpget -v 1 -c $community $server ifDescr.$dbm[0]"; $interface = exec($command_interface); $interface = explode(" ", $interface); $interface = $interface[3]; echo "$dbm[3] | $interface |
}
?>
</body >
</html >
