특정문자열 취합하여 숫자를 센다음 소팅하여 출력
아래는 IP 주소를 취합하여 갯수를 센다음 소팅하고 배열에 쉽게 넣기 위해서 간단하고 급하게? 만들었던것 입니다.
쉘에서 사용하는 방법은 아래 링크를 참고하세요.
$aList = array();
$file = './wlog_lsit.txt';
$data = file_get_contents($file);
$aLine = explode("\n", $data);
for($ii=0; $ii<count($aLine); $ii++)
{
$line = $aLine[$ii];
preg_match('/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/',$line, $aMatches);
// print_r($aMatches); Exit;
$realIP = $aMatches[7];
$aList[$realIP] += 1;
}
asort($aList);
print_r($aList);
// 100개 이상의 갯수만 출력하기
$aBadIP = array();
foreach( $aList as $ip => $num ) {
if ( $num < 100 ) continue;
$ip = trim(str_replace('"', '', $ip));
$aBadIP[$ip] = $ip;
}
// 배열로 쉽게 넣어주기 위한 출력
echo "'" . implode("','", $aBadIP) . "'" . PHP_EOL;
프로그램은 간단합니다.
웹로그 파일을 읽어서 IP에 들어 있는 부분을 배열로 중복제거 하고 결과는 100개 미만인것 버리고 이상인것만 별도 출력하는 기능입니다.
* 쉘에서 IP 주소 취합하기
아파치 웹로그에서 IP주소 취합하여 정렬하는 방법 > 리눅스서버