DataCenter----Designing and Implement

来源:互联网 发布:淘宝宝贝详情页怎么改 编辑:程序博客网 时间:2024/06/03 22:40

          在与师兄商量后,开始决定用python写(师兄可能认为我不会python,想通过这种工作需要的方式来迫使的学习它.当然,我不能枉费他一番心意了).可看了两天后,还是对python有了个更加模糊的了解,有点不知所云的感觉(现在极其讨厌那些辟如Java.python之类的面向对象语言了.太烦琐.啰嗦了,一个简单的"HelloWorld"程序竟然要写个十行左右.还是喜欢Perl.VB了,简捷,明了.规则约束不多.很适合我性格哦!).可后来发现python竟然没有提供对Oracle数据库连接的模块.前面的工作算是白费了.最后还是决定就在江大Netflow流量监测系统主页面上加入一个新的功能块就行了.由于上次的Top查询系统用的就是php,所以这次进展还是比较顺利.
一:主要功能
     按冯老师提出的要求,要实现对于对于某一特定区段IP地址的流量的查询.
二:意义
    此功能完成后,可以在'数据中心'这一模块页面上选择一时间(以天为单位),指定一定的IP段,对流经此区间的
IP的流量信息获取,最后以csv格式保存并供查询者下载到本机上.
三:实现
    具体如现如下:由于江苏大学由Cisco6509采集的所有信息都己保存到93的机器上.我们所要求查询的数据来源
就是Oracle中flow_data'yearmonthday'的表格中.其中的yearmonthday对应为要求查询的具体的某日.
   1.接收由主页面传来的数据信息.与top排名查询里的方法类似,这里就不再重 复了.
   2.将查询出的符合要求的数据导入一个叫test.csv的表中
    
 $f_sip = format_ip($_REQUEST[sip]);
 $f_eip = format_ip($_REQUEST[eip]);

 $testFile = "/tmp/test.csv";
 $fp = fopen($testFile, "w");

 fputs($fp, "IP地址,流量/n");
 while(ora_fetch($cursor)){
   $ipaddr = ora_getcolumn($cursor, 0);
   $sum = convertOctets(ora_getcolumn($cursor, 1));
   $f_ip = format_ip($ipaddr);
   if ( $f_ip >= $f_sip and
        $f_ip <= $f_eip ) {
     fputs($fp, "$ipaddr,$sum/n");
   }
 }

 fclose($fp);
   
     php有固定的对文件操作的函数fopen(),fputs().....

     这里需要说明的是format_ip()这个函数.开始并没有用到这个函数.从而导至了很多不符合要求的IP地址进

入了csv文件里.这是因为IP地址有16位,4段数据,对它进行比较操作不能像对纯数据这样简单.举个例子吧:如果我们要进询的是从'10.0.0.0'到 '10.0.0.3'的地址.但查询结果中我们发现'10.0.0.18''10.0.0.27'.....这样的IP地址也在文件中.这是因为3与18比较时,先比较的是最高位,也就是拿3与1相比,于是就产生了上述错误.
      于是,我们要采用一种正确的IP地址比较方法.由于IP地址这个数据的特殊性.我们采用了一个format_ip()函
数.
     function format_ip($ip){
        $ipa = explode('.', $ip);
        for ($i = 0; $i <4 ; $i++) {
            $s = $ipa[$i];
            if ($s < 10) {
                $ipa[$i] = '00'.$s;
            }
            else if ($s < 100) {
                $ipa[$i] = '0'.$s;
            }
        }
        return join($ipa, '.');
    }
说明:将IP地址打碎,分成4片.每片中若数据不足3位(因为IP地址最大为3位)则在前面补齐0.如:上面讲的那个例
子3与18比较时,3先format为003,而18为018.这样比较就不会出现上面的错误了.
     3.在php中做一个下载页面.
   echo "<center><a href=./download.php>下载到本机</a></center>";

   download.php中内容为:
  
   <?
    $file_name = "test.csv";
    $file_dir = "/tmp/";
    if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
        echo "文件找不到";
        exit;
    } else {
        $file = fopen($file_dir . $file_name,"r"); // 打开文件
        // 输入文件标签
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length: ".filesize($file_dir . $file_name));
        Header("Content-Disposition: attachment; filename=" . $file_name);
        // 输出文件内容
        echo fread($file,filesize($file_dir . $file_name));
        fclose($file);
        exit;
    }
?>
      这是个专门提供给php页面安全下载的方法,具体细节我也看不太懂,只是修改了些参数就行.

  

原创粉丝点击