Programming &/Server & OS

Linux 에서 쉘스크립트 php스크립트를 이용하여 접속IP별 카운팅 및 로그보기

마법눈 2009. 6. 29. 13:59

간간이 아파치 로그를 체크하여 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 로 콱 막아버렸다.

좀 허접스러워 보이긴해도 그냥 나름은 유용하게 잘 쓰고 있다.
각각 수동으로 처리해야하는게 좀 문제긴하다.

좀 더 유연하게 사용가능하도록 만들어보는것도 괜찮을듯...