Browse Source

merge conflicts fixed

Alexander Brakowski 9 years ago
parent
commit
5bf42a8e9d
25 changed files with 487 additions and 173 deletions
  1. 1 1
      build.gradle
  2. 39 15
      native/bind.c
  3. 18 0
      res/layout/fragment_connectioninfo_dialog.xml
  4. 28 6
      res/layout/fragment_record_detail.xml
  5. 3 0
      res/values-de/strings.xml
  6. 1 0
      res/values/connection_info.xml
  7. 65 49
      res/values/strings.xml
  8. 12 0
      src/de/tudarmstadt/informatik/hostage/Handler.java
  9. 33 19
      src/de/tudarmstadt/informatik/hostage/Hostage.java
  10. 8 7
      src/de/tudarmstadt/informatik/hostage/Listener.java
  11. 26 1
      src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java
  12. 7 1
      src/de/tudarmstadt/informatik/hostage/logging/AttackRecord.java
  13. 8 0
      src/de/tudarmstadt/informatik/hostage/logging/Record.java
  14. 7 0
      src/de/tudarmstadt/informatik/hostage/net/MyDatagramSocketFactory.java
  15. 1 0
      src/de/tudarmstadt/informatik/hostage/persistence/HostageDBContract.java
  16. 163 50
      src/de/tudarmstadt/informatik/hostage/persistence/HostageDBOpenHelper.java
  17. 3 0
      src/de/tudarmstadt/informatik/hostage/protocol/SMB.java
  18. 12 4
      src/de/tudarmstadt/informatik/hostage/protocol/smbutils/NBSS.java
  19. 20 2
      src/de/tudarmstadt/informatik/hostage/protocol/smbutils/NMB.java
  20. 1 0
      src/de/tudarmstadt/informatik/hostage/sync/tracing/TracingSyncService.java
  21. 8 2
      src/de/tudarmstadt/informatik/hostage/ui/fragment/ConnectionInfoDialogFragment.java
  22. 2 2
      src/de/tudarmstadt/informatik/hostage/ui/fragment/HomeFragment.java
  23. 3 0
      src/de/tudarmstadt/informatik/hostage/ui/fragment/RecordDetailFragment.java
  24. 1 1
      src/de/tudarmstadt/informatik/hostage/ui/fragment/ServicesFragment.java
  25. 17 13
      src/de/tudarmstadt/informatik/hostage/ui/fragment/StatisticsFragment.java

+ 1 - 1
build.gradle

@@ -3,7 +3,7 @@ buildscript {
         mavenCentral()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:0.13.2'
+        classpath 'com.android.tools.build:gradle:0.14.2'
     }
 }
 apply plugin: 'com.android.application'

+ 39 - 15
native/bind.c

@@ -9,13 +9,27 @@
 #include <sys/un.h>
 #include <unistd.h>
 
+#ifdef ANDROID
+#include <android/log.h>
+#define LOG_TAG "PortBinder"
+#define LOGI(...) android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS)
+#define LOGE(...) android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS)
+#else
+#define LOGI printf
+#define LOGE printf
+#endif
+
 #define CONTROLLEN CMSG_LEN(sizeof(int))
 
-#define UNIX_PATH "hostage"
+// LocalSocket uses the Linux abstract namespace instead of the filesystem.
+// In C these addresses are specified by prepending '\0' to the path.
+// http://stackoverflow.com/questions/14643571/localsocket-communication-with-unix-domain-in-android-ndk
+#define UNIX_PATH "\0hostage"
 
 #define TCP "TCP"
 #define UDP "UDP"
 
+// create unix domain local socket for inter process communication
 int ipc_sock() {
 	int fd;
 	struct sockaddr_un addr;
@@ -25,11 +39,15 @@ int ipc_sock() {
 		return -1;
 	}
 
-	memset(&addr, 0, sizeof(addr));
+	// Also note that you should not pass sizeof(sockaddr_un) to bind or connect because all bytes
+	// following the '\0' character are interpreted as the abstract socket name. Calculate and pass
+	// the real size instead
 	addr.sun_family = AF_UNIX;
-	strncpy(&addr.sun_path[1], UNIX_PATH, strlen(UNIX_PATH));
+	int addrsize = strlen(&(UNIX_PATH)[1]) + 1;
+	memcpy(addr.sun_path, UNIX_PATH, addrsize);
 
-	if (connect(fd, (struct sockaddr*) &addr, sizeof(sa_family_t) + strlen(UNIX_PATH) + 1) == -1) {
+	addrsize += sizeof(addr.sun_family); // total size
+	if (connect(fd, (struct sockaddr*)&addr, addrsize) == -1) {
 		perror("Unable to connect local socket");
 		return -1;
 	}
@@ -72,16 +90,17 @@ int net_sock(int type, int port) {
 	return fd;
 }
 
+// send a file descriptor via inter process communication
 int send_fd(int fd, int fd_to_send) {
 	struct iovec iov[1];
 	struct cmsghdr *cmptr;
 	struct msghdr msg;
-	char buf[2] = "FD";
+	char buf[] = "FD";
 
 	iov[0].iov_base = buf;
 	iov[0].iov_len = 2;
 
-	cmptr = malloc(CONTROLLEN);
+	cmptr = (struct cmsghdr *)malloc(CONTROLLEN);
 	cmptr->cmsg_level = SOL_SOCKET;
 	cmptr->cmsg_type = SCM_RIGHTS;
 	cmptr->cmsg_len = CONTROLLEN;
@@ -107,9 +126,13 @@ int main(int argc, char *argv[]) {
 	int ipc_fd, net_fd;
 
 	if (argc < 3) {
+		LOGI("usage: %s <protocol> <port>\n", argv[0]);
+		LOGI("where protocol is either TCP or UDP and port is between 1 and 65535\n");
 		exit(EXIT_FAILURE);
 	}
 
+	LOGI("port binder reporting %s %s\n", argv[1], argv[2]);
+
 	if (strncmp(argv[1], TCP, 3) == 0) {
 		type = 1;
 	} else if (strncmp(argv[1], UDP, 3) == 0) {
@@ -118,29 +141,30 @@ int main(int argc, char *argv[]) {
 		exit(EXIT_FAILURE);
 	}
 
-	if ((port = atoi(argv[2])) < 1 || (port = atoi(argv[2])) > 65535) {
+	port = atoi(argv[2]);
+	if (!(port >= 0 && port <= 65535)) {
 		exit(EXIT_FAILURE);
 	}
 
-	if ((ipc_fd = ipc_sock()) == -1) {
-		close(ipc_fd);
+	if ((net_fd = net_sock(type, port)) == -1) {
+		close(net_fd);
 		exit(EXIT_FAILURE);
 	}
-	printf("ipc_fd: %d\n", ipc_fd);
+	LOGI("net_fd: %d\n", net_fd);
 
-	if ((net_fd = net_sock(type, port)) == -1) {
-		close(ipc_fd);
+	if ((ipc_fd = ipc_sock()) == -1) {
 		close(net_fd);
+		close(ipc_fd);
 		exit(EXIT_FAILURE);
 	}
-	printf("net_fd: %d\n", net_fd);
+	LOGI("ipc_fd: %d\n", ipc_fd);
 
 	int status;
 	status = send_fd(ipc_fd, net_fd);
-	printf("send_fd: %d\n", status);
+	LOGI("send_fd: %d\n", status);
 
 	close(ipc_fd);
-	close(net_fd);
+	//close(net_fd);
 
 	if (status == -1) {
 		return (EXIT_FAILURE);

+ 18 - 0
res/layout/fragment_connectioninfo_dialog.xml

@@ -63,6 +63,24 @@
 					android:id="@+id/connectioninfo_internalip_value" android:layout_column="1"
 					android:layout_margin="4dp" android:gravity="right"/>
 		</TableRow>
+		<TableRow
+				android:layout_width="fill_parent"
+				android:layout_height="fill_parent">
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="@string/subnet_mask"
+					android:id="@+id/textView8" android:layout_column="0"
+					android:layout_margin="4dp"
+					android:textStyle="bold"/>
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:id="@+id/connectioninfo_subnetmask_value" android:layout_column="1"
+					android:layout_margin="4dp" android:gravity="right"/>
+		</TableRow>
 		<TableRow
 				android:layout_width="fill_parent"
 				android:layout_height="fill_parent">

+ 28 - 6
res/layout/fragment_record_detail.xml

@@ -33,26 +33,48 @@
 				android:paddingRight="10dp"
 				>
 
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceSmall"
+					android:text="@string/RecordAttackType"
+					android:textAllCaps="true"
+					android:id="@+id/textView4"
+					android:gravity="center"
+					android:layout_alignParentTop="true"
+					android:layout_alignParentLeft="true"
+					android:layout_alignParentStart="true"
+					android:layout_alignBottom="@+id/record_details_text_attack_type"/>
+
 			<TextView
 					android:layout_width="wrap_content"
 					android:layout_height="wrap_content"
 					android:textAppearance="?android:attr/textAppearanceMedium"
-					android:id="@+id/record_details_text_ssid"
+					android:id="@+id/record_details_text_attack_type"
 					android:layout_toRightOf="@+id/textView7"
 					android:layout_marginLeft="27dp"/>
 
 			<TextView
 					android:layout_width="wrap_content"
-					android:layout_height="match_parent"
+					android:layout_height="wrap_content"
 					android:textAppearance="?android:attr/textAppearanceSmall"
 					android:text="@string/RecordSSID"
 					android:textAllCaps="true"
-					android:id="@+id/txtP2PSubheader"
-					android:gravity="center"
-					android:layout_alignParentTop="true"
+					android:id="@+id/textView2"
+					android:layout_alignTop="@+id/record_details_text_ssid"
 					android:layout_alignParentLeft="true"
 					android:layout_alignParentStart="true"
-					android:layout_alignBottom="@+id/record_details_text_ssid"/>
+					android:layout_alignBottom="@+id/record_details_text_ssid"
+					android:gravity="center"/>
+
+			<TextView
+					android:id="@+id/record_details_text_ssid"
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:layout_below="@+id/record_details_text_attack_type"
+					android:layout_alignLeft="@+id/record_details_text_attack_type"
+					android:layout_alignStart="@+id/record_details_text_attack_type"/>
 
 			<TextView
 					android:layout_width="wrap_content"

+ 3 - 0
res/values-de/strings.xml

@@ -60,6 +60,9 @@
 
     <string name="threatmap_show_records"><u>Zeige Aufzeichnungen</u></string>
 
+	<string name="RecordAttackType">Typ</string>
+	<string name="RecordInternalAttack">Interner Angriff</string>
+	<string name="RecordExternalAttack">Externer Angriff</string>
     <string name="RecordBSSID">BSSID</string>
     <string name="RecordSSID">SSID</string>
     <string name="RecordTimestamp">Zeitstempel</string>

+ 1 - 0
res/values/connection_info.xml

@@ -7,6 +7,7 @@
     <string name="connection_info_bssid">de.tudarmstadt.informatik.hostage.CONNECTION_INFO.BSSID</string>
     <string name="connection_info_ssid">de.tudarmstadt.informatik.hostage.CONNECTION_INFO.SSID</string>
     <string name="connection_info_internal_ip">de.tudarmstadt.informatik.hostage.CONNECTION_INFO.INTERNAL_IP</string>
+	<string name="connection_info_subnet_mask">de.tudarmstadt.informatik.hostage.CONNECTION_INFO.SUBNET_MASK</string>
  	<string name="connection_info_external_ip">de.tudarmstadt.informatik.hostage.CONNECTION_INFO.EXTERNAL_IP</string>  
 
     

+ 65 - 49
res/values/strings.xml

@@ -6,22 +6,23 @@
     <string name="action_about">About</string>
     <string name="capital_on">OFF</string>
     <string name="capital_off">ON</string>
-    <string name="title_connection_info">Connection Info</string>
+	<string name="title_connection_info">Connection Info</string>
     <string name="status">Status</string>
     <string name="paranoid">Paranoid Mode</string>
     <string name="details">Connection info</string>
     <string name="not_connected">Not connected</string>
-    <string name="attack"> attack</string>
-    <string name="attacks"> attacks</string>
+    <string name="attack">&#160;attack</string>
+    <string name="attacks">&#160;attacks</string>
     <string name="secure">Secure</string>
     <string name="insecure">Insecure</string>
-    <string name="logged"> logged</string>
-    <string name="recorded"> recorded</string>
+    <string name="logged">&#160;logged</string>
+    <string name="recorded">&#160;recorded</string>
     <string name="zero_attacks">0 attacks recorded</string>
+
     <string name="information">Information</string>
-    <string name="wifi_not_connected_msg">You are not connected to a WiFi network. \n\nPlease connect to one, before trying to activate HosTaGe.</string>
-    <string name="network_not_connected_msg">You are not connected to any network. \n\nPlease connect to one, before trying to activate HosTaGe.</string>
-    <string name="no_network_connection_threatmap_msg">Currently you are not connected to the Internet.\n\nPlease establish a connection to use the Threatmap.</string>
+	<string name="wifi_not_connected_msg">You are not connected to a WiFi network. \n\nPlease connect to one, before trying to activate HosTaGe.</string>
+	<string name="network_not_connected_msg">You are not connected to any network. \n\nPlease connect to one, before trying to activate HosTaGe.</string>
+	<string name="no_network_connection_threatmap_msg">Currently you are not connected to the Internet.\n\nPlease establish a connection to use the Threatmap.</string>
     <string name="profile_no_services_msg">The current active profile does not seem to monitor any services.\n\nPlease activate some services to monitor in the profile.</string>
     <string name="no_portbinder_msg">Your device does not have \'Portbinder\' installed. Due to the limitations of Android OS, you could only use services that are utilizing ports > 1024.\n\nTo enable full functionality of HosTaGe, please make sure your device is rooted and \'Portbinder\' is installed.</string>
     <string name="no_portbinder_msg2">Your device cannot use the full feature of HosTaGe yet. Click \'Help\' to find out how to enable this.</string>
@@ -36,42 +37,53 @@
     <string name="helpPortbinder">Please follow the instructions in our website to install \'Portbinder\'.\n\nAlternatively, you can use the automated installer by pressing the \'Just Help Me!\' button.</string>
     <string name="confirm_msg">This automated installer fetches the appropriate Portbinder binary and installs in a location within the device.\n\nThis automated process will CHANGE some folder permissions to work. Proceed on your own risk.\n\nConfirm to proceed with automated installation of Portbinder?</string>
     <string name="help_me">Just Help Me!</string>
-    <string name="profile_needs_name">An profile needs a name. Please type in a name and press save again.</string>
+
+	<string name="profile_needs_name">An profile needs a name. Please type in a name and press save again.</string>
     <string name="monitor_current_connection">Monitor current connection</string>
     <string name="active_profile">Active profile: </string>
+
     <string name="ssid">SSID:</string>
     <string name="bssid">BSSID:</string>
-    <string name="protocol">Protocol:</string>
-    <string name="timestamp">Timestamp:</string>
-    <string name="location">Location:</string>
+	<string name="protocol">Protocol:</string>
+	<string name="timestamp">Timestamp:</string>
+	<string name="location">Location:</string>
     <string name="internal_ip">Internal IP:</string>
+	<string name="subnet_mask">Subnet Mask:</string>
     <string name="external_ip">External IP:</string>
-    <string name="remote_ip">Remote IP:</string>
-    <string name="packet_type">Packet type:</string>
-    <string name="packet_content">Packet content:</string>
+	<string name="remote_ip">Remote IP:</string>
+	<string name="packet_type">Packet type:</string>
+	<string name="packet_content">Packet content:</string>
+
     <string name="services">Services</string>
     <string name="connections">Recorded connections:</string>
     <string name="statistics">Statistics</string>
-    <string name="database">Database</string>
-    <string name="log_actions">Actions</string>
-    <string name="firstAttack">First Attack:</string>
-    <string name="lastAttack">Last Attack:</string>
-    <string name="clear">Clear</string>
-    <string name="delete">Delete</string>
-    <string name="cancel">Cancel</string>
-    <string name="close">Close</string>
-    <string name="show_records">Show records</string>
-    <string name="dialog_clear_database">Clear all data?</string>
-    <string name="export_dialog_title">Choose Export Format</string>
-    <string name="delete_dialog_title">Delete data sets by:</string>
-    <string name="dialog_clear_database_date">Delete all data before:</string>
-    <string name="threatmap_show_records"><u>Show records</u></string>
+    <string name="database">Database</string>    
+	<string name="log_actions">Actions</string>
+	<string name="firstAttack">First Attack:</string>
+	<string name="lastAttack">Last Attack:</string>
+	<string name="clear">Clear</string>
+	<string name="delete">Delete</string>
+	<string name="cancel">Cancel</string>
+	<string name="close">Close</string>
+	<string name="show_records">Show records</string>
+	<string name="dialog_clear_database">Clear all data?</string>	
+	<string name="export_dialog_title">Choose Export Format</string>		
+	<string name="delete_dialog_title">Delete data sets by:</string>	
+	<string name="dialog_clear_database_date">Delete all data before:</string>
+
+	<string name="threatmap_show_records"><u>Show records</u></string>
+
+	<string name="RecordAttackType">Type</string>
+	<string name="RecordInternalAttack">Internal attack</string>
+	<string name="RecordExternalAttack">External attack</string>
     <string name="RecordBSSID">BSSID</string>
     <string name="RecordSSID">SSID</string>
-    <string name="RecordTimestamp">timestamp</string>
-    <string name="RecordProtocol">protocol</string>
+    <string name="RecordTimestamp">Timestamp</string>
+    <string name="RecordProtocol">Protocol</string>
+
     <string name="drawer_open">Open navigation drawer</string>
     <string name="drawer_close">Close navigation drawer</string>
+
     <string name="drawer_overview">Overview</string>
     <string name="drawer_threat_map">Threat Map</string>
     <string name="drawer_records">Records</string>
@@ -79,23 +91,29 @@
     <string name="drawer_settings">Settings</string>
     <string name="drawer_profile_manager">Profiles</string>
     <string name="drawer_app_info">Application info</string>
-    <string name="drawer_statistics">Statistics</string>
-    <string name="drawer_help">Help videos</string>
+	<string name="drawer_statistics">Statistics</string>
+	<string name="drawer_help">Help videos</string>
+
     <string name="button_title_apply">Apply</string>
     <string name="button_title_cancel">Cancel</string>
     <string name="shared_preference_path">de.tudarmstadt.informatik.hostage.preferences</string>
     <string name="UUID">9fc4f490-659e-11e3-949a-0800200c9a66</string>
+
     <string name="recorded_attacks">recorded attacks: </string>
     <string name="current_connection">Current connection</string>
     <string name="monitor_services">Monitor services</string>
+
     <string name="device_rooted">Device rooted</string>
     <string name="porthack_installed">Porthack installed</string>
     <string name="yes">Yes</string>
     <string name="no">No</string>
+
     <string name="no_data_notification">No Attacks are recorded. Please check your filter option.</string>
     <string name="no_data_notification_no_filter">No Attacks are recorded.</string>
+
     <string name="TODAY">Today</string>
     <string name="YESTERDAY">Yesterday</string>
+
     <string name="hostage_with_url"><a href="http://www.tk.informatik.tu-darmstadt.de/de/research/secure-smart-infrastructures/hostage">HosTaGe</a></string>
     <string name="hostage_email"><a href="mailto:hostage@tk.informatik.tu-darmstadt.de?Subject=Inquiry">Tell us what do you think about HosTaGe</a></string>
     <string name="hostage_email_only">hostage@tk.informatik.tu-darmstadt.de</string>
@@ -111,7 +129,7 @@
     <string name="delete_profile">Delete profile</string>
     <string name="discard">Discard</string>
     <string name="save">Save</string>
-    <string name="really_want_delete_profiel">Do you really want to delete this profile?</string>
+	<string name="really_want_delete_profiel">Do you really want to delete this profile?</string>
     <string name="rec_protocol">Protocol</string>
     <string name="date">Date</string>
     <string name="ESSID">ESSID</string>
@@ -147,24 +165,25 @@
     <string name="stats_select_protocol_data">Select protocol data to compare</string>
     <string name="stats_per_cent_all">% of all</string>
     <string name="pie_all">All</string>
-    <string name="record_details_received">RECEIVED</string>
-    <string name="record_details_sent">SENT</string>
-    <string name="record_details_info" formatted="false">from %s to %s\n%s at %s</string>
-    <string name="record_details_dateformat" formatted="false">MMMM d, yyyy \'at\' H:m:s a</string>
-    <string name="record_details_nocontent">No content</string>
-    <string name="record_details_remote_ip">REMOTE IP</string>
-    <string name="record_details_conversation">Conversation</string>
-    <string name="record_details_confirm_delete">Do you really want to delete this record?</string>
+
+	<string name="record_details_received">RECEIVED</string>
+	<string name="record_details_sent">SENT</string>
+	<string name="record_details_info" formatted="false">from %s to %s\n%s at %s</string>
+	<string name="record_details_dateformat" formatted="false">MMMM d, yyyy \'at\' H:m:s a</string>
+	<string name="record_details_nocontent">No content</string>
+	<string name="record_details_remote_ip">REMOTE IP</string>
+	<string name="record_details_conversation">Conversation</string>
+	<string name="record_details_confirm_delete">Do you really want to delete this record?</string>
     <string name="profile_vista_desc">This profile will imitate a Windows Vista machine</string>
-    <string name="profile_seven_desc">This profile will imitate a Windows 7 machine</string>
+	<string name="profile_seven_desc">This profile will imitate a Windows 7 machine</string>
     <string name="profile_xp_desc">This profile will activate Windows XP typical services</string>
     <string name="profile_webserv_http_desc">This profile will imitate a simple webserver, which just supports the HTTP protocol</string>
-    <string name="profile_webserv_apache_desc">This profile will imitate an apache web server</string>
-    <string name="profile_webserv_iis_desc">This profile will imitate an IIS web server</string>
+	<string name="profile_webserv_apache_desc">This profile will imitate an apache web server</string>
+	<string name="profile_webserv_iis_desc">This profile will imitate an IIS web server</string>
     <string name="profile_webserv_desc">This profile will imitate a simple webserver, which supports both the HTTP and HTTPS protocol</string>
     <string name="profile_unix_desc">This profile monitors unix typical services</string>
     <string name="profile_linux_desc">This profile will imitate a linux machine by monitoring linux typical services</string>
-    <string name="profile_linux_hard_desc">This profile will imitate a linux machine which has just SSH activated</string>
+	<string name="profile_linux_hard_desc">This profile will imitate a linux machine which has just SSH activated</string>
     <string name="profile_voip_desc">This profile imitates a VOIP Server by monitoring the SIP service</string>
     <string name="profile_random_desc">This profile monitors services randomly</string>
     <string name="profile_paranoid_desc">This profile monitors all available services</string>
@@ -182,7 +201,4 @@
     <string name="rec_via_bt">Via Bluetooth</string>
     <string name="rec_via_nfc">Via NFC</string>
     <string name="rec_via_online">Via Online Database</string>
-    <string name="title_activity_p2_psync">P2PSyncActivity</string>
-    <string name="hello_world">Hello world!</string>
-
 </resources>

+ 12 - 0
src/de/tudarmstadt/informatik/hostage/Handler.java

@@ -12,6 +12,8 @@ import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.preference.PreferenceManager;
 import android.util.Log;
+
+import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 import de.tudarmstadt.informatik.hostage.location.MyLocationManager;
 import de.tudarmstadt.informatik.hostage.logging.AttackRecord;
 import de.tudarmstadt.informatik.hostage.logging.Logger;
@@ -50,6 +52,9 @@ public class Handler implements Runnable {
 	private String externalIP;
 	private String BSSID;
 	private String SSID;
+
+	private int subnetMask;
+	private int internalIPAddress;
 	
 	private boolean logged;
 
@@ -85,6 +90,11 @@ public class Handler implements Runnable {
 		BSSID = connInfo.getString(service.getString(R.string.connection_info_bssid), null);
 		SSID = connInfo.getString(service.getString(R.string.connection_info_ssid), null);
 		externalIP = connInfo.getString(service.getString(R.string.connection_info_external_ip), null);
+
+		// we need this info to find out whether the attack was internal
+		subnetMask = connInfo.getInt(service.getString(R.string.connection_info_subnet_mask), 0);
+		internalIPAddress = connInfo.getInt(service.getString(R.string.connection_info_internal_ip), 0);
+
 		setSoTimeout(client);
 		logged = false;
 		thread.start();		
@@ -203,6 +213,8 @@ public class Handler implements Runnable {
 		record.setExternalIP(externalIP);
 		record.setLocalIP(client.getLocalAddress().getHostAddress());
 		record.setLocalPort(client.getLocalPort());
+		int remoteIPAddress = HelperUtils.packInetAddress(client.getInetAddress().getAddress());
+		record.setWasInternalAttack((remoteIPAddress & subnetMask) == (internalIPAddress & subnetMask));
 		record.setRemoteIP(client.getInetAddress().getHostAddress());
 		record.setRemotePort(client.getPort());
 		record.setBssid(BSSID);

+ 33 - 19
src/de/tudarmstadt/informatik/hostage/Hostage.java

@@ -23,7 +23,11 @@ import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.net.ConnectivityManager;
+import android.net.DhcpInfo;
+import android.net.NetworkInfo;
 import android.net.Uri;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
 import android.os.AsyncTask;
 import android.os.Binder;
 import android.os.IBinder;
@@ -34,25 +38,14 @@ import android.support.v4.content.LocalBroadcastManager;
 import android.util.Log;
 import android.widget.Toast;
 
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.util.EntityUtils;
-import org.json.JSONObject;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
 import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 import de.tudarmstadt.informatik.hostage.location.MyLocationManager;
 import de.tudarmstadt.informatik.hostage.persistence.HostageDBOpenHelper;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
 
+import static de.tudarmstadt.informatik.hostage.commons.HelperUtils.*;
+
 /**
  * Background service running as long as at least one protocol is active.
  * Service controls start and stop of protocol listener. Notifies GUI about
@@ -138,7 +131,7 @@ public class Hostage extends Service {
 		@Override
 		public void onReceive(Context context, Intent intent) {
 			String bssid_old = connectionInfo.getString(getString(R.string.connection_info_bssid), "");
-			String bssid_new = HelperUtils.getBSSID(context);
+			String bssid_new = getBSSID(context);
 			if (bssid_new == null || !bssid_new.equals(bssid_old)) {
 				deleteConnectionData();
 				updateConnectionInfo();
@@ -485,7 +478,7 @@ public class Hostage extends Service {
 			if (listener.getHandlerCount() > 0) {
 				activeHandlers = true;
 			}
-			if (dbh.bssidSeen(listener.getProtocolName(), HelperUtils.getBSSID(getApplicationContext()))) {
+			if (dbh.bssidSeen(listener.getProtocolName(), getBSSID(getApplicationContext()))) {
 				bssidSeen = true;
 			}
 		}
@@ -612,15 +605,36 @@ public class Hostage extends Service {
 	 * for session data.
 	 * 
 	 * @param context
-	 *            Needs a context to get system recourses.
+	 *            Needs a context to get system resources.
 	 * @see MainActivity#CONNECTION_INFO
 	 */
 	private void updateConnectionInfo() {
+		ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+		NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+		if (networkInfo == null || !networkInfo.isConnected()) {
+			return; // no connection
+		}
+		final WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
+		final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
+		if (connectionInfo == null) {
+			return; // no wifi connection
+		}
+		final DhcpInfo dhcpInfo = wifiManager.getDhcpInfo();
+		if (dhcpInfo == null) {
+			return;
+		}
+
+		String ssid = connectionInfo.getSSID();
+		if (ssid.startsWith("\"") && ssid.endsWith("\"")) { // trim those quotes
+			ssid = ssid.substring(1, ssid.length() - 1);
+		}
+
 		SharedPreferences pref = context.getSharedPreferences(getString(R.string.connection_info), Context.MODE_PRIVATE);
 		Editor editor = pref.edit();
-		editor.putString(getString(R.string.connection_info_ssid), HelperUtils.getSSID(context));
-		editor.putString(getString(R.string.connection_info_bssid), HelperUtils.getBSSID(context));
-		editor.putString(getString(R.string.connection_info_internal_ip), HelperUtils.getInternalIP(context));
+		editor.putString(getString(R.string.connection_info_ssid), ssid);
+		editor.putString(getString(R.string.connection_info_bssid), connectionInfo.getBSSID());
+		editor.putInt(getString(R.string.connection_info_internal_ip), dhcpInfo.ipAddress);
+		editor.putInt(getString(R.string.connection_info_subnet_mask), dhcpInfo.netmask);
 		editor.commit();
 		SetExternalIPTask async = new SetExternalIPTask();
 		async.execute(new String[] { "http://ip2country.sourceforge.net/ip2c.php?format=JSON" });

+ 8 - 7
src/de/tudarmstadt/informatik/hostage/Listener.java

@@ -1,11 +1,8 @@
 package de.tudarmstadt.informatik.hostage;
 
-import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStreamReader;
 import java.net.ServerSocket;
 import java.net.Socket;
-import java.security.SecureRandom;
 import java.util.ArrayList;
 import java.util.Iterator;
 
@@ -18,12 +15,13 @@ import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.preference.PreferenceManager;
 import android.util.Log;
+
+import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 import de.tudarmstadt.informatik.hostage.location.MyLocationManager;
 import de.tudarmstadt.informatik.hostage.logging.AttackRecord;
 import de.tudarmstadt.informatik.hostage.logging.Logger;
 import de.tudarmstadt.informatik.hostage.logging.NetworkRecord;
 import de.tudarmstadt.informatik.hostage.net.MyServerSocketFactory;
-import de.tudarmstadt.informatik.hostage.protocol.HTTP;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 import de.tudarmstadt.informatik.hostage.protocol.SMB;
 import de.tudarmstadt.informatik.hostage.protocol.SSLProtocol;
@@ -143,9 +141,12 @@ public class Listener implements Runnable {
 			if (server == null)
 				return false;
 			if (protocol.toString().equals("SMB")) {
-				((SMB) protocol).setIP(Hostage.getContext()
-						.getSharedPreferences(Hostage.getContext().getString(R.string.connection_info), Hostage.MODE_PRIVATE)
-						.getString(Hostage.getContext().getString(R.string.connection_info_internal_ip), ""));
+				((SMB) protocol).setIP(HelperUtils.inetAddressToString(Hostage.getContext()
+						.getSharedPreferences(
+								Hostage.getContext().getString(R.string.connection_info),
+								Hostage.MODE_PRIVATE)
+						.getInt(Hostage.getContext()
+								.getString(R.string.connection_info_internal_ip), 0)));
 			}
 			(this.thread = new Thread(this)).start();
 			running = true;

+ 26 - 1
src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java

@@ -282,6 +282,9 @@ public final class HelperUtils {
 			if (connectionInfo != null
 					&& !TextUtils.isEmpty(connectionInfo.getSSID())) {
 				ssid = connectionInfo.getSSID();
+				if (ssid.startsWith("\"") && ssid.endsWith("\"")) { // trim those quotes
+					ssid = ssid.substring(1, ssid.length() - 1);
+				}
 			}
 		}
 		return ssid;
@@ -381,11 +384,33 @@ public final class HelperUtils {
 		return (character > 31 && character < 127);
 	}
 
-	private static byte[] unpackInetAddress(int bytes) {
+	public static byte[] unpackInetAddress(int bytes) {
 		return new byte[] { (byte) ((bytes) & 0xff),
 				(byte) ((bytes >>> 8) & 0xff), (byte) ((bytes >>> 16) & 0xff),
 				(byte) ((bytes >>> 24) & 0xff) };
 	}
+
+	public static int packInetAddress(byte[] bytes) {
+		/*
+		FUCK YOU JAVA!!! WHY DON'T YOU HAVE UNSIGNED TYPES???
+		 */
+		long b0 = bytes[0]; if (b0 < 0) b0 = 255 + b0;
+		long b1 = bytes[1]; if (b1 < 0) b1 = 255 + b1;
+		long b2 = bytes[2]; if (b2 < 0) b2 = 255 + b2;
+		long b3 = bytes[3]; if (b3 < 0) b3 = 255 + b3;
+		long packed = b0 | (b1 << 8) | (b2 << 16) | (b3 << 24);
+		if (packed >= (1l << 31)) {
+			packed -= (1l << 32) - 1l;
+		}
+		return (int)packed;
+	}
+
+	public static String inetAddressToString(int address) {
+		return String.valueOf(address & 0xFF) + "."
+			+ String.valueOf((address >>> 8) & 0xFF) + "."
+			+ String.valueOf((address >>> 16) & 0xFF) + "."
+			+ String.valueOf((address >>> 24) & 0xFF);
+	}
 	
 	public static boolean isWifiConnected(Context context){
 		if(context == null) return false;

+ 7 - 1
src/de/tudarmstadt/informatik/hostage/logging/AttackRecord.java

@@ -20,6 +20,7 @@ public class AttackRecord implements Parcelable, Serializable {
 	private String remoteIP;
 	private int remotePort;
 	private String externalIP;
+	private int wasInternalAttack; // 1 if attacker ip and local ip were in same subnet, else 0
 
 	public static final Parcelable.Creator<AttackRecord> CREATOR = new Parcelable.Creator<AttackRecord>() {
 		@Override
@@ -45,6 +46,7 @@ public class AttackRecord implements Parcelable, Serializable {
 		this.remoteIP = source.readString();
 		this.remotePort = source.readInt();
 		this.externalIP = source.readString();
+		this.wasInternalAttack = source.readInt();
 		this.bssid = source.readString();
 	}
 
@@ -62,6 +64,7 @@ public class AttackRecord implements Parcelable, Serializable {
 		dest.writeString(remoteIP);
 		dest.writeInt(remotePort);
 		dest.writeString(externalIP);
+		dest.writeInt(wasInternalAttack);
 		dest.writeString(bssid);
 	}
 
@@ -183,5 +186,8 @@ public class AttackRecord implements Parcelable, Serializable {
 	 */
 	public void setExternalIP(String externalIP) {
 		this.externalIP = externalIP;
-	}	
+	}
+
+	public boolean getWasInternalAttack() {return wasInternalAttack == 1;}
+	public void setWasInternalAttack(boolean b) {wasInternalAttack = b ? 1 : 0;}
 }

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

@@ -74,6 +74,10 @@ public class Record {
 		return attack.getRemotePort();
 	}
 
+	public boolean getWasInternalAttack() {
+		return attack.getWasInternalAttack();
+	}
+
 	public String getSsid() {
 		return network.getSsid();
 	}
@@ -144,6 +148,10 @@ public class Record {
 		attack.setRemotePort(remotePort);
 	}
 
+	public void setWasInternalAttack(boolean internalAttack) {
+		attack.setWasInternalAttack(internalAttack);
+	}
+
 	public void setSsid(String ssid) {
 		network.setSsid(ssid);
 	}

+ 7 - 0
src/de/tudarmstadt/informatik/hostage/net/MyDatagramSocketFactory.java

@@ -22,6 +22,7 @@ public class MyDatagramSocketFactory {
 			try {
 				DatagramSocketImpl impl = getImpl(socket);
 				injectFD(fd, impl);
+				setBound(socket);
 			} catch (NoSuchFieldException e) {
 			} catch (IllegalAccessException e) {
 			} catch (IllegalArgumentException e) {
@@ -44,4 +45,10 @@ public class MyDatagramSocketFactory {
 		fdField.set(impl, fd);
 	}
 
+	private void setBound(DatagramSocket socket) throws NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
+		Field boundField = socket.getClass().getDeclaredField("isBound");
+		boundField.setAccessible(true);
+		boundField.set(socket, true);
+	}
+
 }

+ 1 - 0
src/de/tudarmstadt/informatik/hostage/persistence/HostageDBContract.java

@@ -31,6 +31,7 @@ public final class HostageDBContract {
 		public static final String COLUMN_NAME_REMOTE_IP = "remoteIP";
 		public static final String COLUMN_NAME_REMOTE_PORT = "remotePort";
 		public static final String COLUMN_NAME_BSSID = "_bssid";
+		public static final String COLUMN_NAME_INTERNAL_ATTACK = "internalAttack";
 
 		public static final String KEY_ID = COLUMN_NAME_ATTACK_ID;
 	}

+ 163 - 50
src/de/tudarmstadt/informatik/hostage/persistence/HostageDBOpenHelper.java

@@ -25,7 +25,9 @@ import de.tudarmstadt.informatik.hostage.persistence.HostageDBContract.PacketEnt
 import de.tudarmstadt.informatik.hostage.persistence.HostageDBContract.ProfileEntry;
 import de.tudarmstadt.informatik.hostage.persistence.HostageDBContract.SyncDeviceEntry;
 import de.tudarmstadt.informatik.hostage.persistence.HostageDBContract.SyncInfoEntry;
+import de.tudarmstadt.informatik.hostage.ui.helper.ColorSequenceGenerator;
 import de.tudarmstadt.informatik.hostage.ui.model.LogFilter;
+import de.tudarmstadt.informatik.hostage.ui.model.PlotComparisonItem;
 
 /**
  * Database Helper class to create, read and write the database.
@@ -40,6 +42,7 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 	private Context context;
 
 	static {
+        // NETWORK
 		StringBuilder networkSQLBuilder = new StringBuilder("CREATE TABLE ").append(NetworkEntry.TABLE_NAME).append("(");
 		networkSQLBuilder.append(NetworkEntry.COLUMN_NAME_BSSID).append(" TEXT PRIMARY KEY,");
 		networkSQLBuilder.append(NetworkEntry.COLUMN_NAME_SSID).append(" TEXT,");
@@ -50,6 +53,7 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		networkSQLBuilder.append(")");
 		SQL_CREATE_NETWORK_ENTRIES = networkSQLBuilder.toString();
 
+        // ATTACK
 		StringBuilder attackSQLBuilder = new StringBuilder("CREATE TABLE ").append(AttackEntry.TABLE_NAME).append("(");
 		attackSQLBuilder.append(AttackEntry.COLUMN_NAME_ATTACK_ID).append(" INTEGER PRIMARY KEY,");
 		attackSQLBuilder.append(AttackEntry.COLUMN_NAME_PROTOCOL).append(" TEXT,");
@@ -58,12 +62,14 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		attackSQLBuilder.append(AttackEntry.COLUMN_NAME_LOCAL_PORT).append(" INTEGER,");
 		attackSQLBuilder.append(AttackEntry.COLUMN_NAME_REMOTE_IP).append(" BLOB,");
 		attackSQLBuilder.append(AttackEntry.COLUMN_NAME_REMOTE_PORT).append(" INTEGER,");
+		attackSQLBuilder.append(AttackEntry.COLUMN_NAME_INTERNAL_ATTACK).append(" INTEGER,");
 		attackSQLBuilder.append(AttackEntry.COLUMN_NAME_BSSID).append(" TEXT,");
 		attackSQLBuilder.append(String.format("FOREIGN KEY(%s) REFERENCES %s(%s)", AttackEntry.COLUMN_NAME_BSSID, NetworkEntry.TABLE_NAME,
 				NetworkEntry.COLUMN_NAME_BSSID));
 		attackSQLBuilder.append(")");
 		SQL_CREATE_ATTACK_ENTRIES = attackSQLBuilder.toString();
 
+        // PACKET
 		StringBuilder packetSQLBuilder = new StringBuilder("CREATE TABLE ").append(PacketEntry.TABLE_NAME).append("(");
 		packetSQLBuilder.append(PacketEntry.COLUMN_NAME_ID).append(" INTEGER NOT NULL,");
 		packetSQLBuilder.append(PacketEntry.COLUMN_NAME_ATTACK_ID).append(" INTEGER NOT NULL,");
@@ -75,13 +81,15 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 				AttackEntry.COLUMN_NAME_ATTACK_ID));
 		packetSQLBuilder.append(")");
 		SQL_CREATE_PACKET_ENTRIES = packetSQLBuilder.toString();
-		
+
+        // SyncDeviceEntry
 		StringBuilder syncDevicesSQLBuilder = new StringBuilder("CREATE TABLE ").append(SyncDeviceEntry.TABLE_NAME).append("(");
 		syncDevicesSQLBuilder.append(SyncDeviceEntry.COLUMN_NAME_DEVICE_ID).append(" TEXT PRIMARY KEY,");
 		syncDevicesSQLBuilder.append(SyncDeviceEntry.COLUMN_NAME_DEVICE_TIMESTAMP).append(" INTEGER");
 		syncDevicesSQLBuilder.append(")");
 		SQL_CREATE_SYNC_DEVICES_ENTRIES = syncDevicesSQLBuilder.toString();
-		
+
+        // SyncInfoEntry
 		StringBuilder syncInfoSQLBuilder = new StringBuilder("CREATE TABLE ").append(SyncInfoEntry.TABLE_NAME).append("(");
 		syncInfoSQLBuilder.append(SyncInfoEntry.COLUMN_NAME_DEVICE_ID).append(" TEXT,");
 		syncInfoSQLBuilder.append(SyncInfoEntry.COLUMN_NAME_BSSID).append(" TEXT,");
@@ -92,7 +100,8 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 				NetworkEntry.COLUMN_NAME_BSSID));
 		syncInfoSQLBuilder.append(")");
 		SQL_CREATE_SYNC_INFO_ENTRIES = syncInfoSQLBuilder.toString();
-		
+
+        // ProfileEntry
 		StringBuilder profilSQLBuilder = new StringBuilder("CREATE TABLE ").append(ProfileEntry.TABLE_NAME).append("(");
 		profilSQLBuilder.append(ProfileEntry.COLUMN_NAME_PROFILE_ID).append(" INTEGER PRIMARY KEY AUTOINCREMENT,");
 		profilSQLBuilder.append(ProfileEntry.COLUMN_NAME_PROFILE_NAME).append(" TEXT,");
@@ -102,20 +111,20 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		profilSQLBuilder.append(ProfileEntry.COLUMN_NAME_PROFILE_EDITABLE).append(" INTEGER,");
 		profilSQLBuilder.append(ProfileEntry.COLUMN_NAME_PROFILE_ACTIVE).append(" INTEGER");
 		profilSQLBuilder.append(")");
-		SQL_CREATE_PROFIL_ENTRIES = profilSQLBuilder.toString();
+		SQL_CREATE_PROFILE_ENTRIES = profilSQLBuilder.toString();
 	}
 
 	private static final String SQL_CREATE_NETWORK_ENTRIES;
 	private static final String SQL_CREATE_ATTACK_ENTRIES;
 	private static final String SQL_CREATE_PACKET_ENTRIES;
-	private static final String SQL_CREATE_PROFIL_ENTRIES;
+	private static final String SQL_CREATE_PROFILE_ENTRIES;
 	private static final String SQL_CREATE_SYNC_DEVICES_ENTRIES;
 	private static final String SQL_CREATE_SYNC_INFO_ENTRIES;
 
 	private static final String SQL_DELETE_PACKET_ENTRIES = "DROP TABLE IF EXISTS " + PacketEntry.TABLE_NAME;
 	private static final String SQL_DELETE_ATTACK_ENTRIES = "DROP TABLE IF EXISTS " + AttackEntry.TABLE_NAME;
 	private static final String SQL_DELETE_NETWORK_ENTRIES = "DROP TABLE IF EXISTS " + NetworkEntry.TABLE_NAME;
-	private static final String SQL_DELETE_PROFIL_ENTRIES = "DROP TABLE IF EXISTS " + ProfileEntry.TABLE_NAME;
+	private static final String SQL_DELETE_PROFILE_ENTRIES = "DROP TABLE IF EXISTS " + ProfileEntry.TABLE_NAME;
 	private static final String SQL_DELETE_SYNC_DEVICES_ENTRIES = "DROP TABLE IF EXISTS " + SyncDeviceEntry.TABLE_NAME;
 	private static final String SQL_DELETE_SYNC_INFO_ENTRIES = "DROP TABLE IF EXISTS " + SyncInfoEntry.TABLE_NAME;
 
@@ -129,7 +138,7 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		db.execSQL(SQL_CREATE_NETWORK_ENTRIES);
 		db.execSQL(SQL_CREATE_ATTACK_ENTRIES);
 		db.execSQL(SQL_CREATE_PACKET_ENTRIES);
-		db.execSQL(SQL_CREATE_PROFIL_ENTRIES);
+		db.execSQL(SQL_CREATE_PROFILE_ENTRIES);
 		db.execSQL(SQL_CREATE_SYNC_DEVICES_ENTRIES);
 		db.execSQL(SQL_CREATE_SYNC_INFO_ENTRIES);
 	}
@@ -139,7 +148,7 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		db.execSQL(SQL_DELETE_SYNC_INFO_ENTRIES);
 		db.execSQL(SQL_DELETE_PACKET_ENTRIES);
 		db.execSQL(SQL_DELETE_ATTACK_ENTRIES);
-		db.execSQL(SQL_DELETE_PROFIL_ENTRIES);
+		db.execSQL(SQL_DELETE_PROFILE_ENTRIES);
 		db.execSQL(SQL_DELETE_NETWORK_ENTRIES);
 		db.execSQL(SQL_DELETE_SYNC_DEVICES_ENTRIES);
 		onCreate(db);
@@ -184,6 +193,7 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		attackValues.put(AttackEntry.COLUMN_NAME_LOCAL_PORT, record.getLocalPort());
 		attackValues.put(AttackEntry.COLUMN_NAME_REMOTE_IP, record.getRemoteIP()); // Log Remote IP
 		attackValues.put(AttackEntry.COLUMN_NAME_REMOTE_PORT, record.getRemotePort()); // Log Remote Port
+		attackValues.put(AttackEntry.COLUMN_NAME_INTERNAL_ATTACK, record.getWasInternalAttack());
 		attackValues.put(AttackEntry.COLUMN_NAME_BSSID, record.getBssid());
 		
 
@@ -779,7 +789,7 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 	
 	/**
 	 * Updates the sync_info table with the information contained in the parameter.
-	 * @param networkInformation ArrayList of {@link SyncInfoRecord SyncInfoRecords}
+	 * @param syncInfo ArrayList of {@link SyncInfoRecord SyncInfoRecords}
 	 * @see  {@link HostageDBOpenHelper#updateSyncInfo(SyncInfoRecord syncInfo)}
 	 */
 	public synchronized void updateSyncInfo(ArrayList<SyncInfoRecord> syncInfo){
@@ -806,7 +816,6 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 	
 	/**
 	 * Deletes a device with given id from the device {@link SyncDeviceEntry.TABLE_NAME} and also all data captured by this device in  {@link SyncInfoEntry.TABLE_NAME}
-	 * @param device_id The id of the device that is to be deleted.
 	 */
 	public void clearSyncInfos(){
 		SQLiteDatabase db = this.getReadableDatabase();
@@ -900,7 +909,8 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		record.setLocalPort(Integer.parseInt(cursor.getString(4)));
 		record.setRemoteIP(cursor.getString(5));
 		record.setRemotePort(Integer.parseInt(cursor.getString(6)));
-		record.setBssid(cursor.getString(7));
+		record.setWasInternalAttack(cursor.getInt(7) == 1);
+		record.setBssid(cursor.getString(8));
 
 		return record;
 	}
@@ -928,12 +938,14 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		record.setRemoteIP(cursor.getString(9));
 		record.setRemotePort(Integer.parseInt(cursor.getString(10)));
 
-		record.setBssid(cursor.getString(11));
-		record.setSsid(cursor.getString(12));
-		record.setLatitude(Double.parseDouble(cursor.getString(13)));
-		record.setLongitude(Double.parseDouble(cursor.getString(14)));
-		record.setAccuracy(Float.parseFloat(cursor.getString(15)));
-		record.setTimestampLocation(cursor.getLong(16));
+		record.setWasInternalAttack(Integer.parseInt(cursor.getString(11)) == 1);
+
+		record.setBssid(cursor.getString(12));
+		record.setSsid(cursor.getString(13));
+		record.setLatitude(Double.parseDouble(cursor.getString(14)));
+		record.setLongitude(Double.parseDouble(cursor.getString(15)));
+		record.setAccuracy(Float.parseFloat(cursor.getString(16)));
+		record.setTimestampLocation(cursor.getLong(17));
 
 		return record;
 	}
@@ -947,38 +959,8 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 	 */
 	public synchronized ArrayList<Record> getRecordsForFilter(LogFilter filter) {
 		ArrayList<Record> recordList = new ArrayList<Record>();
-		String selectQuery = "SELECT  * FROM " + PacketEntry.TABLE_NAME + " NATURAL JOIN " + AttackEntry.TABLE_NAME + " JOIN " + NetworkEntry.TABLE_NAME + " USING " + "(" + NetworkEntry.COLUMN_NAME_BSSID
-				+ ")";
-
-		// TIMESTAMPS
-		selectQuery = selectQuery + " WHERE " + PacketEntry.TABLE_NAME + "." + PacketEntry.COLUMN_NAME_PACKET_TIMESTAMP;
-		selectQuery = selectQuery + " < " + filter.getBelowTimestamp();
-		selectQuery = selectQuery + " AND " + PacketEntry.TABLE_NAME + "." + PacketEntry.COLUMN_NAME_PACKET_TIMESTAMP;
-		selectQuery = selectQuery + " > " + filter.getAboveTimestamp();
-
-		if (filter.getBSSIDs() != null && filter.getBSSIDs().size() > 0) {
-			selectQuery = selectQuery + " AND ";
-			selectQuery = selectQuery + filter.getBSSIDQueryStatement(NetworkEntry.TABLE_NAME, NetworkEntry.COLUMN_NAME_BSSID);
-		}
-		if (filter.getESSIDs() != null && filter.getESSIDs().size() > 0) {
-			selectQuery = selectQuery + " AND ";
-			selectQuery = selectQuery + filter.getESSIDQueryStatement(NetworkEntry.TABLE_NAME, NetworkEntry.COLUMN_NAME_SSID);
-		}
-		if (filter.getProtocols() != null && filter.getProtocols().size() > 0) {
-			selectQuery = selectQuery + " AND ";
-			selectQuery = selectQuery + filter.getProtocolsQueryStatement(AttackEntry.TABLE_NAME, AttackEntry.COLUMN_NAME_PROTOCOL);
-		}
-
-		selectQuery = selectQuery + " GROUP BY " + PacketEntry.TABLE_NAME + "." + PacketEntry.COLUMN_NAME_ATTACK_ID;
-
-		if (filter.getSorttype() == LogFilter.SortType.packet_timestamp) {
-			// DESC
-			selectQuery = selectQuery + " ORDER BY " + filter.getSorttype() + " DESC";
-		} else {
-			selectQuery = selectQuery + " ORDER BY " + filter.getSorttype();
-		}
+		String selectQuery = this.selectionQueryFromFilter(filter, "*");
 
-		System.out.println(selectQuery);
 		SQLiteDatabase db = this.getReadableDatabase();
 		Cursor cursor = db.rawQuery(selectQuery, null);
 
@@ -996,8 +978,53 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		db.close();
 		return recordList;
 	}
-	
-	/*
+
+    /**
+     * Returns the query for the given filter.
+     * @param filter (LogFilter)
+     * @param selectionString (String) for everything: "*"
+     * @return (String) query string
+     */
+    public String selectionQueryFromFilter(LogFilter filter, String selectionString)
+    {
+
+        String selectQuery = "SELECT " + selectionString + " FROM " + PacketEntry.TABLE_NAME + " NATURAL JOIN " + AttackEntry.TABLE_NAME + " JOIN " + NetworkEntry.TABLE_NAME + " USING " + "(" + NetworkEntry.COLUMN_NAME_BSSID
+                + ")";
+        if (filter == null) return selectQuery;
+
+        // TIMESTAMPS
+        selectQuery = selectQuery + " WHERE " + PacketEntry.TABLE_NAME + "." + PacketEntry.COLUMN_NAME_PACKET_TIMESTAMP;
+        selectQuery = selectQuery + " < " + filter.getBelowTimestamp();
+        selectQuery = selectQuery + " AND " + PacketEntry.TABLE_NAME + "." + PacketEntry.COLUMN_NAME_PACKET_TIMESTAMP;
+        selectQuery = selectQuery + " > " + filter.getAboveTimestamp();
+
+        if (filter.getBSSIDs() != null && filter.getBSSIDs().size() > 0) {
+            selectQuery = selectQuery + " AND ";
+            selectQuery = selectQuery + filter.getBSSIDQueryStatement(NetworkEntry.TABLE_NAME, NetworkEntry.COLUMN_NAME_BSSID);
+        }
+        if (filter.getESSIDs() != null && filter.getESSIDs().size() > 0) {
+            selectQuery = selectQuery + " AND ";
+            selectQuery = selectQuery + filter.getESSIDQueryStatement(NetworkEntry.TABLE_NAME, NetworkEntry.COLUMN_NAME_SSID);
+        }
+        if (filter.getProtocols() != null && filter.getProtocols().size() > 0) {
+            selectQuery = selectQuery + " AND ";
+            selectQuery = selectQuery + filter.getProtocolsQueryStatement(AttackEntry.TABLE_NAME, AttackEntry.COLUMN_NAME_PROTOCOL);
+        }
+
+        selectQuery = selectQuery + " GROUP BY " + PacketEntry.TABLE_NAME + "." + PacketEntry.COLUMN_NAME_ATTACK_ID;
+
+        if (filter.getSorttype() == LogFilter.SortType.packet_timestamp) {
+            // DESC
+            selectQuery = selectQuery + " ORDER BY " + filter.getSorttype() + " DESC";
+        } else {
+            selectQuery = selectQuery + " ORDER BY " + filter.getSorttype();
+        }
+
+        System.out.println(selectQuery);
+        return selectQuery;
+    }
+
+	/**
 	 * Returns the Conversation of a specific attack id
 	 * 
 	 * @param attack_id Tha attack id to match the query against.
@@ -1339,4 +1366,90 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		return recordList;
 	}
 
+    /**
+     * Returns PlotComparisionItems for attacks per essid.
+     * @param filter (LogFilter) filter object
+     * @return ArrayList<PlotComparisonItem>
+     */
+    public synchronized ArrayList<PlotComparisonItem> attacksPerESSID(LogFilter filter) {
+
+        String filterQuery = this.selectionQueryFromFilter(filter, AttackEntry.COLUMN_NAME_ATTACK_ID);
+
+        String attackPerESSID_Query = "SELECT " + NetworkEntry.COLUMN_NAME_SSID + " , " + "COUNT( " + AttackEntry.COLUMN_NAME_ATTACK_ID + "  ) " + " "
+                                    + " FROM " + AttackEntry.TABLE_NAME + " a " + " , " + NetworkEntry.TABLE_NAME
+                                    + " WHERE " + " a." + AttackEntry.COLUMN_NAME_ATTACK_ID + " IN " + " ( " + filterQuery + " ) "
+                                    + " GROUP BY " + NetworkEntry.TABLE_NAME+"."+NetworkEntry.COLUMN_NAME_SSID;
+
+        SQLiteDatabase db = this.getReadableDatabase();
+        Cursor cursor = db.rawQuery(attackPerESSID_Query, null);
+        ArrayList<PlotComparisonItem> plots = new ArrayList<PlotComparisonItem>();
+
+        int counter = 0;
+
+        if (cursor.moveToFirst()) {
+            do {
+                String title = cursor.getString(0); // COLUMN_NAME_SSID
+                double value = cursor.getDouble(1); // COUNT
+                if (value == 0.) continue;
+                PlotComparisonItem plotItem = new PlotComparisonItem(title, this.getColor(counter), 0. , value);
+                plots.add(plotItem);
+
+                counter++;
+            } while (cursor.moveToNext());
+        }
+        cursor.close();
+        db.close();
+
+        return plots;
+
+    }
+
+
+
+    /**
+     * Attacks per BSSID
+     * @param filter (LogFilter) query filter
+     * @return ArrayList<PlotComparisonItem>
+     */
+    public synchronized ArrayList<PlotComparisonItem> attacksPerBSSID(LogFilter filter) {
+
+        String filterQuery = this.selectionQueryFromFilter(filter, AttackEntry.COLUMN_NAME_ATTACK_ID);
+
+        String attackPerBSSID_Query = "SELECT " + NetworkEntry.COLUMN_NAME_BSSID + " , " + "COUNT( " + AttackEntry.COLUMN_NAME_ATTACK_ID + "  ) " + " "
+                + " FROM " + AttackEntry.TABLE_NAME + " a " + " , " + NetworkEntry.TABLE_NAME
+                + " WHERE " + " a." + AttackEntry.COLUMN_NAME_ATTACK_ID + " IN " + " ( " + filterQuery + " ) "
+                + " GROUP BY " + NetworkEntry.TABLE_NAME+"."+NetworkEntry.COLUMN_NAME_BSSID;
+
+        SQLiteDatabase db = this.getReadableDatabase();
+        Cursor cursor = db.rawQuery(attackPerBSSID_Query, null);
+        ArrayList<PlotComparisonItem> plots = new ArrayList<PlotComparisonItem>();
+
+        int counter = 0;
+
+        if (cursor.moveToFirst()) {
+            do {
+                String title = cursor.getString(0); // COLUMN_NAME_BSSID
+                double value = cursor.getDouble(1); // COUNT
+
+                if (value == 0.) continue;
+                PlotComparisonItem plotItem = new PlotComparisonItem(title, this.getColor(counter), 0. , value);
+                plots.add(plotItem);
+
+                counter++;
+            } while (cursor.moveToNext());
+        }
+        cursor.close();
+        db.close();
+
+        return plots;
+
+    }
+
+
+    /** Returns the color for the given index
+     * @return int color*/
+    public Integer getColor(int index) {
+        return ColorSequenceGenerator.getColorForIndex(index);
+    }
+
 }

+ 3 - 0
src/de/tudarmstadt/informatik/hostage/protocol/SMB.java

@@ -61,6 +61,9 @@ public class SMB implements Protocol {
 
 	public void setIP(String ip) {
 //		TODO if porthack is working for UDP uncomment
+        nmb = new NMB(ip, "BLIBLABLUB", "Workgroup");
+        nmb.start();
+
 //		nmb = new NMB(ip, new String(serverName), workgroup);
 //		nmb.start();
 	}

+ 12 - 4
src/de/tudarmstadt/informatik/hostage/protocol/smbutils/NBSS.java

@@ -7,6 +7,7 @@ import java.net.ServerSocket;
 import java.net.Socket;
 import java.util.List;
 
+import de.tudarmstadt.informatik.hostage.net.MyServerSocketFactory;
 import de.tudarmstadt.informatik.hostage.nio.Reader;
 import de.tudarmstadt.informatik.hostage.nio.Writer;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol.TALK_FIRST;
@@ -25,16 +26,23 @@ public class NBSS extends Thread {
 	private Reader reader;
 	private Writer writer;
 	private SMB smb;
-	
+
+	public NBSS() {
+		nbssPort = 139;
+		MyServerSocketFactory factory = new MyServerSocketFactory();
+		try {
+			nbssServer = factory.createServerSocket(nbssPort);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
 	@Override
 	public void run() {
 		try {
-			nbssPort = 139;
-			nbssServer = new ServerSocket(nbssPort);
 			nbssSocket = nbssServer.accept();
 			smb = new SMB();
 			talkToClient(nbssSocket.getInputStream(), nbssSocket.getOutputStream());
-			
 		} catch (IOException e) {
 			e.printStackTrace();
 		}

+ 20 - 2
src/de/tudarmstadt/informatik/hostage/protocol/smbutils/NMB.java

@@ -9,6 +9,7 @@ import java.net.SocketTimeoutException;
 import java.net.UnknownHostException;
 
 import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
+import de.tudarmstadt.informatik.hostage.net.MyDatagramSocketFactory;
 
 /**
  * NetBIOS.
@@ -210,14 +211,31 @@ public class NMB extends Thread {
 	public void run() {
 		NBSS nbss = new NBSS();
 		nbss.start();
+
+		/*
+		// XXX: workaround for race condition TODO: FIX FIX FIX
+		try {
+			Thread.sleep(1000);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		*/
+
 		try {
+/*
 			nbnsSocket = new DatagramSocket(nbnsPort);
 			nbdsSocket = new DatagramSocket(nbdsPort);
+*/
+			MyDatagramSocketFactory factory = new MyDatagramSocketFactory();
+			nbnsSocket = factory.createDatagramSocket(nbnsPort);
+			nbdsSocket = factory.createDatagramSocket(nbdsPort);
 		} catch (SocketException e) {
 			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
 		}
-		
-		registrate();
+
+        registrate();
 		announceHost();
 		queryName();
 		checkForAnswers();

+ 1 - 0
src/de/tudarmstadt/informatik/hostage/sync/tracing/TracingSyncService.java

@@ -154,6 +154,7 @@ public class TracingSyncService extends IntentService {
 			httppost.setEntity(se);
 			// Execute HttpPost
 			HttpResponse response = httpClient.execute(httppost);
+            // TODO Does it make sense to update the network record after a commit?
 			getRemoteData(record.getBssid(), record.getTimestampLocation());
 			Log.i("TracingSyncService", "Status Code: " + response.getStatusLine().getStatusCode());
 		} catch (Exception e) {

+ 8 - 2
src/de/tudarmstadt/informatik/hostage/ui/fragment/ConnectionInfoDialogFragment.java

@@ -16,6 +16,7 @@ import android.widget.TextView;
 import java.util.ArrayList;
 
 import de.tudarmstadt.informatik.hostage.R;
+import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 import de.tudarmstadt.informatik.hostage.ui.model.LogFilter;
 import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
 
@@ -29,6 +30,7 @@ public class ConnectionInfoDialogFragment extends DialogFragment {
 		String ssid = "undefined";
 		String bssid = "undefined";
 		String internalIP = "undefined";
+		String subnetMask = "undefined";
 		String externalIP = "undefined";
 
 		// get infos about the current connection using SharedPreferences
@@ -37,8 +39,11 @@ public class ConnectionInfoDialogFragment extends DialogFragment {
 			SharedPreferences sharedPreferences = activity.getSharedPreferences(getString(R.string.connection_info), Context.MODE_PRIVATE);
 			ssid = sharedPreferences.getString(getString(R.string.connection_info_ssid), "");
 			bssid = sharedPreferences.getString(getString(R.string.connection_info_bssid), "");
-			internalIP = sharedPreferences.getString(getString(R.string.connection_info_internal_ip), "");
-			externalIP = sharedPreferences.getString(getString(R.string.connection_info_external_ip), "");
+			internalIP = HelperUtils.inetAddressToString(
+					sharedPreferences.getInt(getString(R.string.connection_info_internal_ip), 0));
+			subnetMask = HelperUtils.inetAddressToString(sharedPreferences.getInt(getString(R.string.connection_info_subnet_mask), 0));
+			externalIP = sharedPreferences.getString(
+					getString(R.string.connection_info_external_ip), "");
 		}
 
 		// inflate the layout with a dark theme
@@ -51,6 +56,7 @@ public class ConnectionInfoDialogFragment extends DialogFragment {
 			((TextView)view.findViewById(R.id.connectioninfo_ssid_value)).setText(ssid);
 			((TextView)view.findViewById(R.id.connectioninfo_bssid_value)).setText(bssid);
 			((TextView)view.findViewById(R.id.connectioninfo_internalip_value)).setText(internalIP);
+			((TextView)view.findViewById(R.id.connectioninfo_subnetmask_value)).setText(subnetMask);
 			((TextView)view.findViewById(R.id.connectioninfo_externalip_value)).setText(externalIP);
 		}
 

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

@@ -174,8 +174,8 @@ public class HomeFragment extends Fragment {
 
 		if (HelperUtils.isNetworkAvailable(getActivity())) {
 			setStateConnected();
-			String ssid = mConnectionInfo.getString(getString(R.string.connection_info_ssid), "\"\"");
-			mHomeTextName.setText(ssid.substring(1,ssid.length() - 1));
+			String ssid = mConnectionInfo.getString(getString(R.string.connection_info_ssid), "");
+			mHomeTextName.setText(ssid);
 		} else {
 			setStateNotConnected();
 		}

+ 3 - 0
src/de/tudarmstadt/informatik/hostage/ui/fragment/RecordDetailFragment.java

@@ -54,6 +54,7 @@ public class RecordDetailFragment extends UpNavigatibleFragment {
 	 */
 	private View mRootView;
 	private LinearLayout mRecordOverviewConversation;
+	private TextView mRecordDetailsTextAttackType;
 	private TextView mRecordDetailsTextSsid;
 	private TextView mRecordDetailsTextBssid;
 	private TextView mRecordDetailsTextRemoteip;
@@ -128,6 +129,7 @@ public class RecordDetailFragment extends UpNavigatibleFragment {
 	 */
 	private void assignViews(View view) {
 		mRecordOverviewConversation = (LinearLayout) view.findViewById(R.id.record_overview_conversation);
+		mRecordDetailsTextAttackType = (TextView) view.findViewById(R.id.record_details_text_attack_type);
 		mRecordDetailsTextSsid = (TextView) view.findViewById(R.id.record_details_text_ssid);
 		mRecordDetailsTextBssid = (TextView) view.findViewById(R.id.record_details_text_bssid);
 		mRecordDetailsTextRemoteip = (TextView) view.findViewById(R.id.record_details_text_remoteip);
@@ -143,6 +145,7 @@ public class RecordDetailFragment extends UpNavigatibleFragment {
 	 */
 	private void configurateRootView(View rootView) {
 
+		mRecordDetailsTextAttackType.setText(mRecord.getWasInternalAttack() ? R.string.RecordInternalAttack : R.string.RecordExternalAttack);
 		mRecordDetailsTextBssid.setText(mRecord.getBssid());
 		mRecordDetailsTextSsid.setText(mRecord.getSsid());
 		if (mRecord.getRemoteIP() != null)

+ 1 - 1
src/de/tudarmstadt/informatik/hostage/ui/fragment/ServicesFragment.java

@@ -106,7 +106,7 @@ public class ServicesFragment extends TrackerFragment {
             }
             String ssid = mConnectionInfo.getString(getString(R.string.connection_info_ssid), "");
 
-            mServicesTextName.setText(ssid.substring(1,ssid.length()-1));
+            mServicesTextName.setText(ssid);
         }
 
     }

+ 17 - 13
src/de/tudarmstadt/informatik/hostage/ui/fragment/StatisticsFragment.java

@@ -336,7 +336,7 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
     }
 
     /**Sets the current chart to the given type and acualises it.
-    * @param  type  {@link de.tudarmstadt.informatik.hostage.ui2.fragment.StatisticsFragment.ChartType ChartType}
+    * @param  type  {@link de.tudarmstadt.informatik.hostage.ui.fragment.StatisticsFragment.ChartType ChartType}
     * */
     public void setChartType(ChartType type){
         boolean shouldChange = true;
@@ -379,7 +379,7 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
     }
 
     /**Returns the plot view for a given type.
-    * @param type  {@link de.tudarmstadt.informatik.hostage.ui2.fragment.StatisticsFragment.ChartType ChartType}
+    * @param type  {@link de.tudarmstadt.informatik.hostage.ui.fragment.StatisticsFragment.ChartType ChartType}
     * */
     public View getPlotViewForType(ChartType type){
         switch (type){
@@ -832,13 +832,13 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
      * @return ArrayList<String> essids
      * */
     public ArrayList<String> essids(){
-        ArrayList<String> records;
+        ArrayList<String> essids;
         if (this.currentPlotView instanceof BarGraph){
-            records = dbh.getUniqueESSIDRecordsForProtocol(this.getCurrentSelectedProtocol());
+            essids = dbh.getUniqueESSIDRecordsForProtocol(this.getCurrentSelectedProtocol());
         } else {
-            records = dbh.getUniqueESSIDRecords();
+            essids = dbh.getUniqueESSIDRecords();
         }
-        return records;
+        return essids;
     }
     /** Returns a boolean array. The position in the array will be true, if the essid is selected in the filter.
      * @return boolean[] selected essids*/
@@ -859,13 +859,13 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
      * @return ArrayList<String> bssids
      * */
     public ArrayList<String> bssids(){
-        ArrayList<String> records ;
+        ArrayList<String> bssids ;
         if (this.currentPlotView instanceof BarGraph){
-            records = dbh.getUniqueBSSIDRecordsForProtocol(this.getCurrentSelectedProtocol());
+            bssids = dbh.getUniqueBSSIDRecordsForProtocol(this.getCurrentSelectedProtocol());
         } else {
-            records = dbh.getUniqueBSSIDRecords();
+            bssids = dbh.getUniqueBSSIDRecords();
         }
-        return records;
+        return bssids;
     }
     /** Returns a boolean array. The position in the array will be true, if the bssid is selected in the filter.
      * @return boolean[] selected bssids*/
@@ -1425,8 +1425,9 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
         protocollist.add(protocol);
         filter.setProtocols(protocollist);
 
-        ArrayList<PlotComparisonItem> plotItems = new ArrayList<PlotComparisonItem>();
+        ArrayList<PlotComparisonItem> plotItems = this.dbh.attacksPerBSSID(filter); //new ArrayList<PlotComparisonItem>();
 
+        /*
         HashMap<String, Integer> recordMap = new HashMap<String, Integer>();
         ArrayList<Record> records = this.dbh.getRecordsForFilter(filter);
         for (Record record : records){
@@ -1445,6 +1446,7 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
             plotItems.add(item);
             index++;
         }
+        */
         Collections.sort(plotItems, new Comparator<PlotComparisonItem>() {
             @Override
             public int compare(PlotComparisonItem s1, PlotComparisonItem s2) {
@@ -1465,8 +1467,9 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
         protocollist.add(protocol);
         filter.setProtocols(protocollist);
 
-        ArrayList<PlotComparisonItem> plotItems = new ArrayList<PlotComparisonItem>();
+        ArrayList<PlotComparisonItem> plotItems = this.dbh.attacksPerESSID(filter); //new ArrayList<PlotComparisonItem>();
 
+        /*
         HashMap<String, Integer> recordMap = new HashMap<String, Integer>();
         ArrayList<Record> records = this.dbh.getRecordsForFilter(filter);
         for (Record record : records){
@@ -1485,6 +1488,7 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
             plotItems.add(item);
             index++;
         }
+        */
         Collections.sort(plotItems, new Comparator<PlotComparisonItem>() {
             @Override
             public int compare(PlotComparisonItem s1, PlotComparisonItem s2) {
@@ -1813,7 +1817,7 @@ public class StatisticsFragment extends TrackerFragment implements ChecklistDial
 
     /**
      * Displays a record over view fragment.
-     * @param filter  {@link de.tudarmstadt.informatik.hostage.ui2.model.LogFilter LogFilter}
+     * @param filter  {@link de.tudarmstadt.informatik.hostage.ui.model.LogFilter LogFilter}
      * @param groupingKey String, key to group the attack list in the RecordOverview
      */
     private void pushRecordOverviewForFilter(LogFilter filter, String groupingKey){