/** 对IP_Net_To_Media进行探测 */ private void doIPNetProbe() { if (DiscoverEngine.getInstance().getStopStatus() == 1) return; List ipNetTable = SnmpUtil.getInstance().getIpNetToMediaTable(this.getIpAddress(), this.getCommunity()); if (ipNetTable == null || ipNetTable.size() == 0) // important { setDiscovered(true); return; } ipTotal = ipNetTable.size(); int threadTotal = 0; // 线程总数 SysLogger.info("PER_THREAD_IP===" + PER_THREAD_IP); if (ipTotal % PER_THREAD_IP == 0) // 每个线程对N个ip进行探测 threadTotal = ipTotal / PER_THREAD_IP; else threadTotal = ipTotal / PER_THREAD_IP + 1; IPNetProbeThread probeThread = null; for (int i = 0; i < threadTotal; i++) { if (i == threadTotal - 1) probeThread = new IPNetProbeThread(this, ipNetTable.subList(i * PER_THREAD_IP, ipTotal)); else probeThread = new IPNetProbeThread( this, ipNetTable.subList(i * PER_THREAD_IP, (i + 1) * PER_THREAD_IP)); DiscoverEngine.getInstance().addThread(probeThread); } }
/** 按描述找到一个接口 */ public IfEntity getIfEntityByDesc(String desc) { if (desc == null) return null; if (ifEntityList == null || ifEntityList.size() == 0) return null; IfEntity ifEntity = null; for (int i = 0; i < ifEntityList.size(); i++) { IfEntity obj = (IfEntity) ifEntityList.get(i); if (obj.getDescr().equals(desc)) { ifEntity = obj; break; } } if (ifEntity == null) SysLogger.info(ipAddress + "中没有端口描述为" + desc + "的接口"); return ifEntity; }
/** 按端口找到一个接口 */ public IfEntity getIfEntityByPort(String port) { if (port == null) return null; if (ifEntityList == null || ifEntityList.size() == 0) return null; IfEntity ifEntity = null; for (int i = 0; i < ifEntityList.size(); i++) { IfEntity obj = (IfEntity) ifEntityList.get(i); if (obj.getPort().equals(port)) { ifEntity = obj; break; } } if (ifEntity == null) SysLogger.info(ipAddress + "中没有端口为" + port + "的接口"); return ifEntity; }
/** 按接口索引找到接口 */ public IfEntity getIfEntityByIndex(String ifIndex) { if (ifEntityList == null || ifEntityList.size() == 0) return null; IfEntity ifEntity = null; for (int i = 0; i < ifEntityList.size(); i++) { IfEntity obj = (IfEntity) ifEntityList.get(i); if (obj.getIndex().equals(ifIndex)) { ifEntity = obj; break; } } if (ifEntity == null) SysLogger.info(ipAddress + "中没有索引为" + ifIndex + "的接口"); return ifEntity; }
public void run() { try { HostNodeDao nodeDao = new HostNodeDao(); // 得到被监视的防火墙设备 List nodeList = nodeDao.loadNetwork(8); for (int i = 0; i < nodeList.size(); i++) { HostNode node = (HostNode) nodeList.get(i); } Vector vector = null; int numTasks = nodeList.size(); int numThreads = 200; try { List numList = new ArrayList(); TaskXml taskxml = new TaskXml(); numList = taskxml.ListXml(); for (int i = 0; i < numList.size(); i++) { Task task = new Task(); BeanUtils.copyProperties(task, numList.get(i)); if (task.getTaskname().equals("netthreadnum")) { numThreads = task.getPolltime().intValue(); } } } catch (Exception e) { e.printStackTrace(); } // 生成线程池 ThreadPool threadPool = null; if (nodeList != null && nodeList.size() > 0) { threadPool = new ThreadPool(nodeList.size()); // 运行任务 for (int i = 0; i < nodeList.size(); i++) { threadPool.runTask(createTask((HostNode) nodeList.get(i))); } // 关闭线程池并等待所有任务完成 threadPool.join(); threadPool.close(); } threadPool = null; } catch (Exception e) { e.printStackTrace(); } finally { SysLogger.info("********Firewall Thread Count : " + Thread.activeCount()); } }
public void run() { if (DiscoverEngine.getInstance().getStopStatus() == 1) return; snmp = SnmpUtil.getInstance(); SysLogger.info("开始分析设备" + node.getIpAddress() + "的地址转发表"); Set shieldList = DiscoverResource.getInstance().getShieldSet(); List netshieldList = DiscoverResource.getInstance().getNetshieldList(); List netincludeList = DiscoverResource.getInstance().getNetincludeList(); IfEntity ifEntity = null; IfEntity endifEntity = null; // 生成线程池 ThreadPool threadPool = new ThreadPool(addressList.size()); for (int i = 0; i < addressList.size(); i++) { // ################################### // 若不需要服务器,则不进行交换机的ARP表采集 // if(1==1)continue; // ################################### try { // node.updateCount(2); IpAddress ipAddr = (IpAddress) addressList.get(i); threadPool.runTask(NetMediThread.createTask(ipAddr, node)); // SysLogger.info("在"+node.getIpAddress()+"的地址转发表发现IP "+ipAddr.getIpAddress()+",开始分析"); } catch (Exception ex) { ex.printStackTrace(); } } // end_for // 关闭线程池并等待所有任务完成 threadPool.join(); threadPool.close(); threadPool = null; DiscoverEngine.getInstance().addDiscoverdcount(); snmp = null; setCompleted(true); } // end_run
public void addSwitchId(int id) { if (switchIds == null) switchIds = "" + id; else switchIds += "," + id; SysLogger.info(ipAddress + "加入一交换,id=" + id); }
/** 更新所有info项和image项 */ public void updateInfo(boolean isCustom) { I_HostLastCollectData hostlastmanager = new HostLastCollectDataManager(); List list = nodes.getChildren(); for (int i = 0; i < list.size(); i++) { Element eleNode = (Element) list.get(i); int id = Integer.valueOf(eleNode.getChildText("id")).intValue(); int direction = Integer.valueOf(eleNode.getChildText("direction")).intValue(); // Hashtable ipAllData = (Hashtable)ShareData.getSharedata().get(ipaddress); Vector vector = new Vector(); String[] netInterfaceItem = { "index", "ifDescr", "ifSpeed", "ifOperStatus", "OutBandwidthUtilHdx", "InBandwidthUtilHdx" }; try { vector = hostlastmanager.getInterface_share(ipaddress, netInterfaceItem, "index", "", ""); } catch (Exception e) { e.printStackTrace(); } SysLogger.info("######################################"); SysLogger.info("######### " + ipaddress + " ##############"); SysLogger.info("######################################"); if (vector != null && vector.size() > 0) { PortconfigDao dao = new PortconfigDao(); try { for (int m = 0; m < vector.size(); m++) { String[] strs = (String[]) vector.get(m); String ifname = strs[1]; String index = strs[0]; String OutBandwidthUtilHdx = strs[4]; String InBandwidthUtilHdx = strs[5]; String portuse = ""; Portconfig portconfig = null; try { portconfig = dao.getPanelByipandindex(ipaddress, index); } catch (Exception e) { } if (portconfig != null && portconfig.getLinkuse() != null && portconfig.getLinkuse().trim().length() > 0) { portuse = portconfig.getLinkuse(); } if (Integer.parseInt(index) == id) { // 当前端口 if (direction == 1) { // 向上方向的端口 if (strs[3].equalsIgnoreCase("up")) { // 端口启动 SysLogger.info(PanelNodeHelper.getUpUpImage(1)); eleNode.getChild("img").setText(PanelNodeHelper.getUpUpImage(1)); } else { // 端口未启动 SysLogger.info(PanelNodeHelper.getUpDownImage(1)); eleNode.getChild("img").setText(PanelNodeHelper.getUpDownImage(1)); } } else { // 向下方向的端口 if (strs[3].equalsIgnoreCase("up")) { // 端口启动 SysLogger.info(PanelNodeHelper.getDownUpImage(1)); eleNode.getChild("img").setText(PanelNodeHelper.getDownUpImage(1)); } else { // 端口未启动 SysLogger.info(PanelNodeHelper.getDownDownImage(1)); eleNode.getChild("img").setText(PanelNodeHelper.getDownDownImage(1)); } } eleNode.getChild("alias").setText(ifname); eleNode.getChild("ip").setText(ipaddress); StringBuffer msg = new StringBuffer(200); msg.append("<font color='green'>索引:"); msg.append(id); msg.append("</font><br>"); msg.append("描述:"); msg.append(ifname); msg.append("<br>"); msg.append("端口应用:"); msg.append(portuse); msg.append("<br>"); msg.append("入口流速:"); msg.append(InBandwidthUtilHdx); msg.append("<br>"); msg.append("出口流速:"); msg.append(OutBandwidthUtilHdx); msg.append("<br>"); SysLogger.info(msg.toString()); eleNode.getChild("info").setText(msg.toString()); eleNode.getChild("menu").setText(PanelNodeHelper.getMenuItem(index, ipaddress)); } } } catch (Exception e) { } finally { dao.close(); } } // nodes.addContent(i, eleNode); } if (isCustom) { writeXml(); return; } writeXml(); }