2

统计web日志中IP访问次数

有一个大于10G的apache访问日志,要求找出访问/stat.php页面次数大于1000次的前100个IP
日志样本如下:

212.11.129.182 - [26/Mar/2015:03:00:01 +0800] "GET/stat.php?pid=016 HTTP/1.1" 302 20-"-" "-" ""Mozllia/4.0(compatible;MSIE 6.0;Windows NT 5.1)"

解析:10G的日志已经很大了,直接使用grep或者awk进行分析会很慢,对服务器内存消耗大,如果服务器配置低,可以考虑把日志切割,比如切割成100个100M的文件,然后针对这100个文件分别进行统计排名前100的IP,得出结果后合并到一个文件中,再进一步分析。
答案:

#!/bin/bash
sta(){
    grep '/stat.php' $1|awk '{print $1}' | sort -n |unic -n|sort -n|tail -100
}
logfile=/data/logs/access.log
mkdir /data/logs/tmp
cd /data/logs
# 分割成100个100M的文件
split -b 100M access.log smallfile
mv smallfile* tmp
cd tmp
# 把分割后的文件中的ip前100个计算出来
for f in `ls smallfile*`
do
    sta $f >> top100.txt
done
# 编写函数,计算每个IP出现的次数
count_sum(){
    sum=0
    for f in `ls smallfile*`
    do
        n=`grep "$1" $f|wc -l`
        sum=$[$sum+$n]
        echo $sum $1
   done
}
# 把得到的IP进行去重,作为遍历对象,把所有出现的IP次数统计出来
for ip in `awk '{print $2}' top100.txt|sort -n|uniq`
do
    count_sum $ip >> ip.txt
done
# 先把IP大于1000次的过滤出来,然后按照IP次数进行排序,得到前100个
awk '$1>1000' ip.txt|sort -nr|head -100

find命令

题:写一个脚本或者一条命令查找/var/log目录下,最后修改时间大于30天,后缀为*.log的文件并删除。
答:

find /var/log/ -mtime +30 -name "*.log" -exec rm -rf {}\;

题:写一个脚本或者一条命令将/data目录下大于100K的文件移动到/tmp目录下
答:

find /data -size +100k -exec mv {} /tmp \;

iptables

题:如何将192.168.10.2主机80端口的请求转发到172.116.10.3的8080端口?
答:

iptables -t nat -A PREROUTING -d 192.168.10.2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.116.10.3:8080

题:只允许远程主机访问本地80端口,写出iptables规则?
答:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP

网络面试题

1、划分vlan有什么作用?
2、路由器都哪些协议?路由器的作用是什么?
3、如何划分子网?
4、ping命令是用哪种协议?
5、OSPF的工作原理?
6、简述一下TCP三次握手和四次挥手?
7、我的游戏里有个页面,用户进入那个页面报网络不通或者网络缓慢,你应该怎么排查?
8、OSI七层模型分别是什么?
9、会不会思科路由器的配置命令?
10、简述一下https中的三次握手?
11、Dos攻击和DDos攻击有什么区别?


syushin
948 声望316 粉丝