我正在寻找某种PHP代码来扫描我的"WHERE (
CAST(" + MySQLiteHelper.COLUMN_GAS_CREATE_DATE + " AS INT)/1000 >= CAST(strftime('%s', date('now','start of month')) AS INT)
AND
CAST(" + MySQLiteHelper.COLUMN_GAS_CREATE_DATE + " AS INT)/1000 < CAST(strftime('%s', date('now','start of month','+1 month')) AS INT)
)";
来过滤破解尝试。以下是一些需要搜索并仅获取IP地址的字符串示例。我使用/var/log/secure
作为IP地址的示例,而不是实际的IP。
0.0.0.0
答案 0 :(得分:1)
根据OP在this comment中提供的其他信息,我决定重做我的回答。所以;
$file=file_get_contents("/var/log/secure");
$lines=explode("\n",$file);
$accepted=array();
$fail=array();
$r="/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/";
foreach($lines as $line){
//try to get the ip
$t=array();
preg_match($r,$line,$t);
$ip=$t[0];
if(strpos($line,"Accepted password")!==FALSE){
//Successfull login
$accepted[]=$ip;
}
else{
//failed login attempt
$fail[]=$ip;
}
}
现在$accepted
包含所有已成功登录的IP,以及$fail
所有未登录的IP。
我希望这会对你有所帮助。
答案 1 :(得分:0)
首先,欢迎来到StackOverflow。
您正在寻找的是preg_match_all
与正确的正则表达式相结合。
$subject=file_get_contents("/var/log/secure");
$pattern="/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/";
preg_match_all($pattern,$subject,$matches);
在此之后,$matches
将包含文档中所有IP的列表。
答案 2 :(得分:0)
这是我用来解析日志的PHP脚本
$file=fopen("/var/log/secure", "r");
$ipDateArray=array();
$i=0;
while($line=fgets($file)){
$dateString='';
$ip='';
if(preg_match("/failed/i",$line)){
$lineArr=preg_split('/\s+/', $line);
if(count($lineArr)==15){
$dateString=$lineArr[0]." ".$lineArr[1]." ".$lineArr[2];
$ip=$lineArr[10];
$ipDateArray[$ip]=$dateString;
}
}
unset($ip);
$i++;
}
当然,您必须稍微修改一下结构。我的想法是逐行解析,使用failed
查找关键字preg_match
,并将字符串拆分(类似于爆炸函数)到数组条目中。
由于日志文件的条目模式几乎相同,因此您只需访问阵列的相同索引即可获得IP。在我的情况下,$lineArr[10]
保存日志文件中每个条目的IP地址,以便尝试失败。
希望这会有所帮助,让您对如何解析日志有所了解。