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

📄 queryboks.java

📁 监控大型网络的软件。能够自动发现拓扑结构
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
				}			}			/*				Collections.sort(printList);				for (Iterator j=printList.iterator(); j.hasNext();) {				outl(String.valueOf(j.next()));				}			*/						if (newCnt > 0 || dupCnt > 0) {				Log.d("RUN", "Fount a total of " + newCnt + " new units, " + dupCnt + " duplicate units.");			}						long boksUsedTime = System.currentTimeMillis() - boksBeginTime;			synchronized (boksReport) {				boksReport.add(new BoksReport((int)boksUsedTime, bd));			}						lastActivity = System.currentTimeMillis();		}				long usedTime = System.currentTimeMillis() - beginTime;		threadDone[num] = true;		Log.freeThread();		Log.d("RUN", "** Thread done, time used: " + getBoksMacs.formatTime(usedTime) + ", waiting for " + getThreadsNotDone() + " **");	}	private boolean verifyNetboxid(String netboxid) {		try {			ResultSet rs = Database.query("SELECT netboxid FROM netbox WHERE netboxid='"+netboxid+"'");			if (rs.next()) return true;		} catch (SQLException e) {			Log.d("VERIFY_NETBOXID", "Verify netboxid ("+netboxid+"), SQLException: " + e.getMessage() );			e.printStackTrace(System.err);		}		Log.w("VERIFY_NETBOXID", "Netbox ("+netboxid+") " + boksIdName.get(netboxid) + " no longer exists!");		return false;	}		private String getThreadsNotDone()	{		StringBuffer sb = new StringBuffer();		int startRange=0;		boolean markLast=false;		for (int i=0; i < threadDone.length+1; i++) {			if (i != threadDone.length && !threadDone[i]) {				if (!markLast) {					startRange=i;					markLast = true;				}			} else if (markLast) {				String range = (startRange==i-1) ? String.valueOf(i-1) : startRange+"-"+(i-1);				sb.append(","+range);				markLast=false;			}		}		if (sb.length() > 0) {			sb.setCharAt(0, '[');		} else {			sb.insert(0, "[");		}		sb.append("]");		return sb.toString();	}	/*	private ArrayList processCDPCisco(String workingOnBoksid, String ip, String cs_ro, HashMap ifindexMp) throws SQLException, TimeoutException	{	}	private ArrayList processCDPHP(String workingOnBoksid, String ip, String cs_ro, HashMap ifindexMp) throws SQLException, TimeoutException	{		ArrayList l = new ArrayList();		/*		 * Først henter vi ut antall i stack'en med MIB:		 *		 * .1.3.6.1.4.1.11.2.14.11.5.1.10.4.1.1		 *		 * Denne gir ut et tall for hvert member, 0 er commanderen		 *		 */	/*		String stackOid = "1.3.6.1.4.1.11.2.14.11.5.1.10.4.1.1";		String cdpOid = ".1.3.6.1.4.1.9.9.23.1.2.1.1.6";		String remoteIfOid = ".1.3.6.1.4.1.9.9.23.1.2.1.1.7";		ArrayList stackList;		// Henter først antallet i stack'en:		sSnmp.setParams(ip, cs_ro, stackOid);		stackList = sSnmp.getAll();		if (stackList.isEmpty()) stackList.add(new String[] { "", "0" });		outld("processCDPHP: stackList.size: " + stackList.size() );		for (int i=stackList.size()-1; i >= 0; i--) {			String[] stack = (String[])stackList.get(i);			String modul = stack[1];			//String modul = String.valueOf(i+1);			outld("processCDPHP:   modul: " + modul);			// Get the list of macs			sSnmp.setParams(ip, cs_ro+(!stack[1].equals("0")?"@sw"+stack[1]:""), cdpOid);			ArrayList cdpList = sSnmp.getAll(true);			if (cdpList.size() == 0) continue;			// Vi har fått noe via CDP, da kan vi trygt lukke CAM records			safeCloseBoksidAdd(workingOnBoksid);			sSnmp.setParams(ip, cs_ro+(!stack[1].equals("0")?"@sw"+stack[1]:""), remoteIfOid);			ArrayList cdpRMpList = sSnmp.getAll(true);			outld("In processCDPCDP(), cdpList.size: " + cdpList.size());			if (cdpList.size() != cdpRMpList.size()) outla("  *WARNING*: cdpList != cdpRMpList ("+cdpList.size()+" != "+cdpRMpList.size()+").");			for (int j=0; j<cdpList.size(); j++) {				String[] cdps = (String[])cdpList.get(j);				String port = cdps[0].substring(0, cdps[0].indexOf("."));				// Hent ut mp på andre siden				if (cdpRMpList.size() <= j) continue;				String[] remoteIf = (String[])cdpRMpList.get(j);				// Opprett record for boksen bak porten				PortBoks pm = processCDP(workingOnBoksid, cdps[1], port, modul, port, remoteIf[1].trim() );				if (pm == null) continue;				pm.setIfindex(port);				l.add(pm);				outld("processCDPHP:  Modul: " + pm.getModulS() + " Port: " + pm.getPortS() + "  CDP: " + boksIdName.get(pm.getBoksId()));			}		}		return l;	}*/	/*	 * Shared CDP processing	 *	 */	private List processCDP(String workingOnBoksid) throws SQLException, TimeoutException {		List l = new ArrayList();		List cdpList = sSnmp.getAll(getOid("cdpNeighbour"), true, 1);		if (cdpList == null || cdpList.isEmpty()) {			Log.d("PROCESS_CDP", "cdpList is " + cdpList + " for netboxid: " + workingOnBoksid + " OID: " + getOid("cdpNeighbour") );			return l;		}		// Vi har fått noe via CDP, da kan vi trygt lukke CAM records		safeCloseBoksidAdd(workingOnBoksid);		Map remoteIfMap = sSnmp.getAllMap(getOid("cdpRemoteIf"), true, 1);		Log.d("PROCESS_CDP", "cdpList.size: " + cdpList.size());		if (remoteIfMap == null) {			remoteIfMap = new HashMap();			Log.w("PROCESS_CDP", "Box supports cdpNeighbour, but not cdpRemoteIf. Run OID test again?");		} else {			if (cdpList.size() != remoteIfMap.size()) Log.d("PROCESS_CDP", "cdpList != remoteIfMap ("+cdpList.size()+" != "+remoteIfMap.size()+").");		}		// Hent liste over alle gamle ifindekser slik at vi kan slette de som ikke lenger eksisterer		List unrecognizedCDP = new ArrayList();		Set oldUnrecIfind = new HashSet();		for (Iterator it = NetboxInfo.get(workingOnBoksid, "unrecognizedCDP", null); it.hasNext();) {			String[] s = (String[])it.next();			oldUnrecIfind.add(s[0]);		}		for (Iterator it = cdpList.iterator(); it.hasNext();) {			String[] cdps = (String[])it.next();			String ifindex = cdps[0];			String remoteName = cdps[1];			String remoteIf = (String)remoteIfMap.get(ifindex);			String[] netboxidA = extractNetboxid(remoteName);			if (netboxidA == null) {				Log.d("PROCESS_CDP", "Not found, ("+workingOnBoksid+") "+boksIdName.get(workingOnBoksid)+", Ifindex: " + ifindex + " String: " + remoteName);				unrecognizedCDP.add(new String[] { ifindex, remoteName });				oldUnrecIfind.remove(ifindex);				continue;			}			String netboxid = netboxidA[0];			String sysname = (String)boksIdName.get(netboxid);			// Opprett record for boksen bak porten			PortBoks pm = new PortBoks(ifindex, netboxid, "CDP");			if (netboxidA.length > 1) {				// Vi har også med modulnummer				String zero = "";				try {					if (Integer.parseInt(remoteIf) < 10) zero = "0";				} catch (NumberFormatException exp) { }				remoteIf = (Integer.parseInt(netboxidA[1])+1) + zero + remoteIf;			}			pm.setRemoteIf(remoteIf);			l.add(pm);			foundCDPMp.add(ifindex);			Log.d("PROCESS_CDP", "Ifindex: " + ifindex + " CDP: " + sysname + " remoteIf: " + remoteIf);			// Nå vet vi at vi har funnet en boks via CDP bak denne porten, og da kan det ikke være andre Cisco eller HP-enheter bak her			try {				ResultSet rs = Database.query("SELECT COUNT(*) AS count FROM swp_netbox WHERE netboxid='"+workingOnBoksid+"' AND ifindex='"+ifindex+"' AND to_netboxid!='"+pm.getToNetboxid()+"' AND to_netboxid IN (SELECT netboxid FROM netbox JOIN type USING(typeid) WHERE cdp='t')");				if (rs.next() && rs.getInt("count") > 0) {					String sql = "DELETE FROM swp_netbox WHERE netboxid='"+workingOnBoksid+"' AND ifindex='"+ifindex+"' AND to_netboxid!='"+pm.getToNetboxid()+"' AND to_netboxid IN (SELECT netboxid FROM netbox JOIN type USING(typeid) WHERE cdp='t')";					Log.d("PROCESS_CDP", "MUST DELETE("+rs.getInt("count")+"): " + sql);					Database.update(sql);					if (DB_COMMIT) Database.commit(); else Database.rollback();				}			} catch (SQLException e) {				Log.d("PROCESS_CDP", "SQLException: " + e.getMessage());				e.printStackTrace(System.err);			}						// Dersom denne porten går fra ikke-gw (sw,kant) til gw må vi slå remote interface opp i gwport			// slik at vi kan sette boksbak og swportbak.			if (!boksGwSet.contains(workingOnBoksid) && boksGwSet.contains(pm.getToNetboxid())) {				// OK, ikke-gw -> gw				String swportid = (String)swportidMap.get(workingOnBoksid+":"+ifindex);				if (swportid != null) {					// Setter boksbak og swportbak for alle matchende interfacer					Log.d("PROCESS_CDP", "Updating boksbak("+workingOnBoksid+"), swportbak("+swportid+") for gw: " + boksIdName.get(netboxid)+", rIf: " + remoteIf);					Database.update("UPDATE gwport SET to_netboxid = '"+workingOnBoksid+"', to_swportid = '"+swportid+"' WHERE moduleid IN (SELECT moduleid FROM module WHERE netboxid='"+netboxid+"') AND interface = '"+remoteIf+"'");					if (DB_COMMIT) Database.commit(); else Database.rollback();				}			}					}				for (Iterator it = unrecognizedCDP.iterator(); it.hasNext();) {			// Write this to netboxinfo			String[] s = (String[])it.next();			NetboxInfo.put(workingOnBoksid, "unrecognizedCDP", s[0], s[1]);		}		for (Iterator it = oldUnrecIfind.iterator(); it.hasNext();) {			String ifindex = (String)it.next();			NetboxInfo.remove(workingOnBoksid, "unrecognizedCDP", ifindex);		}				return l;	}			private String[] extractNetboxid(String s)	{		// Vi skal prøve å finne en boksid ut fra CDP strengen, som kan f.eks se slik ut:		// 069003402(hb-sw)		// tekno-sw200C01D80CEA4		// ntnu-gw2.ntnu.no		// HP		// mar-ans-601-1(000a57-b8d3c0)		String[] r;		// Først prøver vi bare strengen		if (sysnameMap.containsKey(s)) {			return new String[] { (String)sysnameMap.get(s) };		}		// Så sjekker vi etter paranteser		int i;		if ( (i=s.indexOf("(")) != -1) {			int end = s.indexOf(")");			if (end != -1) {				String n = s.substring(i+1, end);				if (sysnameMap.containsKey(n)) {					return new String[] { (String)sysnameMap.get(n) };				}				if ( (r=extractNetboxid(n)) != null) return r;				s = s.substring(0, i);			}		}		// No match so far, check if this is a HP stack member (-#)		if (s.matches(".*-\\d")) {			String sn = s.substring(0, s.length()-2);			if ((r=extractNetboxid(sn)) != null) {				return new String[] { r[0], s.substring(s.length()-1, s.length()) };			}		}		// Brute-force, legg til ett og ett tegn fra starten og sjekk		String cur = null; // Hvis vi får flere matcher legger vi til det med flest tegn		StringBuffer sb = new StringBuffer();		for (i=0; i < s.length(); i++) {			sb.append(s.charAt(i));			if (sysnameMap.containsKey(sb.toString()) ) {				cur = (String)sysnameMap.get(sb.toString() );			}		}		if (cur != null) return new String[] { cur };		// Så tar vi strengen motsatt vei, bare for sikkerhets skyld		sb = new StringBuffer();		for (i=s.length()-1; i >= 0; i--) {			sb.insert(0, s.charAt(i));			if (sysnameMap.containsKey(sb.toString() )) {				cur = (String)sysnameMap.get(sb.toString() );			}		}		if (cur != null) return new String[] { cur };		return null;	}		private List processMacEntry(String netboxid, String ip, String cs_ro, String type, boolean csAtVlan) throws TimeoutException {		List l = new ArrayList();		// HashSet for å sjekke for duplikater		HashSet dupCheck = new HashSet();		HashSet foundBoksBak = new HashSet();		// Hent macadresser for hvert vlan og knytt disse til ifindex		int activeVlanCnt=0;		int unitVlanCnt=0;		Set vlanSet;		if (csAtVlan) {			vlanSet = (Set)vlanBoksid.get(netboxid);			if (vlanSet == null) {				Log.d("PROCESS_MAC", "Missing vlanSet for netboxid: " + netboxid + ", aborting");				return l;			}		} else {			vlanSet = new HashSet();			vlanSet.add("");		}		// Så vi ikke venter så lenge dersom vi ikke får svar fra et vlan		sSnmp.setTimeoutLimit(1);		for (Iterator it = vlanSet.iterator(); it.hasNext();) {			String vlan = String.valueOf(it.next());			String useCs = cs_ro + (vlan.length() == 0 ? "" : "@"+vlan);			sSnmp.setParams(ip, useCs, "1");			Log.d("MAC_ENTRY", "Fetching vlan: " + vlan);			// Hent porter som er i blocking (spanning-tree) mode			List stpList;			try {				List mpBlocked = new ArrayList();				stpList = sSnmp.getAll(getOid("stpPortState"));				if (stpList != null) {					for (Iterator stpIt = stpList.iterator(); stpIt.hasNext();) {						String[] s = (String[])stpIt.next();						if (s[1].equals("2")) mpBlocked.add(s[0]);					}										if (mpBlocked.size() == 0) {						// Nå vet vi at ingen porter er blokkert på denne enheten på dette vlan						HashMap blockedIfind = (HashMap)spanTreeBlocked.get(netboxid+":"+vlan);						if (blockedIfind != null) {							// Slett eksisterende innslag i databasen							try {								Log.d("MAC_ENTRY", "All ports on " + boksIdName.get(netboxid) + " are now non-blocking");								String sql = "DELETE FROM swportblocked WHERE EXISTS (SELECT swportid FROM swport JOIN module USING(moduleid) WHERE netboxid="+netboxid+" AND swportblocked.swportid=swportid)";								if (csAtVlan) sql += " AND vlan='"+vlan+"'";								Database.update(sql);								if (DB_COMMIT) Database.commit(); else Database.rollback();							} catch (SQLException e) {								Log.d("MAC_ENTRY", "While deleting from swportblocked ("+netboxid+","+vlan+"): SQLException: " + e.getMessage());								e.printStackTrace(System.err);							}						}					}				}				// Hent macadresser på dette vlan				sSnmp.setIfindexIs(SimpleSnmp.IFINDEX_VALUE);				List macVlan = sSnmp.getAll(getOid("macPortEntry"));				sSnmp.setIfindexIs(SimpleSnmp.IFINDEX_OID);				Map portIndexMap = null;				if (macVlan == null) {					// Try 3Com SS mac					macVlan = sSnmp.getAll(getOid("3cSSMac"));					if (macVlan != null) {						// We need to rewrite the list to match macPortEntry format, as well as create a portIndexMap						List newMacVlan = new ArrayList();						portIndexMap = new HashMap();						for (Iterator macIt = macVlan.iterator(); macIt.hasNext();) {							String[] s = (String[])macIt.next();							String[] mp = s[0].split("\\.");							int module = Integer.parseInt(mp[0]);							int port = Integer.parseInt(mp[1]);							String ifindex = module + (port<10?"0":"") + port;							newMacVlan.add(new String[] { util.join(mp, ".", 2), ifindex });							portIndexMap.put(ifindex, ifindex);						}						macVlan = newMacVlan;					}				}				if (mpBlocked.isEmpty() && (macVlan == null || macVlan.isEmpty())) continue;										// Hent mapping mellom ifIndex og intern portindex				if (portIndexMap == null) {					sSnmp.setIfindexIs(SimpleSnmp.IFINDEX_BOTH);					portIndexMap = sSnmp.getAllMap(getOid("basePortIfIndex"));					sSnmp.setIfindexIs(SimpleSnmp.IFINDEX_OID);				}				if (portIndexMap != null) {					int blockedCnt=0;					if (mpBlocked.size() > 0) {						Map blockedIfind = (Map)spanTreeBlocked.get(netboxid+":"+vlan);						if (blockedIfind == null) blockedIfind = new HashMap(); // Ingen porter er blokkert på dette vlan													for (Iterator blockIt = mpBlocked.iterator(); blockIt.hasNext();) {							String s = (String)blockIt.next();							String ifindex = (String)portIndexMap.get(s);							if (ifindex == null) continue;															// OK, nå kan vi sjekke om denne eksisterer fra før							String swportid = (String)blockedIfind.remove(ifindex);							if (swportid == null) {								// Eksisterer ikke fra før, må settes inn, hvis den eksisterer i swport								swportid = (String)swportidMap.get(netboxid+":"+ifindex);								if (swportid != null) {									// Find correct vlan									String dbVlan = (vlan.length() == 0 ? (String)vlanMap.get(netboxid+":"+ifindex) : vlan);									if (dbVlan == null) {										Log.d("MAC_ENTRY", "Netboxid: " + netboxid + " blocked ifindex: " + ifindex + " is missing VLAN for swportid: " + swportid);

⌨️ 快捷键说明

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