首先是一段shell脚本。它会每隔30秒钟访问一下论坛(比如Dizcuz!)的在线用户列表,然后从列表中读取出在线用户的行为,并做记录。
#!/bin/sh while true; do wget "http://www.example.com/member.php?action=online" -O - | sed -n '/<table summary=""/,/<\/table>/ p' | sed -n '12~1p' | sed 's/<\/\?\(a\|div\|table\|h1\|thead\|tbody\|td\)[^>]*>\|<tr>\|^\s*\|\r//g' | awk -F ' \n' -v RS='</tr>\n+' '{ printf "%15s | %5s | %16s | %30s | %s\n", $1, $2, $3, $4, $5 }' >>surveillant.log sleep 30 done上面这个程序有个问题,查看在线用户本身也是一个用户操作,这样就会使得那个列表中大量充斥着匿名用户访问用户列表的记录,让人产生怀疑。好在首页也有显示在线用户的功能,这样还是通过首页读取数据更不容易被察觉,哈哈。以下就是用这种方式实现的php程序:
<?php $f = file_get_contents('http://www.example.com'); $f = iconv("gbk", "utf8", $f); preg_match('@<ul class="userlist">(.*?)</ul>@is', $f, $m); preg_match_all('@<li title="(.*?)">.*?<a.*?>(.*?)</a>@is', $m[1], $m, PREG_SET_ORDER); $s = ""; foreach ($m as $i) { $s .= date('Y-m-d H:i:s'); $s .= ' | '; $s .= $i[2]; $s .= preg_replace('/\s*\n?.*: /', ' | ', $i[1]); $s .= "\n"; } file_put_contents("surveillant.log", $s, FILE_APPEND);
- labrador's blog
- 10731 次点击
发表新评论