1. IP별 접속 분석 (Apache)
1. 아파치접속로그 최근 1만건을 불러와봅니다. 매우 지저분합니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | more
175.192.192.109 - - [19/May/2015:13:36:47 +0900] "GET /s
175.192.192.109 - - [19/May/2015:13:36:48 +0900] "GET /s
175.192.192.109 - - [19/May/2015:13:36:49 +0900] "GET /s
이하생략
2. cut으로 IP만 잘라봅니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\ -f 1 | more
175.192.192.109
66.249.79.215
175.192.192.109
66.249.79.191
66.249.79.191
66.249.79.191
157.55.39.13
157.55.39.13
66.249.79.191
66.249.79.161
157.55.39.13
이하생략
3. 중복되는 IP가 많네요. uniq 를 이용하여 카운트합니다. (사전에 정렬이 필요하니 sort 를 해줍니다.)
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\ -f 1 | sort | uniq -c | more
119 1.215.252.254
92 1.220.184.19
96 1.247.32.194
120 1.254.174.151
22 101.199.108.51
4 106.245.132.73
48 106.245.95.151
2 110.13.97.220
101 110.70.52.104
이하생략
4. 보기좋게 uniq의 갯수순서대로 정렬해줍니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\ -f 1 | sort | uniq -c | sort -k 1 -rn | more
661 66.249.79.215
655 66.249.79.191
545 14.34.41.41
538 118.130.93.218
429 220.87.68.140
425 175.192.192.109
351 59.6.166.11
344 211.241.59.146
332 121.182.196.219
이하생략
5. 중복되는 IP대역을 C클래스로 퉁쳐보리기위해 cut의 delimeter로 '.' 을 사용하고, 앞의 세자리만 잘라냅니다. 정렬, 카운트 후 상위 10개만 출력합니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\. -f 1,2,3 | sort | uniq -c | sort -k 1 -rn | head -n 10
1409 66.249.79
652 183.100.176
598 211.253.124
567 124.5.193
388 157.55.39
366 211.195.137
271 119.67.165
248 221.149.85
228 210.180.115
228 112.220.203
6. 혹시나싶어 앞의 두자리만 잘라서 정렬, 카운트해봅니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\. -f 1,2 | sort | uniq -c | sort -k 1 -rn | more
1874 66.249
508 211.241
508 118.130
467 121.182
429 220.87
367 157.55
318 203.252
이하생략
7. IP를 3자리 끊어서 카운팅한 목록에 ".0" 을 붙여서 whois정보를 조회해봅니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\. -f 1,2,3 | sort | uniq -c | sort -k 1 -rn | cut -c5-99 | sed 's/$/.0/g' | xargs whois | egrep -i "cidr|netname|inetnum" | more
whois: connect(): No route to host
CIDR: 66.249.64.0/19
NetName: GOOGLE
CIDR: 121.0.0.0/8
NetName: APNIC-121
inetnum: 121.128.0.0 - 121.191.255.255
netname: KORNET
inetnum: 121.128.0.0 - 121.159.255.255
netname: KORNET-KR
8. 간단히 아래 두줄의 스크립트로 정리가능합니다. (두개의 파일에 결과출력 -> log_analysis_top10, log_analysis_top10_whois)
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\. -f 1,2,3 | sort | uniq -c | sort -k 1 -rn | head -n 10 > log_analysis_top10
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\. -f 1,2,3 | sort | uniq -c | sort -k 1 -rn | head -n 10 | cut -c5-99 | sed 's/$/.0/g' | xargs whois | egrep -i "cidr|netname|inetnum" > log_analysis_top10_whois
'Unix' 카테고리의 다른 글
구형맥미니 Macos USB제작, 클린설치 (0) | 2017.07.11 |
---|---|
awk 칼럼 바꾸기 (sed) (0) | 2017.02.22 |
[cygwin] crontab 설정문제 (0) | 2016.12.08 |
Centos 디스크 복제 및 grub 복구 (0) | 2014.10.29 |
gzip 압축률 테스트 및 선택 지표 (0) | 2014.07.28 |
댓글