diff --git a/resources/messages.properties b/resources/messages.properties index 7a030910..18ff05c2 100644 --- a/resources/messages.properties +++ b/resources/messages.properties @@ -292,6 +292,7 @@ exporter.txt.scanned=Scanned exporter.csv=Comma-separated file (csv) exporter.xml=XML file (xml) exporter.ipList=IP:Port list (lst) +exporter.sql=SQL file (sql) exception.FeederException.invalidNetmask=Invalid netmask specified. Must be either in the A.B.C.D or /bits format exception.FeederException.invalidHostname=Invalid or nonexistent hostname specified exception.FeederException.malformedIP=Malformed IP address specified, it should look like A.B.C.D diff --git a/src/net/azib/ipscan/config/ComponentRegistry.java b/src/net/azib/ipscan/config/ComponentRegistry.java index 32b0b625..38dfcf5f 100644 --- a/src/net/azib/ipscan/config/ComponentRegistry.java +++ b/src/net/azib/ipscan/config/ComponentRegistry.java @@ -7,10 +7,7 @@ package net.azib.ipscan.config; import net.azib.ipscan.core.PluginLoader; import net.azib.ipscan.di.Injector; -import net.azib.ipscan.exporters.CSVExporter; -import net.azib.ipscan.exporters.IPListExporter; -import net.azib.ipscan.exporters.TXTExporter; -import net.azib.ipscan.exporters.XMLExporter; +import net.azib.ipscan.exporters.*; import net.azib.ipscan.fetchers.*; /** @@ -25,7 +22,7 @@ public class ComponentRegistry { (Platform.WINDOWS ? ".WinMACFetcher" : Platform.LINUX ? ".LinuxMACFetcher" : ".UnixMACFetcher")).newInstance()); i.register(CommentFetcher.class, FilteredPortsFetcher.class, WebDetectFetcher.class, HTTPSenderFetcher.class, NetBIOSInfoFetcher.class, PacketLossFetcher.class, HTTPProxyFetcher.class, MACVendorFetcher.class); - i.register(TXTExporter.class, CSVExporter.class, XMLExporter.class, IPListExporter.class); + i.register(TXTExporter.class, CSVExporter.class, XMLExporter.class, IPListExporter.class, SQLExporter.class); } public Injector init() throws Exception { diff --git a/src/net/azib/ipscan/exporters/SQLExporter.java b/src/net/azib/ipscan/exporters/SQLExporter.java index a8408f06..9c2e3a82 100644 --- a/src/net/azib/ipscan/exporters/SQLExporter.java +++ b/src/net/azib/ipscan/exporters/SQLExporter.java @@ -1,20 +1,23 @@ package net.azib.ipscan.exporters; import java.io.IOException; +import java.io.OutputStream; /** * SQL Exporter *
* Exports results as an SQL inserts, suitable for sqlite, mysql, etc, * optionally preceding by a 'create table'. - * TODO: implement SQLExporter * * @author Anton Keks + * @author Francesco Ambrosini */ public class SQLExporter extends AbstractExporter { - static final char DELIMETER = ':'; - + static final String TABLE_NAME = "scan"; + + static final char COMMA = ','; + public String getId() { return "exporter.sql"; } @@ -22,11 +25,36 @@ public class SQLExporter extends AbstractExporter { public String getFilenameExtension() { return "sql"; } - + + public void start(OutputStream outputStream, String feederInfo) throws IOException { + super.start(outputStream, feederInfo); + + if (!append) { + output.println("DROP TABLE IF EXISTS" + TABLE_NAME + ";"); + } + } + public void setFetchers(String[] fetcherNames) throws IOException { + if (!append) { + output.print("CREATE TABLE " + TABLE_NAME + " (`" + fetcherNames[0] + "` varchar(20)"); + for (int i = 1; i < fetcherNames.length; i++) { + output.print(COMMA); + output.print(" `" + fetcherNames[i] + "` "); + output.print("varchar(20)"); //Default type + } + output.println(");"); + } } - + public void nextAddressResults(Object[] results) throws IOException { - + output.print("INSERT INTO " + TABLE_NAME + " VALUES ('" + results[0] + "'"); + for (int i = 1; i < results.length; i++) { + Object result = results[i]; + output.print(COMMA); + output.print(" "); + output.print("'" + result + "'"); + } + output.println(");"); } + }