간간이 아파치 로그를 체크하여 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 로 콱 막아버렸다.
좀 허접스러워 보이긴해도 그냥 나름은 유용하게 잘 쓰고 있다.
각각 수동으로 처리해야하는게 좀 문제긴하다.
좀 더 유연하게 사용가능하도록 만들어보는것도 괜찮을듯...
'Programming & > Server & OS' 카테고리의 다른 글
문자열, 파일, 디렉토리 찾기 (find와 grep활용) (0) | 2009.11.06 |
---|---|
리눅스에서 내가 원하는 프로세스를 죽이자!! (0) | 2009.10.29 |
노트북에서 106키를 101키로 변경 (0) | 2009.08.31 |
Windows7 RC 7100에서 7264로 업그레이드 (0) | 2009.07.10 |
새로설치된 서버에서 기존서버의 하드디스크 LVM 인식 (0) | 2009.07.04 |