Browse Source

Bug fixing, Added display of ExternalIP

Lars 10 năm trước cách đây
mục cha
commit
2b1c25e7b2
25 tập tin đã thay đổi với 384 bổ sung235 xóa
  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;
+		}
+	};
+
 }