为了和谐,为了兰兰的高清炮,领导们决定彻底地、持续地查一下用户服务器上的网站域名情况。之前已经到用户服务器上都检查过一遍,把WEB服务配置的虚拟主机倒腾出来一份,为了彻底断了高清炮的后路,防止用户瞒报网站,决定sniffer。当然还是自己动手丰衣足食,打算用TCPDUMP抓HTTP头的办法。
装了台linux的机器,一个网口做抓包,一个网口管理用。我的任务是把用户机器上有的网站尽可能地挖出来,然后交给大能的人肉检查组去检查是否备案和内容情况。TCPDUMP是现成的,其余全部脚本实现。
三层交换机用的是T64G,本来想在上联的几个GE口上做抓包的,可惜……还是和以前的情况一样,设备性能上有问题,把几个上联口的inbound流量镜像到一个千兆电口上,T64G立马就不爽了,下面的业务开始有丢包,拆掉镜像,立即恢复。
还是只能把几个需要重点关注的用户的下联百兆口镜像到一个千兆口上。外来访问WEB服务器的HTTP请求,对于设备上的下联端口来说,是TX流量,RX流量我不关心。
T64G上的大致配置片段:
interface fei_2/1
description to AAAAAAAAA
negotiation auto
switchport access vlan 2
switchport qinq normal
monitor session 1 source direction tx
interface fei_2/2
description to BBBBBBBBB
negotiation auto
switchport access vlan 3
switchport qinq normal
monitor session 1 source direction tx
……
interface gei_2/48
description mirrorport
negotiation auto
switchport access vlan 1
switchport qinq normal
monitor session 1 destination
当然先得创建一个monitor session 1。没问题的话,show monitor session 1应该能有看到当前的镜像情况。
接下来就是linux的简单脚本了,我也不是很熟悉shell的编写,胡乱写了几句,貌似能达到目的,过程中不断地搜不断地猜不断地试。脚本很粗糙,在内行看来甚至是很雷的。
机器开起来的时候,自动运行
tcpdump -i eth1 dst port 80 -A -s0 |grep 'Host: ' >> /home/www/temp/sniff.log 2>&1 &
然后就是定时运行以下动作:
1、先用logrotate搞一把那个sniff.log
2、然后对搞出来的sniff.log.1处理一下
cat /home/www/temp/sniff.log.1 |awk '{print $NF}' | sed "s/\ //" | sed "s/\^M//" >> /home/www/temp/sniff.tmp
cat /home/www/temp/sniff.tmp | grep -v 'Host:'| sed "s/\^M//" |sort -u >/home/www/temp/sniff.tmp1
rm -f /home/www/temp/sniff.tmp
mv /home/www/temp/sniff.tmp1 /home/www/temp/sniff.tmp
\cp -f /home/www/temp/sniff.tmp /home/www/domains/domains.txt
图方便,装了个nginx,根目录指到/home/www/domains,就可以直接在页面上看到当前的结果了。

订阅我的BLOG(RSS)