Учет IP в базе данных SQL

Мне нужна помощь в компиляции 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.

0

Решение

Как только вы извлекли данные с 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 для получения дополнительной информации о том, что там происходит.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]