测试公司自主研发的一个产品,产品的主要功能是通过 IP 对其主机进行扫描,识别出主机信息(包括端口、服务等详情)。因为产品还是研发阶段,还不能通过页面进行操作,只能够通过命令行下发任务,其结果以日志文件的形式保存。
使用产品对测试靶机(测试靶机就是我自己搭建的机器,上面安装了不同的中间件、数据库等服务,也就是说我清楚知道这机器安装了哪些服务、开放了哪些端口)进行多次扫描测试,并且记录每一次测试结果,统计出准确率与稳定性后,向研发人员反馈。
###
###
(个人感想:每一次扫描测试后,都要经历上述三个步骤来记录结果。因为需要统计出准确率与稳定性,测试的次数要越多越好(起码都要 20/30 次,才有说服力)。要是将上述 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);
}
}
###
视频链接: