⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topodiscover.java

📁 一个java编写的拓扑自动发现程序
💻 JAVA
字号:
package com.sitech.net.topo.disc;

import java.util.List;
import java.util.Vector;

import sitech.www.frame.jdbc.SqlDelete;
import sitech.www.frame.jdbc.SqlInsert;
import sitech.www.frame.jdbc.SqlQuery;
import sitech.www.frame.jdbc.SqlUpdate;

import com.sitech.net.topo.netobj.RouteConnect;
import com.sitech.net.topo.netobj.Subnet;
import com.sitech.net.topo.table.Dot1dBasePortTable;
import com.sitech.net.topo.table.Dot1dTpFdbTable;
import com.sitech.net.topo.table.IfTable;
import com.sitech.net.topo.table.IpAddrTable;
import com.sitech.net.topo.table.IpNetToMediaTable;
import com.sitech.net.topo.table.IpRouteTable;
import com.sitech.net.topo.util.Queue;
import com.sitech.net.topo.util.netHelper;

public class TopoDiscover {

	public static final String FIRST_COLL = "FIRST_COLL";

	public static final String UPDATE_COLL = "UPDATE_COLL";

	netHelper nethelper = new netHelper();

	public Vector procNode(String nodeid) {

		// 此节点发现的其他节点集合
		Vector vector = new Vector();

		String sql_exist = "select moni_ipaddr from tb_topo_node_info where node_id='"
				+ nodeid
				+ "' and moni_ipaddr in (select ipaddr from tb_topo_ipaddrtable)";
		List list_exist = SqlQuery.findList(sql_exist);
		if (list_exist.size() > 0) {
			// 此节点已经处理过删除它
			String sql_del_exist = "delete from tb_topo_node_info where node_id='"
					+ nodeid + "'";
			System.out.println("---" + sql_del_exist + "---");
			SqlDelete.delete(sql_del_exist);
			return null;
		} else {
			String sql = "select moni_ipaddr,moni_port,moni_community,node_type from tb_topo_node_info where process_flag='0' and node_id='"
					+ nodeid + "'";
			List list = SqlQuery.findList(sql);
			String[] item = (String[]) list.get(0);
			String ip = item[0];
			int port = Integer.parseInt(item[1]);
			String community = item[2];
			String nodetype = item[3];
			System.out.println("[当前处理节点 NodeID: " + nodeid + "  IpAddress: "
					+ ip + "  NodeType: " + nodetype + "]");
			// 采集节点基本信息
			// 填充AddressTable表信息
			IpAddrTable ipAddrTable = new IpAddrTable();
			ipAddrTable.FillTable(ip, port, community, nodeid);
			ipAddrTable.saveToDB();

			// 填充RouteTable表信息
			IpRouteTable ipRouteTable = new IpRouteTable();
			ipRouteTable.FillTable(ip, port, community, nodeid);
			ipRouteTable.saveToDB();

			// 填充IpNetToMediaTable表信息
			IpNetToMediaTable ipNetToMediaTable = new IpNetToMediaTable();
			ipNetToMediaTable.FillTable(ip, port, community, nodeid);
			ipNetToMediaTable.saveToDB();

			// 填充IfTable表信息
			IfTable ifTable = new IfTable();
			ifTable.FillTable(ip, port, community, nodeid);
			ifTable.saveToDB();

			// 填充Dot1dTpFdbTable
			Dot1dTpFdbTable tpFdbTable = new Dot1dTpFdbTable();
			tpFdbTable.FillTable(ip, port, community, nodeid);
			tpFdbTable.saveToDB();

			// 填充Dot1dBasePortTable
			Dot1dBasePortTable basePortTable = new Dot1dBasePortTable();
			basePortTable.FillTable(ip, port, community, nodeid);
			basePortTable.saveToDB();

			// 填充子网信息
			Subnet subnet = new Subnet();
			subnet.saveToDB(nodeid, ip);

			SqlUpdate
					.update("update tb_topo_node_info set info_proc_flag='1' where node_id='"
							+ nodeid + "'");
			// 采集节点基本信息完毕
			// /////////////////////////////////////////////////

			// 填充RouterConnect信息表
			// 发现链路及新路由器节点
			RouteConnect routeConnect = new RouteConnect();
			Vector rcVector = routeConnect.saveToDB(nodeid, ip);

			// 填充每一个子网下的节点信息

			for (int i = 0; i < rcVector.size(); i++) {
				vector.add((String) rcVector.get(i));
			}

			Vector subNetVector = subnet.processSubNet();

			for (int i = 0; i < subNetVector.size(); i++) {
				vector.add((String) subNetVector.get(i));
			}

			SqlUpdate
					.update("update tb_topo_node_info set process_flag='1' where node_id='"
							+ nodeid + "'");
			System.out.println("[当前处理节点 NodeID: " + nodeid + "处理完毕]");

			return vector;
		}

	}

	/**
	 * 处理节点
	 * 
	 * @param nodeid
	 * @param collStatus
	 * @return
	 */
	public Vector procNode(String nodeid, String collStatus) {

		// 此节点发现的其他节点集合
		Vector vector = new Vector();

		String sql_exist = "select moni_ipaddr from tb_topo_node_info where node_id='"
				+ nodeid
				+ "' and moni_ipaddr in (select ipaddr from tb_topo_ipaddrtable)";
		List list_exist = SqlQuery.findList(sql_exist);
		if (list_exist.size() > 0) {
			// 此节点已经处理过删除它
			String sql_del_exist = "delete from tb_topo_node_info where node_id='"
					+ nodeid + "'";
			System.out.println("---" + sql_del_exist + "---");
			SqlDelete.delete(sql_del_exist);
			return null;
		} else {
			String sql = "select moni_ipaddr,moni_port,moni_community,node_type from tb_topo_node_info where process_flag='0' and node_id='"
					+ nodeid + "'";
			List list = SqlQuery.findList(sql);
			String[] item = (String[]) list.get(0);
			String ip = item[0];
			int port = Integer.parseInt(item[1]);
			String community = item[2];
			String nodetype = item[3];
			System.out.println("[当前处理节点 NodeID: " + nodeid + "  IpAddress: "
					+ ip + "  NodeType: " + nodetype + "]");
			// 采集节点基本信息
			// 填充AddressTable表信息
			IpAddrTable ipAddrTable = new IpAddrTable();
			ipAddrTable.FillTable(ip, port, community, nodeid);
			ipAddrTable.saveToDB();

			// 填充RouteTable表信息
			IpRouteTable ipRouteTable = new IpRouteTable();
			ipRouteTable.FillTable(ip, port, community, nodeid);
			ipRouteTable.saveToDB();

			// 填充IpNetToMediaTable表信息
			IpNetToMediaTable ipNetToMediaTable = new IpNetToMediaTable();
			ipNetToMediaTable.FillTable(ip, port, community, nodeid);
			ipNetToMediaTable.saveToDB();

			// 填充IfTable表信息
			IfTable ifTable = new IfTable();
			ifTable.FillTable(ip, port, community, nodeid);
			ifTable.saveToDB();

			// 填充Dot1dTpFdbTable
			Dot1dTpFdbTable tpFdbTable = new Dot1dTpFdbTable();
			tpFdbTable.FillTable(ip, port, community, nodeid);
			tpFdbTable.saveToDB();

			// 填充Dot1dBasePortTable
			Dot1dBasePortTable basePortTable = new Dot1dBasePortTable();
			basePortTable.FillTable(ip, port, community, nodeid);
			basePortTable.saveToDB();

			// 填充子网信息
			Subnet subnet = new Subnet();
			subnet.saveToDB(nodeid, ip);

			SqlUpdate
					.update("update tb_topo_node_info set info_proc_flag='1' where node_id='"
							+ nodeid + "'");
			// 采集节点基本信息完毕
			// /////////////////////////////////////////////////

			// 填充RouterConnect信息表
			// 发现链路及新路由器节点
			RouteConnect routeConnect = new RouteConnect();
			Vector rcVector = routeConnect.saveToDB(nodeid, ip);

			// 填充每一个子网下的节点信息

			for (int i = 0; i < rcVector.size(); i++) {
				vector.add((String) rcVector.get(i));
			}

			Vector subNetVector = subnet.processSubNet();

			for (int i = 0; i < subNetVector.size(); i++) {
				vector.add((String) subNetVector.get(i));
			}

			SqlUpdate
					.update("update tb_topo_node_info set process_flag='1' where node_id='"
							+ nodeid + "'");
			System.out.println("[当前处理节点 NodeID: " + nodeid + "处理完毕]");

			return vector;
		}

	}

	public void discover() {
		this.initCollTable();

		Queue Routerqueue = new Queue();
		// 根节点入队列
		String sql1 = "select node_id from tb_topo_node_info where process_flag='0'";
		List list1 = SqlQuery.findList(sql1);
		for (int i = 0; i < list1.size(); i++) {
			String[] item = (String[]) list1.get(i);
			String nodeid = item[0];
			Routerqueue.put(nodeid);
		}

		while (!(Routerqueue.isEmpty())) {
			// 未处理节点出队列
			String nodeid = (String) Routerqueue.get();
			// 处理此节点
			Vector vector = this.procNode(nodeid);
			// 未处理节点入队列
			if (vector != null) {
				for (int i = 0; i < vector.size(); i++) {
					String newNodeID = (String) vector.get(i);
					Routerqueue.put(newNodeID);
				}
			}
		}
		System.out.println("[---队列中节点处理完毕---]");
	}

	public void discover1() {
		this.initCollTable();

		Queue Routerqueue = new Queue();
		// 根节点入队列
		String sql1 = "select node_id from tb_topo_node_info where process_flag='0'";
		List list1 = SqlQuery.findList(sql1);
		for (int i = 0; i < list1.size(); i++) {
			String[] item = (String[]) list1.get(i);
			String nodeid = item[0];
			Routerqueue.put(nodeid);
		}

		while (!(Routerqueue.isEmpty())) {
			// 未处理节点出队列
			String nodeid = (String) Routerqueue.get();
			// 处理此节点
			Vector vector = this.procNode(nodeid);
			// 未处理节点入队列
			if (vector != null) {
				for (int i = 0; i < vector.size(); i++) {
					String newNodeID = (String) vector.get(i);
					Routerqueue.put(newNodeID);
				}
			}
		}
		System.out.println("[---队列中节点处理完毕---]");
	}

	/**
	 * 更新拓扑展现表
	 * 
	 */
	private void updateVTable() {
		// 更新拓扑展现表
		SqlDelete.delete("delete from tb_topo_node_info_v");
		SqlDelete.delete("delete from tb_topo_routerconnect_v");

		String insert_sql = "insert into tb_topo_node_info_v(select node_id,node_type,node_desc,area_id,node_manu,moni_ipaddr from tb_topo_node_info)";
		SqlInsert.insert(insert_sql);
		insert_sql = "insert into tb_topo_routerconnect_v(select nodeid,peernodeid from tb_topo_routerconnect)";
		SqlInsert.insert(insert_sql);

		System.out.println("[---拓扑展示表更新完毕---]");
	}

	/**
	 * 初始化采集表
	 * 
	 */
	private void initCollTable() {
		// 初始化采集表
		String delete_sql = "delete from tb_topo_node_info where root_flag<>'1'";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_ipaddrtable";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_iproutetable";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_routerconnect";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_subnet";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_ipnettomediatable";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_noanswer";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_iftable";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_net_link";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_dot1dtpfdbtable";
		SqlDelete.delete(delete_sql);
		delete_sql = "delete from tb_topo_dot1dbaseporttable";
		SqlDelete.delete(delete_sql);

		String update_sql = "update tb_topo_node_info set process_flag='0',info_proc_flag='0' where root_flag='1'";
		SqlUpdate.update(update_sql);
		System.out.println("[---拓扑采集表初始化完毕---]");
	}

	public static void main(String args[]) {
		TopoDiscover disc = new TopoDiscover();
		disc.discover();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -