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

📄 queryboks.java

📁 监控大型网络的软件。能够自动发现拓扑结构
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
			if (l != null) {				outl("  Found " + l + " ifindex<->mp mappings.");				for (int i=0; i < l.size(); i++) {					String[] s = (String[])l.get(i);										if (s[1] == null || s[1].length() == 0) {						outla("QueryBoks.fetchIfindexMpMap(): mp is '" + s[1] + "' for ip: "+ip+" ifindex: " + s[0]);						continue;					}										String[] mp = stringToMp(Integer.parseInt(s[0]), s[1]);										ifindexH.put(s[0], mp);				}			}		}		return ifindexH;	}	private int[] stringToMp(int ifindex, String s)	{		return stringToMp(ifindex, s, 1);	}	private int[] stringToMp(int ifindex, String s, int defaultModule)	{		int module, port;		Matcher m = Pattern.compile(".*(\\d+).*(\\d+).*").matcher(s);		if (m.matches()) {			module = Integer.parseInt(m.group(1));			port = Integer.parseInt(m.group(2));		} else {			module = defaultModule;			m = Pattern.compile(".*(\\d+).*").matcher(s);			if (m.maches()) {				port = Integer.parseInt(m.group(1));			} else {				port = ifindex;			}		}		return new int[] { module, port };	}	private ArrayList process3Com(String boksid, String ip, String cs_ro, String typegruppe, String boksType) throws TimeoutException	{		ArrayList l = new ArrayList();		String baseOid = "";		if (typegruppe.equals("3ss9300")) {			baseOid = ".1.3.6.1.4.1.43.29.4.10.8.1.5.1";		} else		if (typegruppe.equals("3ss")) {			baseOid = ".1.3.6.1.4.1.43.10.22.2.1.3";		} else		if (typegruppe.equals("3hub")) {			baseOid = ".1.3.6.1.4.1.43.10.9.5.1.6";		} else {			outl("  Unsupported typegruppe: " + typegruppe + " boksType: " + boksType);			return l;		}		// Angir om vi har funnet en boks bak porten, gjør vi det skal CAM-data ikke logges på porten		HashSet foundBoksBak = new HashSet();		// Get the list of macs		sSnmp.setParams(ip, cs_ro, baseOid);		ArrayList macList;		try {			macList = sSnmp.getAll();		} catch (NullPointerException e) {			errl("  NullPointerException in QueryBoks.process3Com: boksid: " + boksid + " ip: " + ip + " boksType: " + boksType);			e.printStackTrace(System.err);			return l;		}		for (int i=0; i<macList.size(); i++) {			String[] s = (String[])macList.get(i);			String formatMac = formatMac(s[1].toLowerCase());			//outl("Raw MAC: " + s[1].toLowerCase() + " Found MAC: " + formatMac);			// Nå har vi funnet minst en MAC fra denne enheten, og da sier vi at den er oppe og aktiv,			safeCloseBoksidAdd(boksid);			// For testing av CAM			//if (formatMac.equals("006097af1d45")) continue;			StringTokenizer st = new StringTokenizer(s[0], ".");			String modul = st.nextToken();			String port = st.nextToken();			if (boksType.equals("SW9300")) modul = "1";			// Prosesser Mac (CAM)			processMac(boksid, modul, port, formatMac);			if (macBoksId.containsKey(formatMac)) {				String boksidBak = (String)macBoksId.get(formatMac);				String boksBakKat = (String)boksidKat.get(boksidBak);				if (boksBakKat == null || isNetel(boksBakKat)) {					foundBoksBak.add(modul+":"+port);				}				PortBoks pm = new PortBoks(modul, port, boksidBak, "MAC");				l.add(pm);			}		}		// Nå kan vi sjekke om CAM-køen skal settes inn i cam-tabellen eller ikke		runCamQueue(boksid, foundBoksBak);		return l;	}	private ArrayList processHP(String boksid, String ip, String cs_ro, String typegruppe, String boksType) throws 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 alltid til stedet og er commanderen		 *		 *		 * .1.3.6.1.2.1.17.4.3.1.1.<desimal-mac> = <hex-mac>         * .1.3.6.1.2.1.17.4.3.1.2.<desimal-mac> = portnummer         * .1.3.6.1.2.1.17.4.3.1.3.<desimal-mac> = status		 *		 * Kun status=3 er interessant, da disse er MAC'ene switchen "lærer"		 *		 */	/*		String stackOid = "1.3.6.1.4.1.11.2.14.11.5.1.10.4.1.1";		//String hexMacOid = "1.3.6.1.2.1.17.4.3.1.1";		//String portMacOid = "1.3.6.1.2.1.17.4.3.1.2";		//String statusMacOid = "1.3.6.1.2.1.17.4.3.1.3";		String macOid = "1.3.6.1.2.1.17.4.3.1";		// Angir om vi har funnet en boks bak porten, gjør vi det skal CAM-data ikke logges på porten		HashSet foundBoksBak = new HashSet();		ArrayList stackList, macList;		try {			// 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("processHP: stackList.size: " + stackList.size() );			for (int i=stackList.size()-1; i >= 0; i--) {				String[] s = (String[])stackList.get(i);				String modul = s[1];				//String modul = String.valueOf(i+1);				outld("processHP:   modul: " + modul);				// Get the list of macs				sSnmp.setParams(ip, cs_ro+(!s[1].equals("0")?"@sw"+s[1]:""), macOid);				macList = sSnmp.getAll();				// Først dytter vi all MAC inn i en hash				HashMap macMap = new HashMap();				int j;				for (j=0; j<macList.size(); j++) {					s = (String[])macList.get(j);					String oidType = s[0].substring(0, s[0].indexOf("."));					String key = s[0].substring(s[0].indexOf(".")+1, s[0].length());					if (Integer.parseInt(oidType) != 1) break;					String formatMac = formatMac(s[1].toLowerCase());					macMap.put(key, formatMac);					outld("processHP:     Key: " + key + " MAC: " + formatMac);					// Nå har vi funnet minst en MAC fra denne enheten, og da sier vi at den er oppe og aktiv,					safeCloseBoksidAdd(boksid);				}				// Hent port-nummer for hver MAC				HashMap portMap = new HashMap();				for (; j<macList.size(); j++) {					s = (String[])macList.get(j);					String oidType = s[0].substring(0, s[0].indexOf("."));					String key = s[0].substring(s[0].indexOf(".")+1, s[0].length());					if (Integer.parseInt(oidType) != 2) break;					portMap.put(key, new Integer(s[1]));				}				// Til slutt går vi gjennom og registrerer alle MAC der status=3				for (; j<macList.size(); j++) {					s = (String[])macList.get(j);					String oidType = s[0].substring(0, s[0].indexOf("."));					String key = s[0].substring(s[0].indexOf(".")+1, s[0].length());					if (Integer.parseInt(oidType) != 3) {						errl("In processHP, boksid: " + boksid + ", oidType not in (1,2,3) found!!");						return l;					}					if (Integer.parseInt(s[1]) != 3) continue;					if (!macMap.containsKey(key) || !portMap.containsKey(key)) {						//errl("In processHP, boksid: " + boksid + ", macMap("+macMap.containsKey(key)+") or portMap("+portMap.containsKey(key)+") not found for key: " + key);						//errl("  macMap.size: " + macMap.size() + " + portMap.size: " + portMap.size() + " macs: " + (macList.size()-macMap.size()-portMap.size()));						outla("In processHP, boksid: " + boksid + ", macMap("+macMap.containsKey(key)+") or portMap("+portMap.containsKey(key)+") not found for key: " + key);						continue;					}					String formatMac = (String)macMap.get(key);					String port = String.valueOf((Integer)portMap.get(key));					// Prosesser Mac (CAM)					processMac(boksid, modul, port, formatMac);					if (macBoksId.containsKey(formatMac)) {						String boksidBak = (String)macBoksId.get(formatMac);						String boksBakKat = (String)boksidKat.get(boksidBak);						if (boksBakKat == null || isNetel(boksBakKat)) {							foundBoksBak.add(modul+":"+port);						}						outld("processHP:     Modul: " + modul + " Port: " + port + " boks: " + boksIdName.get(boksidBak));						PortBoks pm = new PortBoks(modul, port, boksidBak, "MAC");						l.add(pm);					} else {						outld("processHP:     Modul: " + modul + " Port: " + port + "  MAC: " + formatMac);					}				}			}		} catch (NullPointerException e) {			errl("  NullPointerException in QueryBoks.processHP: boksid: " + boksid + " ip: " + ip + " boksType: " + boksType);			e.printStackTrace(System.err);			return l;		}		// Nå kan vi sjekke om CAM-køen skal settes inn i cam-tabellen eller ikke		runCamQueue(boksid, foundBoksBak);		return l;  }	*/	/*	 * CAM-logger	 *	 */	private void processMac(String netboxid, String ifindex, String mac) {		// Først sjekker vi om vi har en uavsluttet CAM-record for denne MAC'en		String key = netboxid+":"+ifindex.trim()+":"+mac.trim();		// Ignorer duplikater		if (!dupeMacSet.add(key)) return;		// Sjekk mot watchMacs		if (watchMacs.contains(mac)) {			reportWatchMac(netboxid, ifindex, mac);		}		String[] s;		synchronized (unclosedCam) {			s = (String[])unclosedCam.get(key);		}		if (s != null) {			// Har CAM-record, og siden vi fant MAC'en igjen her så skal den fortsatt være åpen dersom			// det ikke er en boks bak denne porten			camResetQueue.add(new String[] { ifindex, key, s[0], s[1] } );		} else {			// Nei, da er denne MAC'en ny på porten, og vi må sette inn en record i cam-tabellen			s = (String[])mpMap.get(netboxid+":"+ifindex);			if (s == null) s = new String[2];			String[] insertData = {				"netboxid", netboxid,				"sysname", (String)boksIdName.get(netboxid),				"ifindex", ifindex,				"module", s[0],				"port", s[1],				"mac", mac.trim(),				"start_time", "NOW()"			};			camInsertQueue.add(insertData);		}	}	private void runCamQueue(String netboxid, Set foundBoksBak) {		// Først resetter vi eksisterende records der vi ikke har boksbak		for (Iterator it = camResetQueue.iterator(); it.hasNext();) {			String[] s = (String[])it.next();			String ifindex = s[0];			String camKey = s[1];			if (foundBoksBak.contains(ifindex) || foundCDPMp.contains(ifindex) || foundBoksBakSwp.contains(netboxid+":"+ifindex)) {				//outld("    runCamQueue: Skipping reset of port: " + mp + " ("+foundBoksBak.contains(mp)+","+foundCDPMp.contains(mp)+","+foundBoksBakSwp.contains(boksid+":"+mp)+")");				continue;			}			synchronized (unclosedCam) {				unclosedCam.remove(camKey);			}			String camid = s[2];			int misscnt = 1;			try {				misscnt = Integer.parseInt(s[3]);			} catch (NumberFormatException e) {			}			if (misscnt > 0) {				// til-feltet må settes tilbake til infinity, og misscnt tilbake til 0				String[] updateFields = {					"end_time", "infinity",					"misscnt", "0"				};				String[] condFields = {					"camid", camid				};				try {					Database.update("cam", updateFields, condFields);					if (DB_COMMIT) Database.commit(); else Database.rollback();				} catch (SQLException e) {					Log.d("RUN_CAM_QUEUE", "SQLException: Cannot update record in cam: " + e.getMessage());					e.printStackTrace(System.err);				}			}			camIncResetMisscnt();		}		camResetQueue.clear();		// Så setter vi inn evt. nye records i cam		for (int i=0; i < camInsertQueue.size(); i++) {			String[] insertData = (String[])camInsertQueue.get(i);			String ifindex = insertData[5];			if (foundBoksBak.contains(ifindex) || foundCDPMp.contains(ifindex) || foundBoksBakSwp.contains(netboxid+":"+ifindex)) {				//outld("    Skipping port: " + key + " ("+foundBoksBak.contains(key)+","+foundCDPMp.contains(key)+","+foundBoksBakSwp.contains(boksid+":"+key)+")");				continue;			}			if (verifyNetboxid(insertData[1])) {				try {					Database.insert("cam", insertData);					if (DB_COMMIT) Database.commit(); else Database.rollback();					camNewCnt++;				} catch (SQLException e) {					Log.d("RUN_CAM_QUEUE", "SQLException: Cannot update record in cam: " + e.getMessage());					e.printStackTrace(System.err);				}			} else {				Log.d("VERIFY_NETBOXID", "While insert cam, verify netboxid ("+insertData[1]+") failed");			}		}		camInsertQueue.clear();	}	private void safeCloseBoksidAdd(String netboxid) {		// Nå har vi funnet minst en MAC fra denne enheten, og da sier vi at den er oppe og aktiv,		// og vi kan lukke CAM-record på den		synchronized (safeCloseBoksid) {			if (!safeCloseBoksid.contains(netboxid)) {				safeCloseBoksid.add(netboxid);			}		}	}	private void reportWatchMac(String boksid, String ifindex, String mac) {		String s = 	"The following watched MAC has been found: " + mac + "\n" +					"\n"+					"At " + boksIdName.get(boksid) + ", Ifindex: " + ifindex + "\n" +					"\n"+					"Please check watchMacs.conf for whom to contact about this particular MAC";		Log.emergency("REPORT_WATCH_MACS", s);		System.err.println(s);	}	private String decimalToHexMac(String decMac) {		StringTokenizer st = new StringTokenizer(decMac, ".");		String hexMac = "";		while (st.hasMoreTokens()) {			int t = Integer.parseInt(st.nextToken());			String s = Integer.toHexString(t);			if (s.length() == 1) hexMac += "0";			hexMac += s;		}		return hexMac;	}	private String formatMac(String mac)	{		if (mac.startsWith("0x")) mac = mac.substring("0x".length(), mac.length());		String newMac = "";		StringTokenizer st = new StringTokenizer(mac);		if (st.countTokens()==1) st = new StringTokenizer(mac, ":");		if (st.countTokens()==1) return mac;		while (st.hasMoreTokens()) {			String s = st.nextToken();			if (s.length() == 1) newMac += "0";			newMac += s;		}		return newMac;	}	private static boolean isDigit(char c)	{		return c >= '0' && c <= '9';	}	private static boolean isNetel(String kat) { return getBoksMacs.isNetel(kat); }	/*	private static void outa(String s) { System.out.print(s); }	private static void outla(String s) { System.out.println(s); }	private static void oute(Object s) { if (ERROR_OUT) System.err.print(s); }	private static void outle(Object s) { if (ERROR_OUT) System.err.println(s); }	private static void out(String s) { if (VERBOSE_OUT) System.out.print(s); }	private static void outl(String s) { if (VERBOSE_OUT) System.out.println(s); }	private static void outd(String s) { if (DBUG_OUT) System.out.print(s); }	private static void outld(String s) { if (DEBUG_OUT) System.out.println(s); }	private static void err(Object o) { System.err.print(o); }	private static void errl(Object o) { System.err.println(o); }	private static void errflush() { System.err.flush(); }	*/}

⌨️ 快捷键说明

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