📄 queryboks.java
字号:
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 + -