Мне нужна помощь в компиляции php-скрипта, который будет извлекать данные учета IP с моего маршрутизатора MikroTik и сохранять их в базе данных sql.
На MikroTik учет IP отображается на веб-порт в cgi например. Http: // routerip: Webport / учет / ip.cgi
После каждого запроса к ip.cgi роутер автоматически очищает все данные.
На ip.cgi отображаются данные:
196.10.52.57 192.168.1.60 456 6 * *
157.240.1.32 192.168.2.16 612 6 * *
192.168.1.23 38.90.226.38 2124 15 * *
23.21.244.249 192.168.1.23 6219 13 * *
157.240.1.18 192.168.1.23 9881 27 * *
192.168.1.23 23.21.244.249 1987 20 * *
Первый ip — это адрес src, второй ip — это адрес dst, следующее число — это переданные байты, а последнее число — это переданные пакеты. Звезды не нужны, я даже не знаю, для чего они.
У меня есть этот код для подключения к базе данных, но я не могу понять, как получить информацию со страницы ip.cgi и сохранить ее в базе данных.
<?php
$SQLserver = "localhost";
$SQLusername = "root";
$SQLpassword = "sqlpassword";
$SQLdatabase = "sqldatabase";$RouterIP = "192.168.1.1";
$WebPort = "81";
$AccountingLocation = "accounting/ip.cgi";
$routerconnect = "http://$RouterIP:$WebPort/$AccountingLocation";
$orig = file_get_contents($routerconnect);
$a = htmlentities($orig);
$conn = mysqli_connect($SQLserver, $SQLusername, $SQLpassword,
$SQLdatabase);
if (!$conn) {
die("Could not connect: " . mysqli_connect_error());
}
$sql = "INSERT INTO accounting (src_address, dst_address, bytes, packets)
VALUES ('1.1.1.1', '2.2.2.2', '3', '4')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
Я добавлю этот php-скрипт в задание cron, которое будет запускаться каждые 5 минут для хранения учетных данных для моей сети OSPF, все учетные записи выполняются на моем основном маршрутизаторе mikrotik.
Как только вы извлекли данные с file_get_contents()
в ваш $orig
переменная, вам нужно разобрать это:
foreach ( explode( "\n", $orig ) as $line ) {
if ( trim( $line )) {
list( $src, $dst, $bytes, $packets ) = explode( ' ', trim( strip_tags( $line )));
// Now $src, $dst, $bytes, and $packets contain your data
$sql = "INSERT INTO accounting (src_address, dst_address, bytes, packets) VALUES ('$src', '$dst', '$bytes', '$packets')";
// Then the rest of your code to execute the query goes here
}
}
Это разбьет результат на отдельные строки, а затем разбьет строки на части (при условии, что части разделены пробелами, как кажется, в вашем вопросе). Оттуда вы можете обработать часть SQL, которую вы уже написали.
Проверьте в документации для list
для получения дополнительной информации о том, что там происходит.
Других решений пока нет …