Linux 에서 쉘스크립트 php스크립트를 이용하여 접속IP별 카운팅 및 로그보기
간간이 아파치 로그를 체크하여 IP별 접속수를 체크해보려니
쉘스크립트를 이용하여 리스트를 만드는 방법을 생각해봤다.
- 현재시간
time=`date +%d/%h/%Y:%H`
- 1시간전
time=`date +%d/%h/%Y:%H -d '-1hours'`
- 하루전
time=`date +%d/%h/%Y:%H -d '-1days'`
예)
logtoip.sh
#!/bin/sh
time=`date +%d/%h/%Y:%H -d '-1hours'`
grep ".*$time.*GET /common" /var/log/httpd/nlinux.com_access_log |grep $1 |awk '{ print $4 " " $7 }'|more
쉘스크립트를 복잡하게 이용하지 않으려다 보니 php 스크립트도 겸사겸사 이용했다.
countperip.php
#!/usr/bin/php --q
<?
$file = file("/backup/iplist.txt");
$ipList = array();
for ($i = 0; $i < count($file); $i++)
{
$ip = trim($file[$i]);
if (empty($ip)) continue;
if (array_key_exists($ip, $ipList)) $ipList[$ip]++;
else $ipList[$ip] = 1;
}
arsort($ipList);
echo "Total IP Count: " . count($ipList) . "\n\n";
print_r($ipList);
?>
머 이렇게 해보니 리스트가 너무 많아서 머리가 아프다.
그래서 이용하려니 more 문을 같이 썼다.
./logtoip.sh
./countperip.php |more
요기에다가 하나만 더 추가해보자
viewlog.sh
#!/bin/sh
time=`date +%d/%h/%Y:%H -d '-1hours'`
grep ".*$time.*GET /common" /var/log/httpd/nlinux.com_access_log |grep $1 |awk '{ print $4 " " $7 }'|more
./viewlog.sh xxx.xxx.xxx.xxx
접속이 많다고 무조건 나쁜 아이피는 아닌거 같다.
그래서 로그도 한번 봐주는 센스 ㅋ
뻘짓하는 아이피같은경우 iptables 로 콱 막아버렸다.
좀 허접스러워 보이긴해도 그냥 나름은 유용하게 잘 쓰고 있다.
각각 수동으로 처리해야하는게 좀 문제긴하다.
좀 더 유연하게 사용가능하도록 만들어보는것도 괜찮을듯...