Browse Source

Bug fixing, Added display of ExternalIP

Lars 10 years ago
parent
commit
2b1c25e7b2
25 changed files with 384 additions and 235 deletions
  1. BIN
      bin/classes.dex
  2. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/HoneyService$LocalBinder.class
  3. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/HoneyService.class
  4. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$id.class
  5. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$layout.class
  6. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$menu.class
  7. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$string.class
  8. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/R$style.class
  9. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/FTP.class
  10. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/protocol/SMB.class
  11. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/ListViewAdapter.class
  12. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$1.class
  13. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$2.class
  14. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$3.class
  15. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$4.class
  16. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$5.class
  17. BIN
      bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity.class
  18. BIN
      bin/hostage.apk
  19. BIN
      bin/resources.ap_
  20. 115 112
      gen/de/tudarmstadt/informatik/hostage/R.java
  21. 24 3
      res/layout/activity_main.xml
  22. 2 1
      res/values/strings.xml
  23. 22 0
      src/de/tudarmstadt/informatik/hostage/HoneyService.java
  24. 96 0
      src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java
  25. 125 119
      src/de/tudarmstadt/informatik/hostage/ui/MainActivity.java

BIN
bin/classes.dex


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_


+ 115 - 112
gen/de/tudarmstadt/informatik/hostage/R.java

@@ -1,112 +1,115 @@
-/* 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=0x7f060000;
-    }
-    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=0x7f050000;
-        public static final int activity_vertical_margin=0x7f050001;
-    }
-    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=0x7f0a000c;
-        public static final int action_settings=0x7f0a0011;
-        public static final int checkBoxParanoid=0x7f0a0003;
-        public static final int imageViewLight=0x7f0a0002;
-        public static final int listViewProtocols=0x7f0a000d;
-        public static final int textViewBSSID=0x7f0a0008;
-        public static final int textViewBSSIDValue=0x7f0a0009;
-        public static final int textViewConnections=0x7f0a000f;
-        public static final int textViewConnectionsValue=0x7f0a0010;
-        public static final int textViewDetails=0x7f0a0005;
-        public static final int textViewIP=0x7f0a000a;
-        public static final int textViewIPValue=0x7f0a000b;
-        public static final int textViewProtocol=0x7f0a000e;
-        public static final int textViewSSID=0x7f0a0006;
-        public static final int textViewSSIDValue=0x7f0a0007;
-        public static final int textViewStatus=0x7f0a0001;
-        public static final int toggleButtonOnOff=0x7f0a0004;
-        public static final int viewAnimator=0x7f0a0000;
-    }
-    public static final class layout {
-        public static final int activity_main=0x7f030000;
-        public static final int list_view_protocols_row=0x7f030001;
-    }
-    public static final class menu {
-        public static final int main=0x7f090000;
-    }
-    public static final class string {
-        public static final int action_settings=0x7f070001;
-        public static final int app_name=0x7f070000;
-        public static final int bssid=0x7f070008;
-        public static final int capital_off=0x7f070003;
-        public static final int capital_on=0x7f070002;
-        public static final int connections=0x7f07000b;
-        public static final int details=0x7f070006;
-        public static final int ip=0x7f070009;
-        public static final int paranoid=0x7f070005;
-        public static final int services=0x7f07000a;
-        public static final int ssid=0x7f070007;
-        public static final int status=0x7f070004;
-    }
-    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=0x7f080000;
-        /**  Application theme. 
- All customizations that are NOT specific to a particular API-level can go here. 
-         */
-        public static final int AppTheme=0x7f080001;
-    }
-}
+/* 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=0x7f060000;
+    }
+    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=0x7f050000;
+        public static final int activity_vertical_margin=0x7f050001;
+    }
+    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=0x7f0a000e;
+        public static final int action_settings=0x7f0a0013;
+        public static final int checkBoxParanoid=0x7f0a0003;
+        public static final int imageViewLight=0x7f0a0002;
+        public static final int listViewProtocols=0x7f0a000f;
+        public static final int textViewBSSID=0x7f0a0008;
+        public static final int textViewBSSIDValue=0x7f0a0009;
+        public static final int textViewConnections=0x7f0a0011;
+        public static final int textViewConnectionsValue=0x7f0a0012;
+        public static final int textViewDetails=0x7f0a0005;
+        public static final int textViewExternalIP=0x7f0a000c;
+        public static final int textViewExternalIPValue=0x7f0a000d;
+        public static final int textViewInternalIP=0x7f0a000a;
+        public static final int textViewInternalIPValue=0x7f0a000b;
+        public static final int textViewProtocol=0x7f0a0010;
+        public static final int textViewSSID=0x7f0a0006;
+        public static final int textViewSSIDValue=0x7f0a0007;
+        public static final int textViewStatus=0x7f0a0001;
+        public static final int toggleButtonOnOff=0x7f0a0004;
+        public static final int viewAnimator=0x7f0a0000;
+    }
+    public static final class layout {
+        public static final int activity_main=0x7f030000;
+        public static final int list_view_protocols_row=0x7f030001;
+    }
+    public static final class menu {
+        public static final int main=0x7f090000;
+    }
+    public static final class string {
+        public static final int action_settings=0x7f070001;
+        public static final int app_name=0x7f070000;
+        public static final int bssid=0x7f070008;
+        public static final int capital_off=0x7f070003;
+        public static final int capital_on=0x7f070002;
+        public static final int connections=0x7f07000c;
+        public static final int details=0x7f070006;
+        public static final int external_ip=0x7f07000a;
+        public static final int internal_ip=0x7f070009;
+        public static final int paranoid=0x7f070005;
+        public static final int services=0x7f07000b;
+        public static final int ssid=0x7f070007;
+        public static final int status=0x7f070004;
+    }
+    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=0x7f080000;
+        /**  Application theme. 
+ All customizations that are NOT specific to a particular API-level can go here. 
+         */
+        public static final int AppTheme=0x7f080001;
+    }
+}

+ 24 - 3
res/layout/activity_main.xml

@@ -112,15 +112,36 @@
                 android:layout_height="wrap_content" >
 
                 <TextView
-                    android:id="@+id/textViewIP"
+                    android:id="@+id/textViewInternalIP"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:paddingLeft="20dp"
-                    android:text="@string/ip"
+                    android:text="@string/internal_ip"
                     android:textAppearance="?android:attr/textAppearanceMedium" />
 
                 <TextView
-                    android:id="@+id/textViewIPValue"
+                    android:id="@+id/textViewInternalIPValue"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:paddingLeft="5dp"
+                    android:text="-"
+                    android:textAppearance="?android:attr/textAppearanceMedium" />
+            </LinearLayout>
+            
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" >
+
+                <TextView
+                    android:id="@+id/textViewExternalIP"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:paddingLeft="20dp"
+                    android:text="@string/external_ip"
+                    android:textAppearance="?android:attr/textAppearanceMedium" />
+
+                <TextView
+                    android:id="@+id/textViewExternalIPValue"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:paddingLeft="5dp"

+ 2 - 1
res/values/strings.xml

@@ -10,7 +10,8 @@
     <string name="details">Connection info</string>
     <string name="ssid">SSID:</string>
     <string name="bssid">BSSID:</string>
-    <string name="ip">IP:</string>
+    <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>
 

+ 22 - 0
src/de/tudarmstadt/informatik/hostage/HoneyService.java

@@ -13,6 +13,7 @@ import android.os.IBinder;
 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.FileLogger;
 import de.tudarmstadt.informatik.hostage.logging.Logger;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
@@ -54,6 +55,14 @@ public class HoneyService extends Service {
 			listeners.add(new HoneyListener(this, protocol));
 		}
 	}
+	
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        // We want this service to continue running until it is explicitly
+        // stopped, so return sticky.
+        return START_STICKY;
+    }
+	
 
 	@Override
 	public void onDestroy() {
@@ -99,6 +108,14 @@ public class HoneyService extends Service {
 
 		return protocolArray;
 	}
+	
+	public boolean hasRunningListeners(){
+		for (HoneyListener listener : listeners) {
+				if (listener.isRunning())
+					return true;
+		}
+		return false;
+	}
 
 	// IPC
 
@@ -111,12 +128,15 @@ public class HoneyService extends Service {
 		for (HoneyListener listener : listeners) {
 			listener.start();
 		}
+		Toast.makeText(getApplicationContext(), "SERVICES STARTED!", Toast.LENGTH_LONG).show();
 	}
 
 	public void stopListeners() {
 		for (HoneyListener listener : listeners) {
 			listener.stop();
 		}
+		notifyUI();
+		Toast.makeText(getApplicationContext(), "SERVICES STOPPED!", Toast.LENGTH_LONG).show();
 	}
 
 	public void startListener(String protocolName) {
@@ -125,6 +145,7 @@ public class HoneyService extends Service {
 				listener.start();
 			}
 		}
+		Toast.makeText(getApplicationContext(), protocolName + " SERVICE STARTED!", Toast.LENGTH_LONG).show();
 	}
 
 	public void stopListener(String protocolName) {
@@ -133,6 +154,7 @@ public class HoneyService extends Service {
 				listener.stop();
 			}
 		}
+		Toast.makeText(getApplicationContext(), protocolName + " SERVICE STOPPED!", Toast.LENGTH_LONG).show();
 	}
 
 	public void toggleListener(String protocolName) {

+ 96 - 0
src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java

@@ -0,0 +1,96 @@
+package de.tudarmstadt.informatik.hostage.commons;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+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 android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.text.TextUtils;
+
+public final class HelperUtils {
+
+	
+	public static String getSSID(Context context) {
+		  String ssid = null;
+		  ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+		  NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+		  if (networkInfo != null && networkInfo.isConnected()) {
+		    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+		    final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
+		    if (connectionInfo != null && !TextUtils.isEmpty(connectionInfo.getSSID())) {
+		      ssid = connectionInfo.getSSID();
+		    }
+		  }
+		  return ssid;
+		}
+	
+	public static String getBSSID(Context context) {
+		  String bssid = null;
+		  ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+		  NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+		  if (networkInfo != null && networkInfo.isConnected()) {
+		    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+		    final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
+		    if (connectionInfo != null && !TextUtils.isEmpty(connectionInfo.getSSID())) {
+		      bssid = connectionInfo.getBSSID();
+		    }
+		  }
+		  return bssid;
+		}
+	
+	public static String getInternalIP(Context context){
+		  String ipAddress = null;
+		  ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+		  NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+		  if (networkInfo != null && networkInfo.isConnected()) {
+			    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+			    final WifiInfo connectionInfo = wifiManager.getConnectionInfo();	
+			    if(connectionInfo != null){
+					try {
+						ipAddress = InetAddress.getByAddress(unpackInetAddress(connectionInfo.getIpAddress())).getHostAddress();
+					} catch (UnknownHostException e) {
+					}
+			    }
+		  }
+		  return ipAddress;
+	}
+	
+	private 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 String getExternalIP (Context context) {
+		String ipAddress = null;
+		   try {
+		        HttpClient httpclient = new DefaultHttpClient();
+		        HttpGet httpget = new HttpGet("http://ip2country.sourceforge.net/ip2c.php?format=JSON");
+		        HttpResponse response;
+
+		        response = httpclient.execute(httpget);
+
+		        HttpEntity entity = response.getEntity();
+		        entity.getContentLength();
+		        String str = EntityUtils.toString(entity);
+		        JSONObject json_data = new JSONObject(str);
+		        ipAddress = json_data.getString("ip");		        
+		    }
+		    catch (Exception e){}
+
+		   return ipAddress;
+	}
+
+
+	
+}

+ 125 - 119
src/de/tudarmstadt/informatik/hostage/ui/MainActivity.java

@@ -1,7 +1,5 @@
 package de.tudarmstadt.informatik.hostage.ui;
 
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -15,9 +13,6 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.support.v4.content.LocalBroadcastManager;
@@ -41,6 +36,7 @@ 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;
+import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 
 public class MainActivity extends Activity {
 
@@ -63,8 +59,8 @@ public class MainActivity extends Activity {
 
 	private ListView listView;
 	private ListViewAdapter adapter;
-
-	private boolean running;
+	
+	private String protocolClicked;
 
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
@@ -104,20 +100,21 @@ public class MainActivity extends Activity {
 	@Override
 	protected void onResume() {
 		super.onResume();
-		updateWifiInfo();
+		updateConnectionInfo();
 	}
 
-	@Override
-	public boolean onTouchEvent(MotionEvent event) {
-		return gestureDetector.onTouchEvent(event);
-	}
+
 
 	public void buttonOnOffClick(View view) {
 		if (((ToggleButton) view).isChecked()) {
+			if (isParanoid()) {
+				protocolClicked = "PANIC";
+			} else {
+				protocolClicked = "SMB";
+			}			
 			startAndBind();
 		} else {
 			stopAndUnbind();
-			running = false;
 		}
 	}
 
@@ -131,23 +128,34 @@ public class MainActivity extends Activity {
 		unbindService(mConnection);
 		stopService(getServiceIntent());
 	}
+	
+	private ServiceConnection mConnection = new ServiceConnection() {
 
-	private boolean isParanoid() {
-		return ((CheckBox) findViewById(R.id.checkBoxParanoid)).isChecked();
-	}
+		@Override
+		public void onServiceConnected(ComponentName name, IBinder service) {
+			mService = ((LocalBinder) service).getService();
+			if(protocolClicked != null && protocolClicked.equals("PANIC")){
+				mService.startListeners();
+			}else{
+				mService.toggleListener(protocolClicked);
+			}
+			protocolClicked = null;
+			updateUI();
+		}
 
-	private void initViewAnimator() {
-		viewAnimator = (ViewAnimator) findViewById(R.id.viewAnimator);
-		gestureDetector = new GestureDetector(this, simpleOnGestureListener);
+		@Override
+		public void onServiceDisconnected(ComponentName name) {
+			mService = null;			
+		}
 
-		animFlipInLR = AnimationUtils.loadAnimation(this,
-				R.anim.in_left_to_right);
-		animFlipOutLR = AnimationUtils.loadAnimation(this,
-				R.anim.out_left_to_right);
-		animFlipInRL = AnimationUtils.loadAnimation(this,
-				R.anim.in_right_to_left);
-		animFlipOutRL = AnimationUtils.loadAnimation(this,
-				R.anim.out_right_to_left);
+	};
+	
+	private Intent getServiceIntent() {
+		return new Intent(this, HoneyService.class);
+	}
+
+	private boolean isParanoid() {
+		return ((CheckBox) findViewById(R.id.checkBoxParanoid)).isChecked();
 	}
 
 	private void initListView() {
@@ -177,84 +185,30 @@ public class MainActivity extends Activity {
 					int position, long id) {
 				String protocolName = (String) ((HashMap<?, ?>) adapter
 						.getItem(position)).get("protocol");
-				if (!isServiceRunning()) {
+				if (isServiceRunning()) {
+					mService.toggleListener(protocolName);	
+					if(!mService.hasRunningListeners())
+						stopAndUnbind();
+				}else{
+					protocolClicked = protocolName;
 					startAndBind();
-				}
-				mService.toggleListener(protocolName);
+				}											
 			}
-
 		});
 	}
 
-	private void swipeRightToLeft() {
-		if (viewAnimator.getDisplayedChild() == 0) {
-			viewAnimator.setInAnimation(animFlipInRL);
-			viewAnimator.setOutAnimation(animFlipOutRL);
-			viewAnimator.setDisplayedChild(1);
-		}
-	}
 
-	private void swipeLeftToRight() {
-		if (viewAnimator.getDisplayedChild() == 1) {
-			viewAnimator.setInAnimation(animFlipInLR);
-			viewAnimator.setOutAnimation(animFlipOutLR);
-			viewAnimator.setDisplayedChild(0);
-		}
-	}
-
-	SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener() {
-		@Override
-		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
-				float velocityY) {
-			float sensitvity = 50;
-			if ((e1.getX() - e2.getX()) > sensitvity) {
-				swipeRightToLeft();
-			} else if ((e2.getX() - e1.getX()) > sensitvity) {
-				swipeLeftToRight();
-			}
-
-			return true;
-		}
-	};
 
 	private boolean isServiceRunning() {
 		ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
-		for (RunningServiceInfo service : manager
-				.getRunningServices(Integer.MAX_VALUE)) {
-			if (service.service.getClassName().equals(
-					HoneyService.class.getName())) {
+		for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
+			if (service.service.getClassName().equals(HoneyService.class.getName())) {
 				return true;
 			}
 		}
 		return false;
 	}
 
-	private Intent getServiceIntent() {
-		return new Intent(this, HoneyService.class);
-	}
-
-	private ServiceConnection mConnection = new ServiceConnection() {
-
-		@Override
-		public void onServiceConnected(ComponentName name, IBinder service) {
-			mService = ((LocalBinder) service).getService();
-			if (!running) {
-				if (isParanoid()) {
-					mService.startListeners();
-				} else {
-					mService.startListener("SMB");
-				}
-			}
-			running = true;
-			updateUI();
-		}
-
-		@Override
-		public void onServiceDisconnected(ComponentName name) {
-			mService = null;
-		}
-
-	};
 
 	private void registerReceiver() {
 		LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,
@@ -287,7 +241,7 @@ public class MainActivity extends Activity {
 
 		@Override
 		public void onReceive(Context context, Intent intent) {
-			updateWifiInfo();
+			updateConnectionInfo();
 		}
 
 	};
@@ -296,6 +250,7 @@ public class MainActivity extends Activity {
 		boolean activeListeners = false;
 		boolean activeHandlers = false;
 
+		if(mService != null){
 		for (HoneyListener listener : mService.getListeners()) {
 			if (listener.isRunning()) {
 				activeListeners = true;
@@ -311,6 +266,7 @@ public class MainActivity extends Activity {
 				updateProtocolLight(LIGHT_GREY, listener.getProtocolName());
 			}
 		}
+		}
 
 		if (activeListeners) {
 			if (activeHandlers) {
@@ -388,43 +344,93 @@ public class MainActivity extends Activity {
 		adapter.notifyDataSetChanged();
 	}
 
-	private void updateWifiInfo() {
-		ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
-		NetworkInfo info = manager.getActiveNetworkInfo();
-
+	private void updateConnectionInfo() {
 		TextView ssidView = (TextView) findViewById(R.id.textViewSSIDValue);
 		TextView bssidView = (TextView) findViewById(R.id.textViewBSSIDValue);
-		TextView ipView = (TextView) findViewById(R.id.textViewIPValue);
-
-		if (info != null && info.isConnectedOrConnecting()
-				&& info.getType() == ConnectivityManager.TYPE_WIFI) {
-
-			WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
-			WifiInfo wifiInfo = wifiManager.getConnectionInfo();
-			ssidView.setText(wifiInfo.getSSID());
-			bssidView.setText(wifiInfo.getBSSID());
-			try {
-				String ip = InetAddress.getByAddress(
-						unpackInetAddress(wifiInfo.getIpAddress()))
-						.getHostAddress();
-				ipView.setText(ip);
-			} catch (UnknownHostException e) {
-			}
-		} else {
+		TextView internalIPView = (TextView) findViewById(R.id.textViewInternalIPValue);
+		TextView externalIPView = (TextView) findViewById(R.id.textViewExternalIPValue);
+		
+		String ssid = HelperUtils.getSSID(getApplicationContext());
+		String bssid = HelperUtils.getBSSID(getApplicationContext());
+		String internalIP = HelperUtils.getInternalIP(getApplicationContext());
+		String externalIP = HelperUtils.getExternalIP(getApplicationContext());
+
+		if (ssid != null)
+			ssidView.setText(ssid);
+		else
 			ssidView.setText("-");
+		
+		if (bssid != null)
+			bssidView.setText(bssid);
+		else
 			bssidView.setText("-");
-			ipView.setText("-");
-		}
+		
+		if (internalIP != null)
+			internalIPView.setText(internalIP);
+		else
+			internalIPView.setText("-");
+		
+		if (externalIP != null)
+			externalIPView.setText(externalIP);
+		else
+			externalIPView.setText("-");		
 
 		ssidView.invalidate();
 		bssidView.invalidate();
-		ipView.invalidate();
+		internalIPView.invalidate();
+	}
+
+
+	/*############# AB HIER KOMMEN HILFSFUNKTIONEN FÜR GESTEN ##################*/
+	
+	@Override
+	public boolean onTouchEvent(MotionEvent event) {
+		return gestureDetector.onTouchEvent(event);
+	}
+	
+	private void initViewAnimator() {
+		viewAnimator = (ViewAnimator) findViewById(R.id.viewAnimator);
+		gestureDetector = new GestureDetector(this, simpleOnGestureListener);
+
+		animFlipInLR = AnimationUtils.loadAnimation(this,
+				R.anim.in_left_to_right);
+		animFlipOutLR = AnimationUtils.loadAnimation(this,
+				R.anim.out_left_to_right);
+		animFlipInRL = AnimationUtils.loadAnimation(this,
+				R.anim.in_right_to_left);
+		animFlipOutRL = AnimationUtils.loadAnimation(this,
+				R.anim.out_right_to_left);
+	}
+	
+	private void swipeRightToLeft() {
+		if (viewAnimator.getDisplayedChild() == 0) {
+			viewAnimator.setInAnimation(animFlipInRL);
+			viewAnimator.setOutAnimation(animFlipOutRL);
+			viewAnimator.setDisplayedChild(1);
+		}
 	}
 
-	private byte[] unpackInetAddress(int bytes) {
-		return new byte[] { (byte) ((bytes) & 0xff),
-				(byte) ((bytes >>> 8) & 0xff), (byte) ((bytes >>> 16) & 0xff),
-				(byte) ((bytes >>> 24) & 0xff) };
+	private void swipeLeftToRight() {
+		if (viewAnimator.getDisplayedChild() == 1) {
+			viewAnimator.setInAnimation(animFlipInLR);
+			viewAnimator.setOutAnimation(animFlipOutLR);
+			viewAnimator.setDisplayedChild(0);
+		}
 	}
 
+	SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener() {
+		@Override
+		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
+				float velocityY) {
+			float sensitvity = 50;
+			if ((e1.getX() - e2.getX()) > sensitvity) {
+				swipeRightToLeft();
+			} else if ((e2.getX() - e1.getX()) > sensitvity) {
+				swipeLeftToRight();
+			}
+
+			return true;
+		}
+	};
+
 }