在这里寻求一些帮助。 我试图解析空格分隔的文本文件,并创建一个多维数组。数据文件是Apache2日志文件,但经验适用于许多文本文件。
我尝试做的是读取记录(一行),然后: 1.提取源IP地址。 2.检查之前是否已经看过此IP地址。 3.提取数据包的目标端口。 4.总结此IP地址将数据包发送到此端口的次数。
概念上说:
SRC-IP PORT SUM
-----------------------------------
111.222.111.222 - 22 - 3次
232.1.45.8 - 23 - 23次
- 80 - 1次
- 5353 - 2次
217.163.132.190 - 23 - 12次
我可以打开文件并解压缩源ip,检查以确保它是唯一的,如果是,则将其放入数组中。我无法弄清楚如何添加目标端口,作为阵列中的第二个字段,更不用说如何将所述目标端口的计数添加为数组中的第三个字段。 我在www.php.net上找到的所有例子都过于简单,基本上只是手工填充多维数组。似乎没有显示如何创建多维数组,然后解释如何以编程方式填充维度。
以下是脚本: `
if (($handle = fopen("firewall", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) {
if(!in_array($data[8], $src_ip)){
array_push($src_ip, $data[8]);
}
foreach($data as $value){
if(strstr($value, $dest_port)){
// --> where I'm stuck array_push($src_ip[][], $value);
print($data[8]). " ";
print($value)."\n";
}
}
$row++;
}
}
fclose($handle);
$unique_ip = count($src_ip);
print("$row dropped packets from $unique_ip unique ip addresses.\n");
?>`
这是输出的最后一行: 1154从302个唯一的IP地址中丢弃了数据包。
如果我正在使用的数据块有用,请告诉我。 它只是一个防火墙日志。
任何帮助都将不胜感激。 干杯, 特里。
答案 0 :(得分:0)
更新:
if (($handle = fopen("firewall", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) {
if (!isset($src_ip[$data[8]])) {
$src_ip[$data[8]] = array();
}
foreach ($data as $value) {
if (strstr($value, $dest_port)) {
if (!isset($src_ip[$data[8]][$value]))
$src_ip[$data[8]][$value] = array('count' => 0);
$src_ip[$data[8]][$value]['count'] += (int)$THIS_ROWS_COUNT;
print($data[8]) . " ";
print($value) . "\n";
}
}
$row++;
}
}