百独托管7500 紫田网络超高转化播放器收cps[推荐]速盾CDN 免实名免备防屏蔽阿里云 爆款特卖9.9元封顶提升alexa、IP流量7Q5团队
【腾讯云】中小企福利专场【腾讯云】多款产品1折起高防 随时退换 好耶数据小飞国外网赚带你月入万元炎黄网络4H4G10M 99每月
香港带宽CN2/美国站群优惠中客数据中心 服务器租用联盟系统移动广告平台 中易企业专场腾讯云服务器2.5折九九数据 工信部正规资质
腾讯云新用户大礼包代金券高价收cpa注册量高价展示【腾讯云】2核2G/9.93起租服务器找45互联 随时退换阿里云 短信服务 验证秒达

[闲聊畅谈] 分享些工作上的经验,[机房自动检测域名/检测备案/自动白名单] 二 自制流量分析系统 [复制链接]
查看:224638 | 回复:35

141

主题

1万

帖子

1万

积分

落伍者(四季发财)

[专业PHP解码][IDC]

Rank: 4

贡献
2035
鲜花
53
注册时间
2003-7-22

QQ绑定落伍手机绑定

发表于 2012-9-21 12:17:14 | 显示全部楼层 |阅读模式 来自 中国江苏宿迁
本帖最后由 Bendy 于 2012-9-22 20:28 编辑

接上文

分享些工作上的经验,[机房自动检测域名/检测备案/自动白名单]  
一  核心镜像流量
二  自制流量分析系统
三  自动检测备案信息

第一步将相应流量通过监控端口流到监控机...
但我们没有专业的监控..分析...
结合我们的实际情况..(本人并不专长于数据流量分析)
我选择了一台性能较好的品牌机进行处理.
需要双网卡...而且是千兆的..
安装使用LINUX系统(我用CENTOS 6.2 64BIT)
机器物理接法是...网卡eth0接公网.配置管理IP.   网卡eth1接监控口.不配置IP.

我也不对机器做什么优化了...就安装基本系统.
然后使用YUM 安装下面几个我们需要用到的组件.
httpd
php53
php53-mysql
mysql
mysql-server
以上几个...是为了方便管理数据库.PHP是我必须使用的程序.
screen    这个是为了后台运行.控制...
wireshark   这个是截取数据包..可以算是TCPDUMP的增强版.

然后再在/var/www/html放上phpmyadmin ...就可以有MYSQL管理了.

设置MYSQL密码等..

下面是主要步骤
一\    新建一个数据库..
用于保存域名信息....这个数据库比较重要.

  1. --
  2. -- 表的结构 `domain`
  3. --

  4. CREATE TABLE IF NOT EXISTS `domain` (
  5.   `id` int(5) unsigned NOT NULL auto_increment,                             
  6.   `d` varchar(32) character set utf8 NOT NULL,
  7.   `ip` varchar(16) character set utf8 NOT NULL,
  8.   `checktime` datetime default NULL,
  9.   `beiantime` datetime default NULL,
  10.   `beianhao` varchar(30) character set utf8 NOT NULL,
  11.   `beianinfo` text character set utf8,
  12.   PRIMARY KEY  (`id`),
  13.   KEY `domain` (`d`)
  14. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;
复制代码
id 是序号
d是域名
IP是对应服务器IP
CHECKTIME是域名检测更新时间.
BEIANTIME 是备案检测更新时间
BEIANHAO 备案号
BEIANINFO 备案信息

很简单的结构.


第二步, 检测程序.
我只会PHP..只好使用PHP做系统级的数据分析/操作.
/home/d.php


  1. <?php
  2. #error_reporting(-1);
  3. date_default_timezone_set("Asia/Shanghai");
  4. $pp_count=1000;     //每次截包数量
  5. while (true){    //遁环运行...
  6.         $mysql=mysql_pconnect('localhost','fuck','you');
  7.         if (!$mysql) {
  8.                 die('Could not connect: ' . mysql_error());
  9.         }
  10.         mysql_select_db("ym",$mysql);
  11.         mysql_query("SET character_set_connection='utf8', character_set_results='utf8', character_set_client=utf8",$mysql);

  12.         //run
  13.         $nnn=0;
  14.         while ($nnn < 100) {  //双循环运行..因为时间长了.MYSQL连接就会断开.会出错
  15.                 $nnn++;
  16.                 $starttimer = time()+microtime();
  17.                 $return="";$data=array();
  18.                 @exec("tshark -c $pp_count -i eth1 -T fields -e ip.addr -e http.host -e http.server 2>/dev/null",$return);  //这个是截取数据包的关键..使用外部程序操作.
  19.                 $data=implode("\n",$return);
  20.                 $i="/(\d+\.\d+\.\d+\.\d+)\s+(\S+)/";
  21.                 $m=array();
  22.                 preg_match_all($i,$data,$m,2);
  23.                 $m_count=count($m);
  24.                 $p=array();
  25.                 foreach ($m as $v){
  26.                         $domain=c_d($v[2]);   //精简域名.....
  27.                         if ($domain == 'no') continue;
  28.                         $p[$domain]=$v[1];      
  29.                 }
  30.                 $p_count=count($p);
  31.                 $new=$n2=0;
  32.                 foreach ($p as $d => $ip){
  33.                         if (check($ip)) continue; //跳过某些IP段的检查.
  34.                         $sql="SELECT * FROM `domain` WHERE `d` = '$d' ";
  35.                         $result=mysql_query($sql,$mysql);
  36.                         if ($row=mysql_fetch_array($result)){
  37.                                 $time=time()-strtotime($row['checktime']);
  38.                                 if ($time < 1296000 ) {   //这个有点多余..未更改好.
  39.                                         $sql="UPDATE `domain` SET `checktime` = now() WHERE `d` = '$d'";
  40.                                         mysql_query($sql,$mysql);
  41.                                         $n2++;
  42.                                 }
  43.                         }
  44.                         else{
  45.                                 $sql="INSERT INTO `domain` (`d` , `ip` ,`checktime`,`beianhao`) Values ( '$d','$ip',now(),'' )";
  46.                                 mysql_query($sql,$mysql);
  47.                                 $new++;
  48.                         }
  49.                 }
  50.                 $stoptimer = time()+microtime();
  51.                 $timer = round($stoptimer-$starttimer,2);
  52.                 $result=mysql_query("SELECT * FROM  `domain`",$mysql);
  53.                 $a_count=mysql_num_rows($result);
  54.                 echo  date("H:i:s")." in $timer seconds.[ c: $a_count t : $m_count  p: $p_count u: $n2 a: $new ]\r\n";
  55.         }
  56.         mysql_close($mysql);
  57.         echo "again!!\r\n";
  58. }

  59. function check ($ip){  //..IP.
  60.         $ip_n=ip2long($ip);
  61.         $ips[]="222.187.212.128/64";   //这些IP段不检查../后面是数量
  62.         $ips[]="222.187.211.0/64";
  63.         foreach ($ips as $v){
  64.                 $vv=explode("/",$v);
  65.                 $s=ip2long($vv[0]);
  66.                 $e=$s+$vv[1];
  67.                 if ($ip_n > $s && $ip_n <= $e ) return true;
  68.         }
  69.         return false;
  70. }


  71. function c_d($domain){   //自已写的精简域名...求更好的....
  72.         $ds=explode(".",$domain);
  73.         $n=count($ds)-1;
  74.         if ($n>0){
  75.                 if (strlen($ds[$n])==2){
  76.                         if ($ds[$n] <>"cn" and $ds[$n] <>"ru" and $ds[$n] <>"tv" and $ds[$n] <>"hk" and $ds[$n] <>"us"
  77.                         and $ds[$n] <>"cc" and $ds[$n] <>"cn" and $ds[$n] <>"tw" and $ds[$n] <>"la" ) return "no";
  78.                         if ($ds[$n-1]=="com" or $ds[$n-1] == "net" or $ds[$n-1] == "org" or $ds[$n-1] == "gov" or strlen($ds[$n-1]) == 2){
  79.                                 $d=$ds[$n-2].".".$ds[$n-1].".".$ds[$n];
  80.                                 return $d;
  81.                         }
  82.                         $d=$ds[$n-1].".".$ds[$n];
  83.                         return $d;
  84.                 }
  85.                 elseif (strlen($ds[$n])==3){
  86.                         if ($ds[$n] <>"com" and $ds[$n] <>"net" and $ds[$n] <>"org" and $ds[$n] <>"gov" and $ds[$n] <>"edu" ) return "no";
  87.                 }
  88.                 elseif (strlen($ds[$n])==4){
  89.                         if ($ds[$n] <>"info") return "no";
  90.                 }
  91.                 elseif (strlen($ds[$n]) < 2 or strlen($ds[$n]) > 3){
  92.                         return "no";
  93.                 }
  94.                 $d=$ds[$n-1].".".$ds[$n];
  95.                 return $d;
  96.         }
  97.         return "no";
  98. }
  99. ?>
复制代码
第三步   通过 SCREEN 在后台循环运行该PHP文件.

  1. screen
  2. cd /home/
  3. php d.php
复制代码
然后你就可以看到这个SCREEN进程...在不停地检测域名....录入数据库...检测/录入...不停地跳动....
感觉爽不.


然后下一个贴...就要准备另一个程序...将数据库内的域名进行备案自动查询了..

继续 待续吧..



09-22 更新.
之前的程序是数据采集和分析.全在一个PHP程序里面操作.
在我的环境中...截取1000个数据包.并分析.一个循环需要2秒左右.

这个情况只能算是采样式采集...做不到完整数据采集的....
今天经过改进...
将采集和分析分开来操作.
采集使用LINUX的BASH循环来操作....
/home/cap.sh

  1. while true
  2. do
  3.   tshark -c 30000 -i eth1 -n -T fields -e ip.addr -e http.host -e http.server > /dev/shm/data.tmp 2>/dev/null
  4.   rm /dev/shm/run.dat -f
  5.   mv /dev/shm/data.tmp /dev/shm/run.dat
  6. done
复制代码
采集3W包..然后保存在data.tmp.
采集完成后..将data.tmp改名为run.dat(供PHP分析处理).
继续采集...循环处理....
然后PHP读取RUN.DAT进行处理(读取完成后...删除RUN.DAT.然后分析完成后.等 下一个RUN.DAT文件生成后再分析.....

使用新方法后..在我同样的环境下...每4秒左右生成一次RUN.DAT...

也就是4秒时间..就采集/分析了3W 个数据包...比之前的速度提高15倍.....


.
.
.

评分

参与人数 4鲜花 +4 收起 理由
wanqing11 + 1 http://wwww.0731zzmc.com 海参牡蛎片
xmbeta + 1 很给力!
森林 + 1 楼主你菊花残了没有!
八面玲珑 + 1 虽然不懂,但这样的人太少了.顶!!技术分享才.

查看全部评分

双至强L5520 8核16线 16G ECC  1TB全新硬盘 百独带宽.只需1199元/月    QQ 67052  24小时服务电话 180 0766 0999
回复

使用道具 举报

141

主题

1万

帖子

1万

积分

落伍者(四季发财)

[专业PHP解码][IDC]

Rank: 4

贡献
2035
鲜花
53
注册时间
2003-7-22

QQ绑定落伍手机绑定

 楼主| 发表于 2012-9-21 12:23:58 | 显示全部楼层 来自 中国江苏宿迁
BTW....使用tshark 会令服务器/tmp产生很多的临时文件..
建议在CRONTAB里面....做定时清理.
corntab -e
10 * * * * rm /tmp/ether* -f
双至强L5520 8核16线 16G ECC  1TB全新硬盘 百独带宽.只需1199元/月    QQ 67052  24小时服务电话 180 0766 0999
回复 支持 反对

使用道具 举报

141

主题

1万

帖子

1万

积分

落伍者(四季发财)

[专业PHP解码][IDC]

Rank: 4

贡献
2035
鲜花
53
注册时间
2003-7-22

QQ绑定落伍手机绑定

 楼主| 发表于 2012-9-21 12:27:22 | 显示全部楼层 来自 中国江苏宿迁
对了...监控机要将ETH1端口起用...

  1. ip link set eth1 up
复制代码
双至强L5520 8核16线 16G ECC  1TB全新硬盘 百独带宽.只需1199元/月    QQ 67052  24小时服务电话 180 0766 0999
回复 支持 反对

使用道具 举报

17

主题

2179

帖子

3027

积分

落伍者(两全齐美)

Rank: 2

贡献
1515
鲜花
7
注册时间
2007-7-3

落伍手机绑定

发表于 2012-9-21 12:44:14 | 显示全部楼层 来自 中国四川成都
支持你一个
null
回复 支持 反对

使用道具 举报

1292

主题

6210

帖子

8363

积分

落伍者(三羊开泰)

四块石头

Rank: 3Rank: 3

贡献
1842
鲜花
75
注册时间
2009-4-29

落伍手机绑定

发表于 2012-9-21 12:58:05 | 显示全部楼层 来自 中国浙江杭州
围观技术贴
春有百花秋有月,夏有凉风冬有雪;若无闲事挂心头,便是人间好时节
回复 支持 反对

使用道具 举报

头像被屏蔽

118

主题

5901

帖子

8166

积分

落伍者(三羊开泰)

木木

Rank: 3Rank: 3

贡献
3120
鲜花
25
注册时间
2001-3-16
发表于 2012-9-21 13:04:18 | 显示全部楼层 来自 中国广东广州
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

12

主题

392

帖子

654

积分

落伍者(一心一意)

Rank: 1

贡献
206
鲜花
0
注册时间
2005-8-17
发表于 2012-9-21 13:17:52 | 显示全部楼层 来自 中国浙江金华
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

50

主题

1万

帖子

7920

积分

落伍者(三羊开泰)

Rank: 3Rank: 3

贡献
13
鲜花
13
注册时间
2005-2-26

落伍者QQ绑定落伍微信绑定落伍手机绑定

发表于 2012-9-21 13:25:29 | 显示全部楼层 来自 中国湖南长沙
牛人,顶你
回复 支持 反对

使用道具 举报

48

主题

2534

帖子

1832

积分

落伍者(两全齐美)

Rank: 2

贡献
97
鲜花
12
注册时间
2006-5-20

QQ绑定落伍者落伍手机绑定

发表于 2012-9-21 13:28:08 | 显示全部楼层 来自 中国北京
niu ren
66
回复 支持 反对

使用道具 举报

843

主题

1万

帖子

8153

积分

落伍者(三羊开泰)

猛虎出山

Rank: 3Rank: 3

贡献
4010
鲜花
120
注册时间
2005-7-11

技术小组QQ绑定落伍者落伍手机绑定

发表于 2012-9-21 13:55:34 | 显示全部楼层 来自 中国广东深圳
虽然看不懂,但是很深很深的样子
淘宝/天猫内部优惠券PHP+Mysql作品Demo接PHP程序定制开发QQ 83202700
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

论坛客服/商务合作/投诉举报:2171544 (QQ)
落伍者创建于2001/03/14,本站内容均为会员发表,并不代表落伍立场!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!
落伍官方微信:2030286 邮箱:(djfsys@gmail.com|tech@im286.com)
© 2001-2014

浙公网安备 33060302000191号

浙ICP备11034705号 BBS专项电子公告通信管[2010]226号

  落伍法律顾问: ITlaw-庄毅雄

手机版|找回帐号|不能发帖?|Archiver|落伍者

GMT+8, 2024-3-29 07:31 , Processed in 0.131197 second(s), 40 queries , Gzip On.

返回顶部