Java tutorial
/* * GNetWatch * Copyright 2006, 2007, 2008 Alexandre Fenyo * gnetwatch@fenyo.net * * This file is part of GNetWatch. * * GNetWatch is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GNetWatch is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNetWatch; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package net.fenyo.gnetwatch; import java.io.*; import java.net.*; import java.util.*; import javax.net.ssl.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.security.*; import java.security.cert.*; import java.text.*; import net.fenyo.gnetwatch.GUI.*; import net.fenyo.gnetwatch.actions.ExternalCommand; import net.fenyo.gnetwatch.activities.*; import net.fenyo.gnetwatch.data.EventGenericSrc; import net.fenyo.gnetwatch.data.EventReachable; import net.fenyo.gnetwatch.targets.*; import org.dom4j.*; import org.dom4j.io.*; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.hibernate.Session; import org.apache.commons.logging.*; /* synchronisation occurences de synchronized (sur mthodes et instances) : net/fenyo/gnetwatch/actions/ActionNmap.java net/fenyo/gnetwatch/actions/ActionSNMP.java net/fenyo/gnetwatch/actions/ExternalCommand.java net/fenyo/gnetwatch/activities/Background.java net/fenyo/gnetwatch/activities/Capture.java net/fenyo/gnetwatch/activities/CaptureManager.java net/fenyo/gnetwatch/activities/Queue.java net/fenyo/gnetwatch/data/DataView.java net/fenyo/gnetwatch/data/NmapView.java net/fenyo/gnetwatch/data/Views.java net/fenyo/gnetwatch/GUI/AwtGUI.java net/fenyo/gnetwatch/GUI/BasicComponent.java net/fenyo/gnetwatch/GUI/BytesReceivedComponent.java net/fenyo/gnetwatch/GUI/BytesSentComponent.java net/fenyo/gnetwatch/GUI/ChartComponent.java net/fenyo/gnetwatch/GUI/FloodComponent.java net/fenyo/gnetwatch/GUI/GUI.java net/fenyo/gnetwatch/GUI/HTTPComponent.java net/fenyo/gnetwatch/GUI/HTTPPagesComponent.java net/fenyo/gnetwatch/GUI/VisualElement.java net/fenyo/gnetwatch/SNMPQuerier.java net/fenyo/gnetwatch/targets/TargetIPv4.java net/fenyo/gnetwatch/targets/TargetIPv6.java net/fenyo/gnetwatch/targets/Target.java verrous : GUI.sync_tree GUI.tab_folder GUI.GUI_created synchro ExternalCommand CaptureManager CaptureManager.capture_list CaptureManager.listeners Queue Queue.actions AwtGUI.frame_list BasicComponent.sync_value_per_vinterval BasicComponent.sync_update BasicComponent.events VisualElement.initialized SNMPQuerier.getSysDescr().invoked registered_components threads : main: CommandLine.main() Interrupt: Background.run() GUI: GUI.run() Capture-*: Capture.run() Repaint: AwtGUI.run() icmp-*: PingQueue.run() snmp-*: SNMPQueue.run() flood-*: FloodQueue.run() http-*: HTTPQueue.run() nmap-*: NmapQueue.run() merge-1: MergeQueue.run() hsqldb: library thread (HSQLDB) DefaultUDPTransportMapping: library thread (SNMP4J) Timer-0: system thread */ /** * Manage command line arguments. * @author Alexandre Fenyo * @version $Id: CommandLine.java,v 1.43 2008/11/17 01:39:19 fenyo Exp $ * * @todo nothing more. */ public class CommandLine { private static Log log = LogFactory.getLog(CommandLine.class); static public class NoCheckTrustManager implements X509TrustManager { private X509TrustManager myTrustManager; public NoCheckTrustManager() throws java.security.NoSuchAlgorithmException { TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509"); try { // trustManagerFactory.init((KeyStore) null); trustManagerFactory.init(KeyStore.getInstance(KeyStore.getDefaultType())); myTrustManager = (X509TrustManager) trustManagerFactory.getTrustManagers()[0]; } catch (KeyStoreException ex) { log.error("Exception", ex); } } public X509Certificate[] getAcceptedIssuers() { return myTrustManager.getAcceptedIssuers(); } public void checkClientTrusted(final X509Certificate chain[], final String authType) throws CertificateException { } public void checkServerTrusted(final X509Certificate chain[], final String authType) throws CertificateException { } } // java -cp GNetWatchBundle.jar import source sandbox d:\import\gnetwatch.log // 20080530162420:<1;2;3;4;5;6;7;8;9;10;foo;bar> private static void importGenericSrc(final String[] args) throws IOException { // Get configuration properties final Config config = new Config(); // Set debug level config.setDebugLevel(0); // Read general logging rules GenericTools.initLogEngine(config); // Initialize Object-Relational mapping final Synchro synchro = new Synchro(config); synchronized (synchro) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); final java.util.List results = session.createQuery("from TargetGroup as group where group.item = ?") .setString(0, args[2]).list(); if (results.size() == 0) log.error("no such group"); else { final TargetGroup group = (TargetGroup) results.get(0); final BufferedReader reader = new BufferedReader(new FileReader(args[3])); String line; while ((line = reader.readLine()) != null) { log.debug("[" + line + "]"); Matcher match = Pattern.compile( ".*?([0-9]{14})[^0-9]*?<([0-9]*);([0-9]*);([0-9]*);([0-9]*);([0-9]*);([0-9]*);([0-9]*);([0-9]*);([0-9]*);([0-9]*);([^>]*)>.*?$") .matcher(line); if (match.find()) { final String time = new String(match.group(1)); final int value1 = new Integer(match.group(2)); final int value2 = new Integer(match.group(3)); final int value3 = new Integer(match.group(4)); final int value4 = new Integer(match.group(5)); final int value5 = new Integer(match.group(6)); final int value6 = new Integer(match.group(7)); final int value7 = new Integer(match.group(8)); final int value8 = new Integer(match.group(9)); final int value9 = new Integer(match.group(10)); final int value10 = new Integer(match.group(11)); final String units = match.group(12); final SimpleDateFormat fmt = new java.text.SimpleDateFormat("yyyyMMddHHmmss"); final Date date; try { date = fmt.parse(time); } catch (final ParseException ex) { log.warn("exception while parsing date from line [" + line + "]", ex); continue; } /* final java.util.List results2 = session.createQuery("from EventGenericSrc as ev where ev.eventList = :event_list " + "and ev.date = :date") .setLong("event_list", group.getEventLists().get(EventGenericSrc.class.toString()).getId()) .setDate("date", date) .list();*/ final java.util.List results2 = session .createQuery("from EventGenericSrc as ev where ev.date = :date") // .setString("date", "2008-05-30 16:24:20.000000000") .setString("date", new java.sql.Date(date.getTime()).toString()).list(); log.debug("date en ascii:" + new java.sql.Date(date.getTime()).toString()); if (results2.size() > 0) log.debug("Deja un evt comme ca"); else group.addEvent(synchro, new EventGenericSrc(date, true, -1, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, units)); } } } session.getTransaction().commit(); } // stop synchronizing synchro.end(); } /** * General entry point. * @param args command line arguments. * @return void. * @throws IOException io exception. * @throws FileNotFoundException file not found. */ public static void main(final String[] args) throws IOException, FileNotFoundException, InterruptedException, AlgorithmException { Config config = null; Synchro synchro = null; Background background = null; GUI gui = null; Main main = null; SNMPManager snmp_manager = null; CaptureManager capture_mgr = null; if (args.length > 0) { if (args.length == 4 && args[0].equals("import") && args[1].equals("source")) { importGenericSrc(args); return; } log.error("invalid arguments"); System.exit(1); } // Get configuration properties config = new Config(); // Set debug level // debug level 1: simulate hundreds of ping per second to check the DB and hibernate abilities to handle lots of events config.setDebugLevel(0); // Read general logging rules GenericTools.initLogEngine(config); log.info(config.getString("log_engine_initialized")); log.info(config.getString("begin")); /* final MessageBox dialog = new MessageBox(new Shell(new org.eclipse.swt.widgets.Display()), SWT.ICON_QUESTION | SWT.YES | SWT.NO); // traduire dialog.setText("GNetWatch startup"); dialog.setMessage("Database Selection:\ndo you want to erase the current database content ?"); dialog.open(); */ // Initialize Object-Relational mapping synchro = new Synchro(config); // Do not check SSL certificates SSLContext ssl_context = null; try { ssl_context = SSLContext.getInstance("SSL"); ssl_context.init(null, new TrustManager[] { new NoCheckTrustManager() }, new SecureRandom()); } catch (final NoSuchAlgorithmException ex) { log.error("Exception", ex); } catch (final KeyManagementException ex) { log.error("Exception", ex); } HttpsURLConnection.setDefaultSSLSocketFactory(ssl_context.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { public final boolean verify(String hostname, SSLSession session) { return true; } }); // Initialize background processes management background = new Background(config); background.createBackgroundThread(); // Initialize packet capture on every interface capture_mgr = new CaptureManager(config); // Initialize main processes management main = new Main(config, capture_mgr); // Build SNMP Manager snmp_manager = new SNMPManager(); // Build GUI gui = new GUI(config, background, main, snmp_manager, synchro); main.setGUI(gui); capture_mgr.setGUI(gui); gui.waitForCreation(); // Initial configuration gui.createFromXML(gui.getConfig().getProperty("initialobjects")); // Move the GUI to the top of the drawing order gui.showGUI(); // merge events at startup background.informQueue("merge-1", gui); // Wait for the GUI to terminate gui.join(); // The GUI is now closed log.info(config.getString("end")); // Stop every application thread config.setEnd(); gui.end(); background.end(); capture_mgr.unRegisterAllListeners(); // stop synchronizing synchro.end(); } }