IP 会计到 SQL 数据库

IP Accounting to SQL Database

我需要帮助编译一个 php 脚本,该脚本将从我的 MikroTik 路由器获取 IP 统计数据并将其存储到 sql 数据库中,

在 MikroTik 上,IP 计费显示在 cgi 的 Web 端口上,例如。 http://routerip:webport/accounting/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);

?>  

我将每 5 分钟将此 php 脚本添加到 运行 的 cron 作业中,以存储我的 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 的文档,了解有关那里发生的事情的更多信息。