Browse Source

Implemented: yellow light, notification sound/vibrating, export database
fixed: refreshHandlers
changed: logging, recorded connection per session

lp-tu 10 years ago
parent
commit
c859c33f3f
38 changed files with 737 additions and 326 deletions
  1. BIN
      bin/classes.dex
  2. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/HoneyListener.class
  3. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/HoneyService$LocalBinder.class
  4. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/HoneyService.class
  5. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$id.class
  6. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$layout.class
  7. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$menu.class
  8. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$string.class
  9. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$style.class
  10. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/FTP.class
  11. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/SMB.class
  12. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/ListViewAdapter.class
  13. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$1.class
  14. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$2.class
  15. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$3.class
  16. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$4.class
  17. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$5.class
  18. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity.class
  19. BIN
      bin/hostage.apk
  20. BIN
      bin/resources.ap_
  21. 150 149
      gen/de/tudarmstadt/informatik/hostage/R.java
  22. 51 41
      res/layout/activity_viewlog.xml
  23. 1 1
      res/values/strings.xml
  24. 1 1
      res/xml/preferences.xml
  25. 29 7
      src/de/tudarmstadt/informatik/hostage/HoneyListener.java
  26. 29 10
      src/de/tudarmstadt/informatik/hostage/HoneyService.java
  27. 12 2
      src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java
  28. 17 7
      src/de/tudarmstadt/informatik/hostage/handler/AbstractHandler.java
  29. 4 3
      src/de/tudarmstadt/informatik/hostage/handler/ByteArrayHandlerImpl.java
  30. 4 3
      src/de/tudarmstadt/informatik/hostage/handler/StringHandlerImpl.java
  31. 112 51
      src/de/tudarmstadt/informatik/hostage/logging/DatabaseHandler.java
  32. 46 0
      src/de/tudarmstadt/informatik/hostage/logging/FileLogger.java
  33. 11 0
      src/de/tudarmstadt/informatik/hostage/logging/Logger.java
  34. 172 0
      src/de/tudarmstadt/informatik/hostage/logging/Record.java
  35. 33 27
      src/de/tudarmstadt/informatik/hostage/logging/SQLLogger.java
  36. 56 20
      src/de/tudarmstadt/informatik/hostage/ui/MainActivity.java
  37. 7 2
      src/de/tudarmstadt/informatik/hostage/ui/ViewLog.java
  38. 2 2
      src/de/tudarmstadt/informatik/hostage/ui/ViewLogTable.java

BIN
bin/classes.dex


BIN
bin/classes/de/tudarmstadt/informatik/hostage/HoneyListener.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/HoneyService$LocalBinder.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/HoneyService.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$id.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$layout.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$menu.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$string.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/R$style.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/FTP.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/protocol/SMB.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/ListViewAdapter.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$1.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$2.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$3.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$4.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$5.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity.class


BIN
bin/hostage.apk


BIN
bin/resources.ap_


+ 150 - 149
gen/de/tudarmstadt/informatik/hostage/R.java

@@ -1,149 +1,150 @@
-/* AUTO-GENERATED FILE.  DO NOT MODIFY.
- *
- * This class was automatically generated by the
- * aapt tool from the resource data it found.  It
- * should not be modified by hand.
- */
-
-package de.tudarmstadt.informatik.hostage;
-
-public final class R {
-    public static final class anim {
-        public static final int in_left_to_right=0x7f040000;
-        public static final int in_right_to_left=0x7f040001;
-        public static final int out_left_to_right=0x7f040002;
-        public static final int out_right_to_left=0x7f040003;
-    }
-    public static final class array {
-        public static final int protocols=0x7f070002;
-        public static final int upload_entries=0x7f070000;
-        public static final int upload_values=0x7f070001;
-    }
-    public static final class attr {
-    }
-    public static final class dimen {
-        /**  Default screen margins, per the Android Design guidelines. 
-
-         Customize dimensions originally defined in res/values/dimens.xml (such as
-         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
-    
-         */
-        public static final int activity_horizontal_margin=0x7f060000;
-        public static final int activity_vertical_margin=0x7f060001;
-    }
-    public static final class drawable {
-        public static final int ic_launcher=0x7f020000;
-        public static final int light_green=0x7f020001;
-        public static final int light_green_large=0x7f020002;
-        public static final int light_grey=0x7f020003;
-        public static final int light_grey_large=0x7f020004;
-        public static final int light_red=0x7f020005;
-        public static final int light_red_large=0x7f020006;
-        public static final int light_yellow=0x7f020007;
-        public static final int light_yellow_large=0x7f020008;
-    }
-    public static final class id {
-        public static final int TextViewServices=0x7f0b000f;
-        public static final int action_settings=0x7f0b001d;
-        public static final int buttonDeleteLog=0x7f0b0019;
-        public static final int buttonShowLog=0x7f0b0005;
-        public static final int buttonUploadLog=0x7f0b0018;
-        public static final int checkBoxParanoid=0x7f0b0003;
-        public static final int imageViewLight=0x7f0b0002;
-        public static final int layoutContainer=0x7f0b0012;
-        public static final int listViewProtocols=0x7f0b0010;
-        public static final int textFirstAttack=0x7f0b0013;
-        public static final int textFirstAttackValue=0x7f0b0014;
-        public static final int textLastAttack=0x7f0b0015;
-        public static final int textLastAttackValue=0x7f0b0016;
-        public static final int textLogFile=0x7f0b0017;
-        public static final int textStatistics=0x7f0b0011;
-        public static final int textViewBSSID=0x7f0b0009;
-        public static final int textViewBSSIDValue=0x7f0b000a;
-        public static final int textViewConnections=0x7f0b001b;
-        public static final int textViewConnectionsValue=0x7f0b001c;
-        public static final int textViewDetails=0x7f0b0006;
-        public static final int textViewExternalIP=0x7f0b000d;
-        public static final int textViewExternalIPValue=0x7f0b000e;
-        public static final int textViewInternalIP=0x7f0b000b;
-        public static final int textViewInternalIPValue=0x7f0b000c;
-        public static final int textViewProtocol=0x7f0b001a;
-        public static final int textViewSSID=0x7f0b0007;
-        public static final int textViewSSIDValue=0x7f0b0008;
-        public static final int textViewStatus=0x7f0b0001;
-        public static final int toggleButtonOnOff=0x7f0b0004;
-        public static final int viewAnimator=0x7f0b0000;
-    }
-    public static final class layout {
-        public static final int activity_main=0x7f030000;
-        public static final int activity_viewlog=0x7f030001;
-        public static final int list_view_protocols_row=0x7f030002;
-    }
-    public static final class menu {
-        public static final int main=0x7f0a0000;
-    }
-    public static final class string {
-        public static final int action_settings=0x7f080001;
-        public static final int app_name=0x7f080000;
-        public static final int bssid=0x7f080008;
-        public static final int capital_off=0x7f080003;
-        public static final int capital_on=0x7f080002;
-        public static final int connections=0x7f08000c;
-        public static final int details=0x7f080006;
-        public static final int external_ip=0x7f08000a;
-        public static final int firstAttack=0x7f08000f;
-        public static final int internal_ip=0x7f080009;
-        public static final int lastAttack=0x7f080010;
-        public static final int logFile=0x7f08000e;
-        public static final int paranoid=0x7f080005;
-        public static final int pref_alarm=0x7f080012;
-        public static final int pref_alarm_default=0x7f080013;
-        public static final int pref_external_storage_summ=0x7f080016;
-        public static final int pref_external_storage_title=0x7f080015;
-        public static final int pref_notification=0x7f080017;
-        public static final int pref_storage=0x7f080014;
-        public static final int pref_tracing=0x7f08001a;
-        public static final int pref_upload=0x7f08001b;
-        public static final int pref_upload_connection=0x7f08001d;
-        public static final int pref_upload_connection_summ=0x7f08001e;
-        public static final int pref_upload_summ=0x7f08001c;
-        public static final int pref_vibration=0x7f080018;
-        public static final int pref_vibration_summ=0x7f080019;
-        public static final int services=0x7f08000b;
-        public static final int settings=0x7f080011;
-        public static final int ssid=0x7f080007;
-        public static final int statistics=0x7f08000d;
-        public static final int status=0x7f080004;
-    }
-    public static final class style {
-        /** 
-        Base application theme, dependent on API level. This theme is replaced
-        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-    
-
-            Theme customizations available in newer API levels can go in
-            res/values-vXX/styles.xml, while customizations related to
-            backward-compatibility can go here.
-        
-
-        Base application theme for API 11+. This theme completely replaces
-        AppBaseTheme from res/values/styles.xml on API 11+ devices.
-    
- API 11 theme customizations can go here. 
-
-        Base application theme for API 14+. This theme completely replaces
-        AppBaseTheme from BOTH res/values/styles.xml and
-        res/values-v11/styles.xml on API 14+ devices.
-    
- API 14 theme customizations can go here. 
-         */
-        public static final int AppBaseTheme=0x7f090000;
-        /**  Application theme. 
- All customizations that are NOT specific to a particular API-level can go here. 
-         */
-        public static final int AppTheme=0x7f090001;
-    }
-    public static final class xml {
-        public static final int preferences=0x7f050000;
-    }
-}
+/* AUTO-GENERATED FILE.  DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found.  It
+ * should not be modified by hand.
+ */
+
+package de.tudarmstadt.informatik.hostage;
+
+public final class R {
+    public static final class anim {
+        public static final int in_left_to_right=0x7f040000;
+        public static final int in_right_to_left=0x7f040001;
+        public static final int out_left_to_right=0x7f040002;
+        public static final int out_right_to_left=0x7f040003;
+    }
+    public static final class array {
+        public static final int protocols=0x7f070002;
+        public static final int upload_entries=0x7f070000;
+        public static final int upload_values=0x7f070001;
+    }
+    public static final class attr {
+    }
+    public static final class dimen {
+        /**  Default screen margins, per the Android Design guidelines. 
+
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    
+         */
+        public static final int activity_horizontal_margin=0x7f060000;
+        public static final int activity_vertical_margin=0x7f060001;
+    }
+    public static final class drawable {
+        public static final int ic_launcher=0x7f020000;
+        public static final int light_green=0x7f020001;
+        public static final int light_green_large=0x7f020002;
+        public static final int light_grey=0x7f020003;
+        public static final int light_grey_large=0x7f020004;
+        public static final int light_red=0x7f020005;
+        public static final int light_red_large=0x7f020006;
+        public static final int light_yellow=0x7f020007;
+        public static final int light_yellow_large=0x7f020008;
+    }
+    public static final class id {
+        public static final int TextViewServices=0x7f0b000f;
+        public static final int action_settings=0x7f0b001e;
+        public static final int buttonDeleteLog=0x7f0b001a;
+        public static final int buttonExportDatabase=0x7f0b0018;
+        public static final int buttonShowLog=0x7f0b0005;
+        public static final int buttonUploadLog=0x7f0b0019;
+        public static final int checkBoxParanoid=0x7f0b0003;
+        public static final int imageViewLight=0x7f0b0002;
+        public static final int layoutContainer=0x7f0b0012;
+        public static final int listViewProtocols=0x7f0b0010;
+        public static final int textFirstAttack=0x7f0b0013;
+        public static final int textFirstAttackValue=0x7f0b0014;
+        public static final int textLastAttack=0x7f0b0015;
+        public static final int textLastAttackValue=0x7f0b0016;
+        public static final int textLogFile=0x7f0b0017;
+        public static final int textStatistics=0x7f0b0011;
+        public static final int textViewBSSID=0x7f0b0009;
+        public static final int textViewBSSIDValue=0x7f0b000a;
+        public static final int textViewConnections=0x7f0b001c;
+        public static final int textViewConnectionsValue=0x7f0b001d;
+        public static final int textViewDetails=0x7f0b0006;
+        public static final int textViewExternalIP=0x7f0b000d;
+        public static final int textViewExternalIPValue=0x7f0b000e;
+        public static final int textViewInternalIP=0x7f0b000b;
+        public static final int textViewInternalIPValue=0x7f0b000c;
+        public static final int textViewProtocol=0x7f0b001b;
+        public static final int textViewSSID=0x7f0b0007;
+        public static final int textViewSSIDValue=0x7f0b0008;
+        public static final int textViewStatus=0x7f0b0001;
+        public static final int toggleButtonOnOff=0x7f0b0004;
+        public static final int viewAnimator=0x7f0b0000;
+    }
+    public static final class layout {
+        public static final int activity_main=0x7f030000;
+        public static final int activity_viewlog=0x7f030001;
+        public static final int list_view_protocols_row=0x7f030002;
+    }
+    public static final class menu {
+        public static final int main=0x7f0a0000;
+    }
+    public static final class string {
+        public static final int action_settings=0x7f080001;
+        public static final int app_name=0x7f080000;
+        public static final int bssid=0x7f080008;
+        public static final int capital_off=0x7f080003;
+        public static final int capital_on=0x7f080002;
+        public static final int connections=0x7f08000c;
+        public static final int details=0x7f080006;
+        public static final int external_ip=0x7f08000a;
+        public static final int firstAttack=0x7f08000f;
+        public static final int internal_ip=0x7f080009;
+        public static final int lastAttack=0x7f080010;
+        public static final int logFile=0x7f08000e;
+        public static final int paranoid=0x7f080005;
+        public static final int pref_alarm=0x7f080012;
+        public static final int pref_alarm_default=0x7f080013;
+        public static final int pref_external_storage_summ=0x7f080016;
+        public static final int pref_external_storage_title=0x7f080015;
+        public static final int pref_notification=0x7f080017;
+        public static final int pref_storage=0x7f080014;
+        public static final int pref_tracing=0x7f08001a;
+        public static final int pref_upload=0x7f08001b;
+        public static final int pref_upload_connection=0x7f08001d;
+        public static final int pref_upload_connection_summ=0x7f08001e;
+        public static final int pref_upload_summ=0x7f08001c;
+        public static final int pref_vibration=0x7f080018;
+        public static final int pref_vibration_summ=0x7f080019;
+        public static final int services=0x7f08000b;
+        public static final int settings=0x7f080011;
+        public static final int ssid=0x7f080007;
+        public static final int statistics=0x7f08000d;
+        public static final int status=0x7f080004;
+    }
+    public static final class style {
+        /** 
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    
+
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        
+
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    
+ API 11 theme customizations can go here. 
+
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    
+ API 14 theme customizations can go here. 
+         */
+        public static final int AppBaseTheme=0x7f090000;
+        /**  Application theme. 
+ All customizations that are NOT specific to a particular API-level can go here. 
+         */
+        public static final int AppTheme=0x7f090001;
+    }
+    public static final class xml {
+        public static final int preferences=0x7f050000;
+    }
+}

+ 51 - 41
res/layout/activity_viewlog.xml

@@ -23,48 +23,45 @@
         android:paddingLeft="@dimen/activity_horizontal_margin" >
     </LinearLayout>
 
-        <LinearLayout
+    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal" >
-        
-    <TextView
-        android:id="@+id/textFirstAttack"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/firstAttack"
-        android:textAppearance="?android:attr/textAppearanceMedium" />
-    
-	<TextView
-        android:id="@+id/textFirstAttackValue"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text=""
-        android:textAppearance="?android:attr/textAppearanceMedium" />
-	
-	</LinearLayout>
-	
-        
-	<LinearLayout
+
+        <TextView
+            android:id="@+id/textFirstAttack"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/firstAttack"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <TextView
+            android:id="@+id/textFirstAttackValue"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text=""
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+    </LinearLayout>
+
+    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal" >
-	
-    <TextView
-        android:id="@+id/textLastAttack"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/lastAttack"
-        android:textAppearance="?android:attr/textAppearanceMedium" />
-    
-   	<TextView
-        android:id="@+id/textLastAttackValue"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text=""
-        android:textAppearance="?android:attr/textAppearanceMedium" />
-   	
-   	</LinearLayout> 
+
+        <TextView
+            android:id="@+id/textLastAttack"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/lastAttack"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <TextView
+            android:id="@+id/textLastAttackValue"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text=""
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+    </LinearLayout>
 
     <TextView
         android:id="@+id/textLogFile"
@@ -73,12 +70,25 @@
         android:text="@string/logFile"
         android:textAppearance="?android:attr/textAppearanceLarge" />
 
-    <Button
-        android:id="@+id/buttonShowLog"
-        android:layout_width="wrap_content"
+    <LinearLayout
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:onClick="showLog"
-        android:text="Show Log" />
+        android:orientation="horizontal" >
+
+        <Button
+            android:id="@+id/buttonShowLog"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:onClick="showLog"
+            android:text="Show Log" />
+
+        <Button
+            android:id="@+id/buttonExportDatabase"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:onClick="exportDatabase"
+            android:text="Export Database" />
+    </LinearLayout>
 
     <LinearLayout
         android:layout_width="match_parent"

+ 1 - 1
res/values/strings.xml

@@ -13,7 +13,7 @@
     <string name="internal_ip">Internal IP:</string>
     <string name="external_ip">External IP:</string>
     <string name="services">Services</string>
-    <string name="connections">Active connections:</string>
+    <string name="connections">Recorded connections:</string>
     <string name="statistics">Statistics</string>
 	<string name="logFile">Log File</string>
 	<string name="firstAttack">First Attack:</string>

+ 1 - 1
res/xml/preferences.xml

@@ -33,7 +33,7 @@
 
         <RingtonePreference
             android:defaultValue="content://settings/system/notification_sound"
-            android:key="pref_notification"
+            android:key="pref_notification_sound"
             android:ringtoneType="notification"
             android:showDefault="true"
             android:showSilent="true"

+ 29 - 7
src/de/tudarmstadt/informatik/hostage/HoneyListener.java

@@ -3,7 +3,12 @@ package de.tudarmstadt.informatik.hostage;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.util.ArrayList;
+import java.util.Iterator;
 
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.widget.Toast;
 import de.tudarmstadt.informatik.hostage.handler.AbstractHandler;
 import de.tudarmstadt.informatik.hostage.handler.ByteArrayHandlerImpl;
 import de.tudarmstadt.informatik.hostage.handler.StringHandlerImpl;
@@ -25,6 +30,11 @@ public class HoneyListener implements Runnable {
 	private Thread thread;
 
 	private HoneyService service;
+    // Shared Preferences
+    private SharedPreferences pref;
+     
+    // Editor for Shared preferences
+    private Editor editor;
 
 	private boolean running = false;
 
@@ -35,6 +45,8 @@ public class HoneyListener implements Runnable {
 	public HoneyListener(HoneyService service, Protocol protocol) {
 		this.service = service;
 		this.protocol = protocol;
+        pref = service.getApplicationContext().getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE);
+        editor = pref.edit();
 	}
 
 	@Override
@@ -53,21 +65,27 @@ public class HoneyListener implements Runnable {
 					.getPort());
 			(this.thread = new Thread(this)).start();
 			running = true;
-			service.notifyUI();
+	    	editor.putBoolean(protocol + MainActivity.LISTENER, true);
+	    	editor.commit();
+			service.notifyUI(MainActivity.LISTENER);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
+
 	}
 
 	public void stop() {
 		try {
 			thread.interrupt();
 			server.close();
+			running = false;
+	    	editor.putBoolean(protocol + MainActivity.LISTENER, false);
+	    	editor.commit();
+			service.notifyUI(MainActivity.LISTENER);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
-		running = false;
-		service.notifyUI();
+
 	}
 
 	public String getProtocolName() {
@@ -75,12 +93,13 @@ public class HoneyListener implements Runnable {
 	}
 
 	public void refreshHandlers() {
-		for (AbstractHandler handler : handlers) {
+		for (Iterator<AbstractHandler> iterator = handlers.iterator(); iterator.hasNext(); ) {
+			AbstractHandler handler = iterator.next();
 			if (handler.isTerminated()) {
-				handlers.remove(handler);
+				iterator.remove();
 			}
 		}
-		service.notifyUI();
+		
 	}
 
 	private void addHandler() {
@@ -88,7 +107,10 @@ public class HoneyListener implements Runnable {
 			Socket client = server.accept();
 			handlers.add(newInstance(service, this, protocol.getClass()
 					.newInstance(), client));
-			service.notifyUI();
+	    	int handlerCount = pref.getInt(protocol + MainActivity.HANDLER_COUNT, 0);
+	    	editor.putInt(protocol + MainActivity.HANDLER_COUNT, handlerCount + 1);
+	    	editor.commit();    
+	    	service.notifyUI(MainActivity.HANDLER_COUNT);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}

+ 29 - 10
src/de/tudarmstadt/informatik/hostage/HoneyService.java

@@ -3,17 +3,23 @@ package de.tudarmstadt.informatik.hostage;
 import java.util.ArrayList;
 import java.util.List;
 
+import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.app.Service;
 import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.net.Uri;
 import android.os.Binder;
 import android.os.IBinder;
+import android.preference.PreferenceManager;
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.app.TaskStackBuilder;
 import android.support.v4.content.LocalBroadcastManager;
 import android.widget.Toast;
+import de.tudarmstadt.informatik.hostage.logging.Logger;
 import de.tudarmstadt.informatik.hostage.logging.SQLLogger;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 import de.tudarmstadt.informatik.hostage.ui.MainActivity;
@@ -26,9 +32,9 @@ public class HoneyService extends Service {
 		return listeners;
 	}
 
-	private SQLLogger log;
+	private Logger log;
 
-	public SQLLogger getLog() {
+	public Logger getLog() {
 		return log;
 	}
 
@@ -116,25 +122,38 @@ public class HoneyService extends Service {
 	}
 
 	// IPC
-
-	public void notifyUI() {
+	
+	public void notifyUI(String key) {
+		// Send Notification
+		SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
+		if (key.equals(MainActivity.HANDLER_COUNT)){
+			NotificationManager nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
+			Notification notification = new Notification();
+			String strRingtonePreference = pref.getString("pref_notification_sound", "DEFAULT_SOUND");  
+			notification.sound = Uri.parse(strRingtonePreference); 
+			if(pref.getBoolean("pref_vibration", true)){
+				notification.vibrate = new long[]{100, 200, 100, 200};
+			}
+			nManager.notify(0, notification);
+		}
+		// Inform UI of Preference Change
 		Intent intent = new Intent(MainActivity.BROADCAST);
 		LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
-	}
+	}	
+	
 
 	public void startListeners() {
 		for (HoneyListener listener : listeners) {
 			listener.start();
 		}
-		Toast.makeText(getApplicationContext(), "SERVICES STARTED!", Toast.LENGTH_LONG).show();
+		Toast.makeText(getApplicationContext(), "SERVICES STARTED!", Toast.LENGTH_SHORT).show();
 	}
 
 	public void stopListeners() {
 		for (HoneyListener listener : listeners) {
 			listener.stop();
 		}
-		notifyUI();
-		Toast.makeText(getApplicationContext(), "SERVICES STOPPED!", Toast.LENGTH_LONG).show();
+		Toast.makeText(getApplicationContext(), "SERVICES STOPPED!", Toast.LENGTH_SHORT).show();
 	}
 
 	public void startListener(String protocolName) {
@@ -143,7 +162,7 @@ public class HoneyService extends Service {
 				listener.start();
 			}
 		}
-		Toast.makeText(getApplicationContext(), protocolName + " SERVICE STARTED!", Toast.LENGTH_LONG).show();
+		Toast.makeText(getApplicationContext(), protocolName + " SERVICE STARTED!", Toast.LENGTH_SHORT).show();
 	}
 
 	public void stopListener(String protocolName) {
@@ -152,7 +171,7 @@ public class HoneyService extends Service {
 				listener.stop();
 			}
 		}
-		Toast.makeText(getApplicationContext(), protocolName + " SERVICE STOPPED!", Toast.LENGTH_LONG).show();
+		Toast.makeText(getApplicationContext(), protocolName + " SERVICE STOPPED!", Toast.LENGTH_SHORT).show();
 	}
 
 	public void toggleListener(String protocolName) {

+ 12 - 2
src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java

@@ -1,7 +1,9 @@
 package de.tudarmstadt.informatik.hostage.commons;
 
+import java.io.File;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
@@ -15,7 +17,9 @@ import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
+import android.os.Environment;
 import android.text.TextUtils;
+import android.util.Log;
 
 public final class HelperUtils {
 
@@ -91,6 +95,12 @@ public final class HelperUtils {
 		   return ipAddress;
 	}
 
-
-	
+	/* Checks if external storage is available for read and write */
+	public boolean isExternalStorageWritable() {
+	    String state = Environment.getExternalStorageState();
+	    if (Environment.MEDIA_MOUNTED.equals(state)) {
+	        return true;
+	    }
+	    return false;
+	}	
 }

+ 17 - 7
src/de/tudarmstadt/informatik/hostage/handler/AbstractHandler.java

@@ -7,8 +7,11 @@ import java.net.Socket;
 
 import de.tudarmstadt.informatik.hostage.HoneyListener;
 import de.tudarmstadt.informatik.hostage.HoneyService;
+import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
+import de.tudarmstadt.informatik.hostage.logging.Logger;
+import de.tudarmstadt.informatik.hostage.logging.Record;
+import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
 import de.tudarmstadt.informatik.hostage.logging.SQLLogger;
-import de.tudarmstadt.informatik.hostage.logging.SQLRecord;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 
 public abstract class AbstractHandler implements Runnable {
@@ -20,9 +23,11 @@ public abstract class AbstractHandler implements Runnable {
 	protected Thread thread;
 
 	private int attack_id;
+	private String BSSID;
+	private String SSID;
 
 	private HoneyListener listener;
-	protected SQLLogger log;
+	protected Logger log;
 
 	public AbstractHandler(HoneyService service, HoneyListener listener,
 			Protocol protocol, Socket client) {
@@ -31,7 +36,10 @@ public abstract class AbstractHandler implements Runnable {
 		this.protocol = protocol;
 		this.client = client;
 		this.thread = new Thread(this);
+		//TODO attack_id für jeden Logger		
 		attack_id = log.getAttackCount();
+		BSSID = HelperUtils.getBSSID(service.getApplicationContext());
+		SSID = HelperUtils.getSSID(service.getApplicationContext());
 		setSoTimeout(client);
 		thread.start();
 	}
@@ -75,16 +83,18 @@ public abstract class AbstractHandler implements Runnable {
 	abstract protected void talkToClient(InputStream in, OutputStream out)
 			throws IOException;
 
-	protected SQLRecord createRecord(String type, String packet) {
-		SQLRecord record = new SQLRecord();
+	protected Record createRecord(TYPE type, String packet) {
+		Record record = new Record();
 		record.setAttack_id(attack_id);
 		record.setProtocol(protocol.toString());
 		record.setType(type);
-		record.setTimestamp(String.valueOf(System.currentTimeMillis()));
-		record.setLocalIP(client.getLocalAddress().getHostAddress());
+		record.setTimestamp(System.currentTimeMillis());
+		record.setLocalIP(client.getLocalAddress());
 		record.setLocalPort(protocol.getPort());
-		record.setRemoteIP(client.getInetAddress().getHostAddress());
+		record.setRemoteIP(client.getInetAddress());
 		record.setRemotePort(client.getPort());
+		record.setBSSID(BSSID);
+		record.setSSID(SSID);
 		record.setPacket(packet);
 		return record;
 	}

+ 4 - 3
src/de/tudarmstadt/informatik/hostage/handler/ByteArrayHandlerImpl.java

@@ -10,6 +10,7 @@ import de.tudarmstadt.informatik.hostage.HoneyListener;
 import de.tudarmstadt.informatik.hostage.HoneyService;
 import de.tudarmstadt.informatik.hostage.io.ByteArrayReaderWriter;
 import de.tudarmstadt.informatik.hostage.io.ReaderWriter;
+import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol.TALK_FIRST;
 import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
@@ -33,17 +34,17 @@ public class ByteArrayHandlerImpl extends AbstractHandler {
 			outputLine = protocol.processMessage(null);
 			stream.write(outputLine);
 			for (ByteArray s : outputLine) {
-				log.addRecord(createRecord("SEND", s.toString()));
+				log.write(createRecord(TYPE.SEND, s.toString()));
 			}
 		}
 
 		while (!thread.isInterrupted() && (inputLine = stream.read()) != null) {
-			log.addRecord(createRecord("RECEIVE", inputLine.toString()));
+			log.write(createRecord(TYPE.RECEIVE, inputLine.toString()));
 			outputLine = protocol.processMessage(inputLine);
 			if (outputLine != null) {
 				stream.write(outputLine);
 				for (ByteArray s : outputLine) {
-					log.addRecord(createRecord("SEND", s.toString()));
+					log.write(createRecord(TYPE.SEND, s.toString()));
 				}
 			}
 			if (protocol.isClosed()) {

+ 4 - 3
src/de/tudarmstadt/informatik/hostage/handler/StringHandlerImpl.java

@@ -10,6 +10,7 @@ import de.tudarmstadt.informatik.hostage.HoneyListener;
 import de.tudarmstadt.informatik.hostage.HoneyService;
 import de.tudarmstadt.informatik.hostage.io.ReaderWriter;
 import de.tudarmstadt.informatik.hostage.io.StringReaderWriter;
+import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol.TALK_FIRST;
 
@@ -32,17 +33,17 @@ public class StringHandlerImpl extends AbstractHandler {
 			outputLine = protocol.processMessage(null);
 			stream.write(outputLine);
 			for (String s : outputLine) {
-				log.addRecord(createRecord("SEND", s));
+				log.write(createRecord(TYPE.SEND, s));
 			}
 		}
 
 		while (!thread.isInterrupted() && (inputLine = stream.read()) != null) {
-			log.addRecord(createRecord("RECEIVE", inputLine));
+			log.write(createRecord(TYPE.RECEIVE, inputLine));
 			outputLine = protocol.processMessage(inputLine);
 			if (outputLine != null) {
 				stream.write(outputLine);
 				for (String s : outputLine) {
-					log.addRecord(createRecord("SEND", s));
+					log.write(createRecord(TYPE.SEND, s));
 				}
 			}
 			if (protocol.isClosed()) {

+ 112 - 51
src/de/tudarmstadt/informatik/hostage/logging/DatabaseHandler.java

@@ -1,8 +1,11 @@
 package de.tudarmstadt.informatik.hostage.logging;
 
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 
+import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
@@ -28,10 +31,22 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	private static final String KEY_TYPE = "type";
 	private static final String KEY_TIME = "timestamp";
 	private static final String KEY_LOCAL_IP = "localIP";
+	private static final String KEY_LOCAL_HOSTNAME = "localHostName";
 	private static final String KEY_LOCAL_PORT = "localPort";
 	private static final String KEY_REMOTE_IP = "remoteIP";
+	private static final String KEY_REMOTE_HOSTNAME = "remoteHostName";
 	private static final String KEY_REMOTE_PORT = "remotePort";
+	private static final String KEY_BSSID = "bssid";
+	private static final String KEY_SSID = "ssid";
 	private static final String KEY_PACKET = "packet";
+	
+	// Database sql create statement
+	private static final String CREATE_RECORD_TABLE = "CREATE TABLE " + TABLE_RECORDS + "(" + KEY_ID
+			+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ATTACK_ID + " INTEGER," + KEY_PROTOCOL + " TEXT,"
+			+ KEY_TYPE + " TEXT," + KEY_TIME + " INTEGER," + KEY_LOCAL_IP
+			+ " BLOB," + KEY_LOCAL_HOSTNAME + " TEXT," + KEY_LOCAL_PORT + " INTEGER," + KEY_REMOTE_IP
+			+ " BLOB," + KEY_REMOTE_HOSTNAME + " TEXT," + KEY_REMOTE_PORT + " INTEGER," 
+			+ KEY_BSSID + " TEXT," + KEY_SSID + " TEXT," +  KEY_PACKET + " TEXT" + ")";
 
 	public DatabaseHandler(Context context) {
 		super(context, DATABASE_NAME, null, DATABASE_VERSION);
@@ -40,12 +55,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	// Creating Tables
 	@Override
 	public void onCreate(SQLiteDatabase db) {
-		String CREATE_RECORD_TABLE = "CREATE TABLE " + TABLE_RECORDS + "(" + KEY_ID
-				+ " INTEGER PRIMARY KEY," + KEY_ATTACK_ID + " INTEGER," + KEY_PROTOCOL + " TEXT,"
-				+ KEY_TYPE + " TEXT," + KEY_TIME + " TEXT," + KEY_LOCAL_IP
-				+ " Text," + KEY_LOCAL_PORT + " INTEGER," + KEY_REMOTE_IP
-				+ " TEXT," + KEY_REMOTE_PORT + " INTEGER," + KEY_PACKET
-				+ " TEXT" + ")";
 		db.execSQL(CREATE_RECORD_TABLE);
 	}
 
@@ -60,18 +69,22 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	}
 
 	// Adding new record
-	public void addRecord(SQLRecord record) {
+	public void addRecord(Record record) {
 		SQLiteDatabase db = this.getWritableDatabase();
 
 		ContentValues values = new ContentValues();
 		values.put(KEY_ATTACK_ID, record.getAttack_id()); // Log Attack ID
-		values.put(KEY_PROTOCOL, record.getProtocol());
-		values.put(KEY_TYPE, record.getType()); // Log Type
+		values.put(KEY_PROTOCOL, record.getProtocol().toString());
+		values.put(KEY_TYPE, record.getType().name()); // Log Type
 		values.put(KEY_TIME, record.getTimestamp()); // Log Timestamp
-		values.put(KEY_LOCAL_IP, record.getLocalIP()); // Log Local IP
+		values.put(KEY_LOCAL_IP, record.getLocalIP().getAddress()); // Log Local IP
+		values.put(KEY_LOCAL_HOSTNAME, record.getLocalIP().getHostName());
 		values.put(KEY_LOCAL_PORT, record.getLocalPort()); // Log Local Port
-		values.put(KEY_REMOTE_IP, record.getRemoteIP()); // Log Remote IP
+		values.put(KEY_REMOTE_IP, record.getRemoteIP().getAddress()); // Log Remote IP
+		values.put(KEY_REMOTE_HOSTNAME, record.getRemoteIP().getHostName());
 		values.put(KEY_REMOTE_PORT, record.getRemotePort()); // Log Remote Port
+		values.put(KEY_BSSID, record.getBSSID());
+		values.put(KEY_SSID, record.getSSID());
 		values.put(KEY_PACKET, record.getPacket()); // Log Packet
 
 		// Inserting Row
@@ -80,22 +93,34 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	}
 
 	// Getting single record
-	public SQLRecord getRecord(int id) {
+	public Record getRecord(int id) {
 		SQLiteDatabase db = this.getReadableDatabase();
 
-		Cursor cursor = db.query(TABLE_RECORDS, new String[] { KEY_ID,
-				KEY_ATTACK_ID, KEY_PROTOCOL, KEY_TYPE, KEY_TIME, KEY_LOCAL_IP,
-				KEY_LOCAL_PORT, KEY_REMOTE_IP, KEY_REMOTE_PORT, KEY_PACKET },
+		Cursor cursor = db.query(TABLE_RECORDS, null,
 				KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null,
 				null, null);
 		if (cursor != null)
 			cursor.moveToFirst();
 
-		SQLRecord record = new SQLRecord(Integer.parseInt(cursor.getString(0)),
-				Integer.parseInt(cursor.getString(1)), cursor.getString(2), cursor.getString(3),
-				cursor.getString(4), cursor.getString(5),
-				Integer.parseInt(cursor.getString(6)), cursor.getString(7),
-				Integer.parseInt(cursor.getString(8)), cursor.getString(9));
+		
+		Record record = new Record();
+		try {
+		record.setID(Integer.parseInt(cursor.getString(0)));
+		record.setAttack_id(cursor.getLong(1));
+		record.setProtocol(cursor.getString(2));
+		record.setType(cursor.getString(3).equals("SEND") ? TYPE.SEND : TYPE.RECEIVE);
+		record.setTimestamp(cursor.getLong(4));
+		record.setLocalIP(InetAddress.getByAddress(cursor.getString(6), cursor.getBlob(5)));
+		record.setLocalPort(Integer.parseInt(cursor.getString(7)));
+		record.setRemoteIP(InetAddress.getByAddress(cursor.getString(9), cursor.getBlob(8)));
+		record.setRemotePort(Integer.parseInt(cursor.getString(10)));
+		record.setBSSID(cursor.getString(11));
+		record.setSSID(cursor.getString(12));
+		record.setPacket(cursor.getString(13));
+		} catch (UnknownHostException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 		
         cursor.close();
 		db.close();
@@ -104,8 +129,8 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	}
 
 	// Getting All Records
-	public ArrayList<SQLRecord> getAllRecords() {
-		ArrayList<SQLRecord> contactList = new ArrayList<SQLRecord>();
+	public ArrayList<Record> getAllRecords() {
+		ArrayList<Record> recordList = new ArrayList<Record>();
 		// Select All Query
 		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS;
 
@@ -115,26 +140,33 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 		// looping through all rows and adding to list
 		if (cursor.moveToFirst()) {
 			do {
-				SQLRecord record = new SQLRecord();
+				Record record = new Record();
+				try {
 				record.setID(Integer.parseInt(cursor.getString(0)));
-				record.setAttack_id(Integer.parseInt(cursor.getString(1)));
+				record.setAttack_id(cursor.getLong(1));
 				record.setProtocol(cursor.getString(2));
-				record.setType(cursor.getString(3));
-				record.setTimestamp(cursor.getString(4));
-				record.setLocalIP(cursor.getString(5));
-				record.setLocalPort(Integer.parseInt(cursor.getString(6)));
-				record.setRemoteIP(cursor.getString(7));
-				record.setRemotePort(Integer.parseInt(cursor.getString(8)));
-				record.setPacket(cursor.getString(9));
+				record.setType(cursor.getString(3).equals("SEND") ? TYPE.SEND : TYPE.RECEIVE);
+				record.setTimestamp(cursor.getLong(4));
+				record.setLocalIP(InetAddress.getByAddress(cursor.getString(6), cursor.getBlob(5)));
+				record.setLocalPort(Integer.parseInt(cursor.getString(7)));
+				record.setRemoteIP(InetAddress.getByAddress(cursor.getString(9), cursor.getBlob(8)));
+				record.setRemotePort(Integer.parseInt(cursor.getString(10)));
+				record.setBSSID(cursor.getString(11));
+				record.setSSID(cursor.getString(12));
+				record.setPacket(cursor.getString(13));
+				} catch (UnknownHostException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
 				
 				// Adding record to list
-				contactList.add(record);
+				recordList.add(record);
 			} while (cursor.moveToNext());
 		}
         cursor.close();
 		db.close();
 		// return record list
-		return contactList;
+		return recordList;
 	}
 	
 	// Getting record Count
@@ -165,7 +197,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     
 	// Getting record Count
     public int getAttackPerProtokolCount(String protocol) {
-        String countQuery = "SELECT  * FROM " + TABLE_RECORDS + " WHERE " + KEY_PROTOCOL + " = " + "'" + protocol + "'" +  " GROUP BY " + KEY_ATTACK_ID;
+        String countQuery = "SELECT  * FROM " + TABLE_RECORDS + " WHERE " + KEY_PROTOCOL + " = " + "'" + protocol + "'" + " GROUP BY " + KEY_ATTACK_ID;
         SQLiteDatabase db = this.getReadableDatabase();
         Cursor cursor = db.rawQuery(countQuery, null);
         int result = cursor.getCount();
@@ -176,25 +208,54 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         return result;
     }
     
-    
-    public SQLRecord getFirstEntry(){
-    	//TODO Fixen oder löschen
-    	SQLiteDatabase db = this.getReadableDatabase();
-    	Cursor cursor = db.query(TABLE_RECORDS, new String[] { KEY_ID,
-				KEY_ATTACK_ID, KEY_PROTOCOL, KEY_TYPE, KEY_TIME, KEY_LOCAL_IP,
-				KEY_LOCAL_PORT, KEY_REMOTE_IP, KEY_REMOTE_PORT, KEY_PACKET },
-				KEY_ID + "=?", new String[] { "min(" + KEY_ID + ")" }, null,
-                null, null, null);
+	// Getting first Record for each AttackId
+    public ArrayList<Record> getRecordOfEachAtack() {
+    	ArrayList<Record> recordList = new ArrayList<Record>();
+        String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " WHERE " + " GROUP BY " + KEY_ATTACK_ID;
+        SQLiteDatabase db = this.getReadableDatabase();
+        Cursor cursor = db.rawQuery(selectQuery, null);
 		
-    	if (cursor != null)
-			cursor.moveToFirst();
+        // looping through all rows and adding to list
+		if (cursor.moveToFirst()) {
+			do {
+				Record record = new Record();
+				try {
+				record.setID(Integer.parseInt(cursor.getString(0)));
+				record.setAttack_id(cursor.getLong(1));
+				record.setProtocol(cursor.getString(2));
+				record.setType(cursor.getString(3).equals("SEND") ? TYPE.SEND : TYPE.RECEIVE);
+				record.setTimestamp(cursor.getLong(4));
+				record.setLocalIP(InetAddress.getByAddress(cursor.getString(6), cursor.getBlob(5)));
+				record.setLocalPort(Integer.parseInt(cursor.getString(7)));
+				record.setRemoteIP(InetAddress.getByAddress(cursor.getString(9), cursor.getBlob(8)));
+				record.setRemotePort(Integer.parseInt(cursor.getString(10)));
+				record.setBSSID(cursor.getString(11));
+				record.setSSID(cursor.getString(12));
+				record.setPacket(cursor.getString(13));
+				} catch (UnknownHostException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+				
+				// Adding record to list
+				recordList.add(record);
+			} while (cursor.moveToNext());
+		}       
+        cursor.close();
  
-		SQLRecord record = new SQLRecord(Integer.parseInt(cursor.getString(0)),
-				Integer.parseInt(cursor.getString(1)), cursor.getString(2), cursor.getString(3),
-				cursor.getString(4), cursor.getString(5),
-				Integer.parseInt(cursor.getString(6)), cursor.getString(7),
-				Integer.parseInt(cursor.getString(8)), cursor.getString(9));    
-		return record;
+        // return count
+        db.close();
+        return recordList;
+    }
+    
+    public boolean bssidSeen(String protocol, String BSSID){
+        String countQuery = "SELECT  * FROM " + TABLE_RECORDS + " WHERE " + KEY_PROTOCOL + " = " + "'" + protocol + "'" + " AND " + KEY_BSSID + " = " + "'" + BSSID + "'";
+        SQLiteDatabase db = this.getReadableDatabase();
+        Cursor cursor = db.rawQuery(countQuery, null);
+        int result = cursor.getCount();
+        cursor.close();
+        
+        return result > 0;
     }
     
     //Delete all Data from Database

+ 46 - 0
src/de/tudarmstadt/informatik/hostage/logging/FileLogger.java

@@ -0,0 +1,46 @@
+/*package de.tudarmstadt.informatik.hostage.logging;
+
+import java.io.File;
+import java.io.FileOutputStream;
+
+import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
+import android.content.Context;
+
+public class FileLogger implements Logger {
+
+	private FileOutputStream log = null;
+
+	public FileLogger(Context context) {
+		File path = HelperUtils.getSDStorageDir("logs");
+		File logFile = new File(path, "hostage.log");
+		try {
+//TODO log auf SD speichern			log = context.openFileOutput(logFile, Context.MODE_APPEND);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public synchronized void write(Record record) {
+		if (log != null) {
+			try {
+				log.write((record.toString() + "\n").getBytes());
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	@Override
+	public void close() {
+		if (log != null) {
+			try {
+				log.flush();
+				log.close();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+}*/

+ 11 - 0
src/de/tudarmstadt/informatik/hostage/logging/Logger.java

@@ -0,0 +1,11 @@
+package de.tudarmstadt.informatik.hostage.logging;
+
+public interface Logger {
+
+	void write(Record record);
+	
+	int getAttackCount();
+
+	void close();
+
+}

+ 172 - 0
src/de/tudarmstadt/informatik/hostage/logging/Record.java

@@ -0,0 +1,172 @@
+package de.tudarmstadt.informatik.hostage.logging;
+
+import java.io.Serializable;
+import java.net.InetAddress;
+
+import de.tudarmstadt.informatik.hostage.protocol.Protocol;
+
+public class Record implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	public static enum TYPE {
+		SEND, RECEIVE
+	};
+
+	private int id;
+	private long attack_id;
+	private String protocol;
+	private TYPE type;
+	private long timestamp;
+	private InetAddress localIP;
+	private int localPort;
+	private InetAddress remoteIP;
+	private int remotePort;
+	private String BSSID;
+	private String SSID;
+	private String packet;
+	
+	
+
+	/**
+	 * @return the id
+	 */
+	public int getID() {
+		return id;
+	}
+
+	/**
+	 * @param id
+	 *            the id to set
+	 */
+	public void setID(int id) {
+		this.id = id;
+	}
+
+	/**
+	 * @return the attack_id
+	 */
+	public long getAttack_id() {
+		return attack_id;
+	}
+
+	/**
+	 * @param attack_id
+	 *            the attack_id to set
+	 */
+	public void setAttack_id(long attack_id) {
+		this.attack_id = attack_id;
+	}
+
+	/**
+	 * @return the protocol
+	 */
+	public String getProtocol() {
+		return protocol;
+	}
+
+	/**
+	 * @param string the protocol to set
+	 */
+	public void setProtocol(String string) {
+		this.protocol = string;
+	}
+
+	public TYPE getType() {
+		return type;
+	}
+
+	public void setType(TYPE type) {
+		this.type = type;
+	}
+
+	public long getTimestamp() {
+		return timestamp;
+	}
+
+	public void setTimestamp(long timestamp) {
+		this.timestamp = timestamp;
+	}
+
+	public InetAddress getLocalIP() {
+		return localIP;
+	}
+
+	public void setLocalIP(InetAddress localIP) {
+		this.localIP = localIP;
+	}
+
+	public int getLocalPort() {
+		return localPort;
+	}
+
+	public void setLocalPort(int localPort) {
+		this.localPort = localPort;
+	}
+
+	public InetAddress getRemoteIP() {
+		return remoteIP;
+	}
+
+	public void setRemoteIP(InetAddress remoteIP) {
+		this.remoteIP = remoteIP;
+	}
+
+	public int getRemotePort() {
+		return remotePort;
+	}
+
+	public void setRemotePort(int remotePort) {
+		this.remotePort = remotePort;
+	}
+
+	/**
+	 * @return the bSSID
+	 */
+	public String getBSSID() {
+		return BSSID;
+	}
+
+	/**
+	 * @param bSSID the bSSID to set
+	 */
+	public void setBSSID(String bSSID) {
+		BSSID = bSSID;
+	}
+
+	/**
+	 * @return the sSID
+	 */
+	public String getSSID() {
+		return SSID;
+	}
+
+	/**
+	 * @param sSID the sSID to set
+	 */
+	public void setSSID(String sSID) {
+		SSID = sSID;
+	}
+
+	public String getPacket() {
+		return packet;
+	}
+
+	public void setPacket(String packet) {
+		this.packet = packet;
+	}
+
+	@Override
+	public String toString() {
+		return String.format("%s [%d,%s:%d,%s:%d,%s]",
+				((type == TYPE.SEND) ? "SEND" : "RECEIVE"), timestamp,
+				localIP.getHostAddress(), localPort, remoteIP.getHostAddress(),
+				remotePort, packet);
+	}
+	
+	public String toStringJson(){
+		return String.format("{ \"src\":{\"IP\": %s, \"Port\": %d} \"dst\": {\"IP\": %s, \"Port\": %d} \"type\": 0 \"name\": \"HOsTaGe\" }", localIP.getHostAddress(), localPort, remoteIP.getHostAddress(),
+				remotePort);
+	}
+	
+}

+ 33 - 27
src/de/tudarmstadt/informatik/hostage/logging/SQLLogger.java

@@ -1,50 +1,53 @@
 package de.tudarmstadt.informatik.hostage.logging;
 
+import java.io.File;
 import java.io.FileOutputStream;
 import java.util.ArrayList;
 
 import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Environment;
+import android.preference.PreferenceManager;
 
-public class SQLLogger{
+public class SQLLogger implements Logger{
 	Context context;
 	DatabaseHandler dbh;
-	private FileOutputStream log = null;
 	
 	public SQLLogger(Context context){
 		this.context = context;
 		dbh = new DatabaseHandler(context);		
 	}
 
-	public void addRecord(SQLRecord record) {
+	public synchronized void write(Record record) {
 		dbh.addRecord(record);
 	}
 	
-	public void exportDatabase(){
+	public void exportDatabase(String format){
 		try {
-			log = context.openFileOutput("hostage.log", Context.MODE_APPEND);
+			FileOutputStream log;
+			SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
+			if(pref.getBoolean("pref_external_storage", false)){
+				//TODO Fehlermeldung wenn keine SD karte gefunden werden kann
+				log = context.openFileOutput("hostage_" + format + "_" + System.currentTimeMillis() + ".log", Context.MODE_PRIVATE);
+			} else{
+				File file = new File(Environment.getExternalStorageDirectory(), "hostage_" + format + "_" + System.currentTimeMillis() + ".log");
+				log = new FileOutputStream(file);
+			}
+			
+			ArrayList<Record> records = dbh.getAllRecords();
+			for(Record record : records){
+				if(format.equals("JSON")){
+					log.write((record.toStringJson() + "\n").getBytes());
+				}else {
+					log.write((record.toString() + "\n").getBytes());
+				}
+			}
+			log.flush();
+			log.close();
 		} catch (Exception e) {
 			e.printStackTrace();
-		}		
-		
-		ArrayList<SQLRecord> records = dbh.getAllRecords();
-		for(SQLRecord record : records){
-			writeLine(record);
-		}
-	}
-	
-	private void writeLine(SQLRecord record){
-		if (log != null) {
-			try {
-				log.write((record.toString() + "\n").getBytes());
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}		
-	}
-	
-	public void exportDatabaseJson(){
-		//TODO JSON implementieren, beachten dass nur jeder Angriff nicht jeder Record geloggt wird
-	}
+		}	
+	}	
 	
 	public int getAttackCount(){
 		return dbh.getAttackCount();
@@ -58,5 +61,8 @@ public class SQLLogger{
 		dbh.clearData();
 	}
 
-
+	@Override
+	public void close() {
+		// TODO Auto-generated method stub		
+	}
 }

+ 56 - 20
src/de/tudarmstadt/informatik/hostage/ui/MainActivity.java

@@ -12,10 +12,13 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
 import android.net.ConnectivityManager;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.support.v4.content.LocalBroadcastManager;
+import android.util.Log;
 import android.view.GestureDetector;
 import android.view.GestureDetector.SimpleOnGestureListener;
 import android.view.Menu;
@@ -34,7 +37,6 @@ import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.ToggleButton;
 import android.widget.ViewAnimator;
-import de.tudarmstadt.informatik.hostage.HoneyListener;
 import de.tudarmstadt.informatik.hostage.HoneyService;
 import de.tudarmstadt.informatik.hostage.HoneyService.LocalBinder;
 import de.tudarmstadt.informatik.hostage.R;
@@ -44,6 +46,9 @@ import de.tudarmstadt.informatik.hostage.logging.DatabaseHandler;
 public class MainActivity extends Activity {
 
 	public static final String BROADCAST = "de.tudarmstadt.informatik.hostage.BROADCAST";
+	public static final String PREF_NAME = "de.tudarmstadt.informatik.hostage.SESSION_DATA";
+	public static final String LISTENER = "_LISTENER";
+	public static final String HANDLER_COUNT = "_HANDLER_COUNT";
 
 	public static final int LIGHT_GREY = 0x01;
 	public static final int LIGHT_GREEN = 0x02;
@@ -51,6 +56,9 @@ public class MainActivity extends Activity {
 	public static final int LIGHT_YELLOW = 0x04;
 
 	private HoneyService mService;
+	private SharedPreferences pref;
+	private Editor editor;
+	private DatabaseHandler dbh;
 
 	private ViewAnimator viewAnimator;
 	private GestureDetector gestureDetector;
@@ -72,6 +80,9 @@ public class MainActivity extends Activity {
 
 		initViewAnimator();
 		initListView();
+		pref = getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE);
+		dbh = new DatabaseHandler(getApplicationContext());
+		editor = pref.edit();
 	}
 
 	@Override
@@ -110,6 +121,18 @@ public class MainActivity extends Activity {
 		unregisterNetReceiver();
 		super.onStop();
 	}
+	
+	@Override
+	protected void onDestroy(){
+		super.onDestroy();
+		//TODO vielleicht wieder einfügen
+		/*
+		if(!isServiceRunning()){
+	    	editor.clear();
+	    	editor.commit();
+		}
+		*/
+	}
 
 	@Override
 	protected void onResume() {
@@ -118,7 +141,6 @@ public class MainActivity extends Activity {
 	}
 
 
-
 	public void buttonOnOffClick(View view) {
 		if (((ToggleButton) view).isChecked()) {
 			if (isParanoid()) {
@@ -128,6 +150,7 @@ public class MainActivity extends Activity {
 			}			
 			startAndBind();
 		} else {
+			mService.stopListeners();
 			stopAndUnbind();
 		}
 	}
@@ -138,9 +161,10 @@ public class MainActivity extends Activity {
 	}
 
 	private void stopAndUnbind() {
-		mService.stopListeners();
 		unbindService(mConnection);
 		stopService(getServiceIntent());
+    	editor.clear();
+    	editor.commit();
 	}
 	
 	private ServiceConnection mConnection = new ServiceConnection() {
@@ -222,6 +246,8 @@ public class MainActivity extends Activity {
 		}
 		return false;
 	}
+	
+
 
 
 	private void registerReceiver() {
@@ -259,34 +285,46 @@ public class MainActivity extends Activity {
 		}
 
 	};
+	
+	
 
-	private void updateUI() {
+	private void updateUI() {		
+//		SharedPreferences pref = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
 		boolean activeListeners = false;
 		boolean activeHandlers = false;
-
-		if(mService != null){
-		for (HoneyListener listener : mService.getListeners()) {
-			if (listener.isRunning()) {
+		boolean yellowLight = false;
+		
+		for(String protocol : getResources().getStringArray(R.array.protocols)){
+			if(pref.getBoolean(protocol + LISTENER, false)){
 				activeListeners = true;
-				if (listener.getHandlerCount() == 0) {
-					updateProtocolLight(LIGHT_GREEN, listener.getProtocolName());
-				} else {
+				int handlerCount = pref.getInt(protocol + HANDLER_COUNT, 0);
+				if(handlerCount > 0){
 					activeHandlers = true;
-					updateProtocolLight(LIGHT_RED, listener.getProtocolName());
+					updateProtocolLight(LIGHT_RED, protocol);
+					updateProtocolConnections(handlerCount, protocol);
+				} else{
+					if(dbh.bssidSeen(protocol, HelperUtils.getBSSID(getApplicationContext()))){
+						updateProtocolLight(LIGHT_YELLOW, protocol);
+						yellowLight = true;
+					} else{
+						updateProtocolLight(LIGHT_GREEN, protocol);						
+					}
+					updateProtocolConnections(0, protocol);
 				}
-				updateProtocolConnections(listener.getHandlerCount(),
-						listener.getProtocolName());
-			} else {
-				updateProtocolLight(LIGHT_GREY, listener.getProtocolName());
+			}else{
+				updateProtocolLight(LIGHT_GREY, protocol);
 			}
 		}
-		}
 
 		if (activeListeners) {
 			if (activeHandlers) {
 				updateStatusLight(LIGHT_RED);
 			} else {
-				updateStatusLight(LIGHT_GREEN);
+				if(yellowLight){
+					updateStatusLight(LIGHT_YELLOW);
+				} else {
+					updateStatusLight(LIGHT_GREEN);
+				}					
 			}
 			((ToggleButton) findViewById(R.id.toggleButtonOnOff))
 					.setChecked(true);
@@ -332,14 +370,12 @@ public class MainActivity extends Activity {
 					break;
 				case LIGHT_GREEN:
 					d.put("light", String.valueOf(R.drawable.light_green));
-					d.put("connections", "0");
 					break;
 				case LIGHT_RED:
 					d.put("light", String.valueOf(R.drawable.light_red));
 					break;
 				case LIGHT_YELLOW:
 					d.put("light", String.valueOf(R.drawable.light_yellow));
-					d.put("connections", "0");
 					break;
 				}
 			}

+ 7 - 2
src/de/tudarmstadt/informatik/hostage/ui/ViewLog.java

@@ -8,6 +8,7 @@ import java.util.HashMap;
 
 import de.tudarmstadt.informatik.hostage.R;
 import de.tudarmstadt.informatik.hostage.logging.DatabaseHandler;
+import de.tudarmstadt.informatik.hostage.logging.SQLLogger;
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
@@ -47,6 +48,10 @@ public class ViewLog extends Activity {
 	    }
 	}
 
+	public void exportDatabase(View view){
+		SQLLogger log = new SQLLogger(this);
+		log.exportDatabase("DEFAULT");
+	}
 	
 	public void showLog(View view){
 		startActivity(new Intent(this, ViewLogTable.class));
@@ -86,11 +91,11 @@ public class ViewLog extends Activity {
 		int attackCount = dbh.getRecordCount();
 		if(attackCount > 0){
 			SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
-	        Date resultdate = new Date(Long.parseLong(dbh.getRecord(1).getTimestamp()));
+	        Date resultdate = new Date(dbh.getRecord(1).getTimestamp());
 	        TextView text = (TextView) findViewById(R.id.textFirstAttackValue);
 	        text.setText(sdf.format(resultdate));
 	        text = (TextView) findViewById(R.id.textLastAttackValue);
-	        resultdate = new Date(Long.parseLong(dbh.getRecord( dbh.getRecordCount()).getTimestamp()));
+	        resultdate = new Date(dbh.getRecord( dbh.getRecordCount()).getTimestamp());
 	        text.setText(sdf.format(resultdate));
 		} else {
 	        TextView text = (TextView) findViewById(R.id.textFirstAttackValue);

+ 2 - 2
src/de/tudarmstadt/informatik/hostage/ui/ViewLogTable.java

@@ -1,7 +1,7 @@
 package de.tudarmstadt.informatik.hostage.ui;
 
 import de.tudarmstadt.informatik.hostage.logging.DatabaseHandler;
-import de.tudarmstadt.informatik.hostage.logging.SQLRecord;
+import de.tudarmstadt.informatik.hostage.logging.Record;
 import android.app.Activity;
 import android.os.Bundle;
 import android.widget.ScrollView;
@@ -14,7 +14,7 @@ public class ViewLogTable extends Activity{
 		super.onCreate(savedInstanceState);
 		DatabaseHandler db = new DatabaseHandler(getBaseContext());
 		String log = "";
-		for(SQLRecord record: db.getAllRecords())
+		for(Record record: db.getAllRecords())
 		{
 			log = log + record.toString() + "\n";
 		}