Openvas的研究以及Openvas的java接口的实现。

openvas的组件构成

1、服务器层组件:
• openvas-scanner(扫描器):负责调用各种漏洞检测插件,完成实际的扫描操作。
• openvas-manager(管理器):负责分配扫描任务,并根据扫描结果生产评估报告。
• openvas-administrator(管理者):负责管理配置信息,用户授权等相关工作。

2、客户层组件:
• openvas-cli(命令行接口):负责提供从命令行访问OpenVAS服务层程序。
• greenbone-security-assistant(安装助手):负责提供访问OpenVAS服务层的Web接口,便于通过浏览器来建立扫描任务,是使用最简便的客户层组件。
• Greenbone-Desktop-Suite(桌面套件):负责提供访问OpenVAS服务层的图形程序界面,主要允许在Windows客户机中。

openvas的部分常用命令

1、配置OpenVAS服务
 openvas-setup 下载并更新Openvas库。
 此过程包含:创建证书,下载并更新所有的扫描插件,并创建名为‘admin’的用户,自动生成密码等。
 openvas-mkcert 创建SSL证书。
 openvasmd --user=admin --new-password=123456 修改密码
 openvasmd –create-user admin1 创建用户。
 openvas-check-setup 检查openvas是否安装完成。
 openvas-nvt-sync 同步openvas nvt 数据库。
 openvas-mkcert-client -n om –I 创建客户端证书库。
 openvasmd –rebuild 重建数据库。
 openvassd启动OpenVAS扫描,并加载所有插件
 openvasmd –p 9390 –a 127.0.0.1 启动 OpenVAS manager,IP地址设置为本机。
 Openvasad –a 127.0.0.1 –p 9393 在本机启动administrator。
 Ogsad–http-only–listen=127.0.0.1–p 939启动Greenbone Security Assistant

2、openvas扫描命令:

Openvas-cli 模块是提供了命令行使用。omp[OPTION…]

 omp –u admin1 –w 1234 –g 获取所有config。在创建任务的时候选取相应的config ID。
 omp –u admin1 –w 1234 –T 获取所有targets。在创建人物的时候选取相应的target ID。
 omp –u admin1 –w 1234 –G 获取所有的task并显示相应的状态。
 omp –u admin1 -w 1234 --xml=’test192.168.11.209/24’ ; 创建target
 omp –u admin1 -w 1234 –C –n name1 –c configID –target targetID ;创建任务

启动openvas服务:
systemctl start greenbone-security-assistant openvas-scanner openvas-manager
关闭openvas服务:
systemctl stop greenbone-security-assistant openvas-scanner openvas-manager

openvas的源码分析

主要分析了openvas的部分核心的代码:

Osp.c
Openvas的研究以及Openvas的java接口的实现。_第1张图片
Manage.c
Openvas的研究以及Openvas的java接口的实现。_第2张图片
由此分析,可以通过openvas的omp 命令进行实现,通过组装相应的xml命令,实现openvas的java接口。
部分源代码如下
Inter.class

/***
	 * 获取端口列表
	 * @param
	 * @return 列表list
	 */
	List> getPortList() throws Exception;
	/***
	 * 获取某个端口详细信息(端口范围)
	 * @param 端口ID portId
	 * @return Map
	 */
	Map getOnePortListRanges(String portId) throws Exception;
	/***
	 * 添加端口范围
	 * @param  端口ID portId,端口类型(TCP/UDP) type,端口开始位 start, 端口结束位 end
	 * @return void
	 */
	void createPortRanges(String portId,String type,String start,String end) throws Exception;
	/***
	 * 添加端口
	 * @param  端口名称 name,端口描述 comment,端口范围 port_range
	 * @return void
	 */
	void createPortList(String name,String comment,String port_range) throws Exception;
	/***
	 * 删除端口范围
	 * @param  端口范围ID portrangeId
	 * @return void
	 */
	void deletePortRanges(String portrangeId) throws Exception;

InterImp.class

	//获取端口列表
	public List> getPortList() throws Exception {
		//存储格式为:[{name:name,comment:comment,...},{},{},...]
		StringBuilder xmlcmd = new StringBuilder();
		xmlcmd.append("");
		String xmlString = execCMD("omp -u admin -w 1234 --xml='"+xmlcmd+"'");
		List> resultList = new ArrayList>();
		Document doc = getDocument(xmlString);
		Element root = doc.getRootElement();
		judgeStatus(root);//判断返回的状态码
		//获取portList子节点列表
		List portlist=root.getChildren("port_list");
		//遍历portList
	    for (int i = 0; i < portlist.size(); i++) {
	    	Element e = portlist.get(i);
	        Map mape = new HashMap();
	        String portId = e.getAttributeValue("id");
	        String name = e.getChildText("name");
	        String allcount = e.getChild("port_count").getChildText("all");//端口总数
	        String tcpcount = e.getChild("port_count").getChildText("tcp");//tcp端口数
	        String udpcount = e.getChild("port_count").getChildText("udp");//udp端口数
	        mape.put("portId", portId);
	        mape.put("name", name);
	        mape.put("allcount", allcount);
	        mape.put("tcpcount", tcpcount);
	        mape.put("udpcount", udpcount);
	        resultList.add(mape);
	    }
		return resultList;
	}
	// 获取某个端口详细信息(端口范围)
		@Override
	public Map getOnePortListRanges(String portlistId) throws Exception{
		//存储格式为:name:name,comment:comment,rangelist:[{},{},{}];
		StringBuilder xmlcmd = new StringBuilder();
		xmlcmd.append("");
		String xmlString = execCMD("omp -u admin -w 1234 --xml='"+xmlcmd+"'");
		Map resultmap = new HashMap();
		//try {
			Document doc = getDocument(xmlString);
			Element root = doc.getRootElement();
		    judgeStatus(root);//判断返回的状态码
			Element portele=root.getChild("port_list");
			String name = portele.getChildText("name");
			String comment = portele.getChildText("comment");
			Element portranges = portele.getChild("port_ranges");
			//获取port_ranges子节点列表
			List rangeslist = portranges.getChildren("port_range");
			//list存储port_ranges子节点数据
			List> rangeList = new ArrayList>();
			for(int i=0; i rmap = new HashMap();
				String type = e.getChildText("type");//range 类型:tcp/udp
				String start = e.getChildText("start");//range 起始端口
				String end = e.getChildText("end");//range 结束端口
				String rcomment = e.getChildText("comment");
				rmap.put("rangeid", rangeId);
				rmap.put("type", type);
				rmap.put("start", start);
				rmap.put("end", end);
				rmap.put("rcomment", rcomment);
				rangeList.add(rmap);
			}
			resultmap.put("name", name);
			resultmap.put("comment", comment);
			resultmap.put("rangeslist", rangeList);
		/*}catch(Exception e) {
			e.printStackTrace();
		}*/  
		return resultmap;
	}
	//添加端口范围
	@Override
	public void createPortRanges(String portId, String type, String start, String end) throws Exception{
		StringBuilder xmlcmd = new StringBuilder();
		xmlcmd.append("");
		xmlcmd.append("");
		xmlcmd.append(""+start+"");
		xmlcmd.append(""+end+"");
		xmlcmd.append(""+type+"");
		xmlcmd.append("");
		String xmlString = execCMD("omp -u admin -w 1234 --xml='"+xmlcmd+"'");
		//try {
			Document doc = getDocument(xmlString);
			Element root = doc.getRootElement();
			judgeStatus(root);
		/*}catch(Exception e) {
		/	e.printStackTrace();
		}*/
	}
	......

源码有需要的可以找我要~~

你可能感兴趣的:(零碎问题)