自动化工具 日志读取工具 (一个 IP)——让测试更加高效 (附演示视频)

ye · 2017年09月04日 · 981 次阅读

一.测试背景

测试公司自主研发的一个产品,产品的主要功能是通过 IP 对其主机进行扫描,识别出主机信息(包括端口、服务等详情)。因为产品还是研发阶段,还不能通过页面进行操作,只能够通过命令行下发任务,其结果以日志文件的形式保存。

二.我的任务

使用产品对测试靶机(测试靶机就是我自己搭建的机器,上面安装了不同的中间件、数据库等服务,也就是说我清楚知道这机器安装了哪些服务、开放了哪些端口)进行多次扫描测试,并且记录每一次测试结果,统计出准确率与稳定性后,向研发人员反馈。

三.手动测试的测试步骤(对一个主机进行扫描测试为例,结果日志只有一个主机的信息

(1)打开日志文件,看到结果日志内容好乱,因为这是没有解析的 json 字符串,如下图

(2)将日志内容进行 json 解析,如下图


###


###

(3)将端口信息记录下来

(个人感想:每一次扫描测试后,都要经历上述三个步骤来记录结果。因为需要统计出准确率与稳定性,测试的次数要越多越好(起码都要 20/30 次,才有说服力)。要是将上述 3 个步骤重复几十遍,这无疑是个繁琐的事情。)

四.根据实际情况,写了个日志读取工具

(1)工具功能:
(1.1)读取指定目录下,所有的日志文件的内容。
(1.2)通过正则,匹配出 IP 与端口的信息,并提取出来。
(1.3)在结果中,展示端口总数与来源文件(若有异议,能够打开源文件,使用上述三个步骤来验证)
(2)结果展示,可以清楚看到每一个日志结果文件的重要信息(IP,端口,端口总数、来源文件)


(3)代码
package read;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class toolone {     //更加精确匹配端口


    public static void readTextFile(String filePath)
    {
        try
        {
            File f1=new File(filePath);         //定义文件
            String [] path1=f1.list();
            String [] path2=f1.list();

            for(int i=0;i<path1.length;i++)
            {
                String  s1=(String) filePath.concat(path1[i]);    //获取文件的绝对路径
            //  System.out.println(s1);
                path2[i]=s1;                           //文件的绝对路径放入数据path2[]
                //System.out.println(path2[i]);

            }
        String encoding="GBK";
        int b=0;
        for(int i=0;i<path2.length;i++)                 //循环读取每个文件
        {
            b=b+1;
            File file=new File(path2[i]);


            if(file.isFile()&&file.exists())
            {
                InputStreamReader reader=new InputStreamReader(new FileInputStream(file),encoding);   //创建流去读取文件 
                BufferedReader bufferreader=new BufferedReader(reader);
                String linetxt=null;
                String test = null;

                while((linetxt=bufferreader.readLine())!=null)
                {               
                    test=linetxt;                                          //将读取出来的文件内容存储到test变量
                    //System.out.println(test);
                }
                String ip1="\"(192|172)\\.(168|16)\\.[0-9]{2}\\.[0-9]{1,3}\"";   //正则匹配IP
                String port="\"[0-9]{1,5}\"\\:\\s\\{";                           //正则匹配端口
                //System.out.println("写入test:"+test);

                Pattern p1=Pattern.compile(ip1);  
                Matcher m1=p1.matcher(test);
                Pattern p2=Pattern.compile(port);
                Matcher m2=p2.matcher(test);

                if(m1.find())
                { 

                    System.out.print("第"+b+"个文件:"+"ip:"+m1.group()+",");     
                    System.out.print("端口");
                    int a=0;
                    String s1 = null;
                    String s2 = null;
                    Set<String> set=new TreeSet<String>();
                    while(m2.find())
                    {
                        s1=m2.group();
                        s2=s1.substring(0, s1.length()-3);
                        set.add(s2);                               //获取端口
                        //System.out.print("   "+m2.group());

                    }
                    System.out.println("   "+set);
                    System.out.println("   "+"端口总数:"+set.size());
                    System.out.println("   "+"文件来源:"+path2[i]);
                    System.out.println("---------------------------------------------------------------------------------"
                            + "---------------------------------------------------");


                }


        }
            else{
                System.out.println("找不到文件");
            }


        }


        }catch(Exception e)
        {
            e.printStackTrace();;
        }
    }

        public static void main(String[] args){
           //String filePath="E://资产评估//漏洞记录//统计2//0316//30.240//";      //定义文件所在路径

            //String filePath="E://资产评估//漏洞记录//统计2//0317//30.240//";
            String filePath="E://资产评估//漏洞记录//统计//快速扫描//单独扫描结果//172.168.11.122//原文件//";

           readTextFile(filePath);
        }

}

###

五. 演示视频

视频链接:

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册