获取字符串中的IP地址

时间:2015-04-24 20:12:00

标签: php regex search

我正在寻找某种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

3 个答案:

答案 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地址,以便尝试失败。

希望这会有所帮助,让您对如何解析日志有所了解。