Browse Source

Updated Database structure(delete application data before using),
Linked SSID to BSSID in deleteByBSSID

lp-tu 10 years ago
parent
commit
bd57fa5a3b

+ 57 - 33
src/de/tudarmstadt/informatik/hostage/logging/DatabaseHandler.java

@@ -22,11 +22,12 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	// Database Name
 	private static final String DATABASE_NAME = "recordManager";
 
-	// Contacts table name
+	// Contacts table names
 	private static final String TABLE_RECORDS = "records";
+	private static final String TABLE_BSSIDS = "bssids";
 
 	// Contacts Table Columns names
-	private static final String KEY_ID = "id";
+	private static final String KEY_ID = "_id";
 	private static final String KEY_ATTACK_ID = "attack_id";
 	private static final String KEY_PROTOCOL = "protocol";
 	private static final String KEY_TYPE = "type";
@@ -37,17 +38,21 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	private static final String KEY_REMOTE_IP = "remoteIP";
 	private static final String KEY_REMOTE_HOSTNAME = "remoteHostName";
 	private static final String KEY_REMOTE_PORT = "remotePort";
-	private static final String KEY_BSSID = "bssid";
+	private static final String KEY_BSSID = "_bssid";
 	private static final String KEY_SSID = "ssid";
 	private static final String KEY_PACKET = "packet";
 	
-	// Database sql create statement
+	// Database sql create statements
 	private static final String CREATE_RECORD_TABLE = "CREATE TABLE " + TABLE_RECORDS + "(" + KEY_ID
 			+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ATTACK_ID + " INTEGER," + KEY_PROTOCOL + " TEXT,"
 			+ KEY_TYPE + " TEXT," + KEY_TIME + " INTEGER," + KEY_LOCAL_IP
 			+ " BLOB," + KEY_LOCAL_HOSTNAME + " TEXT," + KEY_LOCAL_PORT + " INTEGER," + KEY_REMOTE_IP
 			+ " BLOB," + KEY_REMOTE_HOSTNAME + " TEXT," + KEY_REMOTE_PORT + " INTEGER," 
-			+ KEY_BSSID + " TEXT," + KEY_SSID + " TEXT," +  KEY_PACKET + " TEXT" + ")";
+			+ KEY_BSSID + " TEXT," +  KEY_PACKET + " TEXT," 
+			+ "FOREIGN KEY("+ KEY_BSSID +") REFERENCES " + TABLE_BSSIDS + "("+KEY_BSSID+")" + ")";
+	
+	private static final String CREATE_BSSID_TABLE = "CREATE TABLE " + TABLE_BSSIDS + "(" + KEY_BSSID
+			+ " TEXT PRIMARY KEY," + KEY_SSID + " TEXT" + ")";
 
 	public DatabaseHandler(Context context) {
 		super(context, DATABASE_NAME, null, DATABASE_VERSION);
@@ -56,6 +61,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	// Creating Tables
 	@Override
 	public void onCreate(SQLiteDatabase db) {
+		db.execSQL(CREATE_BSSID_TABLE);
 		db.execSQL(CREATE_RECORD_TABLE);
 	}
 
@@ -64,7 +70,8 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 		// Drop older table if existed
 		db.execSQL("DROP TABLE IF EXISTS " + TABLE_RECORDS);
-
+		db.execSQL("DROP TABLE IF EXISTS " + TABLE_BSSIDS);
+		
 		// Create tables again
 		onCreate(db);
 	}
@@ -73,23 +80,29 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	public void addRecord(Record record) {
 		SQLiteDatabase db = this.getWritableDatabase();
 
-		ContentValues values = new ContentValues();
-		values.put(KEY_ATTACK_ID, record.getAttack_id()); // Log Attack ID
-		values.put(KEY_PROTOCOL, record.getProtocol().toString());
-		values.put(KEY_TYPE, record.getType().name()); // Log Type
-		values.put(KEY_TIME, record.getTimestamp()); // Log Timestamp
-		values.put(KEY_LOCAL_IP, record.getLocalIP().getAddress()); // Log Local IP
-		values.put(KEY_LOCAL_HOSTNAME, record.getLocalIP().getHostName());
-		values.put(KEY_LOCAL_PORT, record.getLocalPort()); // Log Local Port
-		values.put(KEY_REMOTE_IP, record.getRemoteIP().getAddress()); // Log Remote IP
-		values.put(KEY_REMOTE_HOSTNAME, record.getRemoteIP().getHostName());
-		values.put(KEY_REMOTE_PORT, record.getRemotePort()); // Log Remote Port
-		values.put(KEY_BSSID, record.getBSSID());
-		values.put(KEY_SSID, record.getSSID());
-		values.put(KEY_PACKET, record.getPacket()); // Log Packet
+		ContentValues bssidValues = new ContentValues();
+		bssidValues.put(KEY_BSSID, record.getBSSID());
+		bssidValues.put(KEY_SSID, record.getSSID());
+		
+		ContentValues recordValues = new ContentValues();
+		recordValues.put(KEY_ATTACK_ID, record.getAttack_id()); // Log Attack ID
+		recordValues.put(KEY_PROTOCOL, record.getProtocol().toString());
+		recordValues.put(KEY_TYPE, record.getType().name()); // Log Type
+		recordValues.put(KEY_TIME, record.getTimestamp()); // Log Timestamp
+		recordValues.put(KEY_LOCAL_IP, record.getLocalIP().getAddress()); // Log Local IP
+		recordValues.put(KEY_LOCAL_HOSTNAME, record.getLocalIP().getHostName());
+		recordValues.put(KEY_LOCAL_PORT, record.getLocalPort()); // Log Local Port
+		recordValues.put(KEY_REMOTE_IP, record.getRemoteIP().getAddress()); // Log Remote IP
+		recordValues.put(KEY_REMOTE_HOSTNAME, record.getRemoteIP().getHostName());
+		recordValues.put(KEY_REMOTE_PORT, record.getRemotePort()); // Log Remote Port
+		recordValues.put(KEY_BSSID, record.getBSSID());
+		recordValues.put(KEY_PACKET, record.getPacket()); // Log Packet
+		
+
 
-		// Inserting Row
-		db.insert(TABLE_RECORDS, null, values);
+		// Inserting Rows
+		db.insertWithOnConflict(TABLE_BSSIDS, null, bssidValues, SQLiteDatabase.CONFLICT_REPLACE);
+		db.insert(TABLE_RECORDS, null, recordValues);
 		db.close(); // Closing database connection
 	}
 	
@@ -106,8 +119,8 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 		record.setRemoteIP(InetAddress.getByAddress(cursor.getString(9), cursor.getBlob(8)));
 		record.setRemotePort(Integer.parseInt(cursor.getString(10)));
 		record.setBSSID(cursor.getString(11));
-		record.setSSID(cursor.getString(12));
-		record.setPacket(cursor.getString(13));
+		record.setPacket(cursor.getString(12));
+		record.setSSID(cursor.getString(13));
 		} catch (UnknownHostException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
@@ -117,7 +130,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 
 	// Getting single record
 	public Record getRecord(int id) {
-		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " WHERE " + KEY_ID + " = " + id;
+		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " NATURAL JOIN " + TABLE_BSSIDS + " WHERE " + KEY_ID + " = " + id;
 		SQLiteDatabase db = this.getReadableDatabase();
 
 		Cursor cursor = db.rawQuery(selectQuery, null);
@@ -137,7 +150,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	public ArrayList<Record> getAllRecords() {
 		ArrayList<Record> recordList = new ArrayList<Record>();
 		// Select All Query
-		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS;
+		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " NATURAL JOIN " + TABLE_BSSIDS;
 
 		SQLiteDatabase db = this.getWritableDatabase();
 		Cursor cursor = db.rawQuery(selectQuery, null);
@@ -232,7 +245,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	// Getting first Record for each AttackId
     public ArrayList<Record> getRecordOfEachAttack() {
     	ArrayList<Record> recordList = new ArrayList<Record>();
-        String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " GROUP BY " + KEY_ATTACK_ID;
+        String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " NATURAL JOIN " + TABLE_BSSIDS + " GROUP BY " + KEY_ATTACK_ID;
         SQLiteDatabase db = this.getReadableDatabase();
         Cursor cursor = db.rawQuery(selectQuery, null);
 		
@@ -254,7 +267,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
 	// Getting first Record for each AttackId greater than a given id
     public ArrayList<Record> getRecordOfEachAttack(int attack_id) {
     	ArrayList<Record> recordList = new ArrayList<Record>();
-        String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " WHERE " + KEY_ATTACK_ID + " > " + attack_id + " GROUP BY " + KEY_ATTACK_ID;
+        String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " NATURAL JOIN " + TABLE_BSSIDS + " WHERE " + KEY_ATTACK_ID + " > " + attack_id + " GROUP BY " + KEY_ATTACK_ID;
         SQLiteDatabase db = this.getReadableDatabase();
         Cursor cursor = db.rawQuery(selectQuery, null);
 		
@@ -275,7 +288,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     
 	// Getting first Record for each AttackId greater than a given id
     public Record getRecordOfAttackId(int attack_id) {
-        String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " WHERE " + KEY_ATTACK_ID + " = " + attack_id + " GROUP BY " + KEY_ATTACK_ID;
+        String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " NATURAL JOIN " + TABLE_BSSIDS + " WHERE " + KEY_ATTACK_ID + " = " + attack_id + " GROUP BY " + KEY_ATTACK_ID;
         SQLiteDatabase db = this.getReadableDatabase();
         Cursor cursor = db.rawQuery(selectQuery, null);
         Record record = null;
@@ -301,7 +314,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
     }
     
     public String[] getAllBSSIDS(){
-        String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " GROUP BY " + KEY_BSSID;
+        String selectQuery = "SELECT  * FROM " + TABLE_BSSIDS;
         SQLiteDatabase db = this.getReadableDatabase();
         Cursor cursor = db.rawQuery(selectQuery, null);
         String[] bssidList = new String[cursor.getCount()];
@@ -309,16 +322,27 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         // looping through all rows and adding to list
 		if (cursor.moveToFirst()) {
 			do {
-				bssidList[counter] = cursor.getString(11);
+				bssidList[counter] = cursor.getString(0);
 			} while (cursor.moveToNext());
 		}       
         cursor.close();
- 
-        // return count
         db.close();
         return bssidList;
     }
     
+    public String getSSID(String bssid){
+    	String selectQuery = "SELECT "+ KEY_SSID +" FROM " + TABLE_BSSIDS + " WHERE " + KEY_BSSID + " = " + "'" + bssid + "'";
+    	SQLiteDatabase db = this.getReadableDatabase();
+    	Cursor cursor = db.rawQuery(selectQuery, null);
+    	String ssid = null;
+    	if(cursor.moveToFirst()){
+    		ssid = cursor.getString(0);
+    	}
+        cursor.close();
+        db.close();
+        return ssid;
+    }
+    
     public void deleteByBSSID(String bssid){
     	SQLiteDatabase db = this.getReadableDatabase();
     	db.delete(TABLE_RECORDS, KEY_BSSID + " = ?", new String[]{bssid});

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

@@ -125,7 +125,7 @@ public class SQLLogger implements Logger{
 								StringEntity se = new StringEntity(record.toString(JSON));
 								httppost.setEntity(se);
 								HttpResponse response = httpclient.execute(httppost);
-								Log.i("SQLLogger", "Statuscode of log: " + progressBarStatus + " " + response.getStatusLine().getStatusCode());	
+								Log.i("SQLLogger", "Statuscode of log "  + progressBarStatus + ": " + " " + response.getStatusLine().getStatusCode());	
 								progressBarStatus++;								
 								builder.setProgress(progressMax, progressBarStatus, false);
 			                     // Update the progress bar

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

@@ -186,6 +186,9 @@ public class ViewLog extends Activity {
 	private void deleteByBSSID() {
 		AlertDialog.Builder builder = new AlertDialog.Builder(this);
 		final String[] bssidArray = dbh.getAllBSSIDS();
+		for(int i = 0; i < bssidArray.length; i++){
+			bssidArray[i] = bssidArray[i] + " (" + dbh.getSSID(bssidArray[i]) +")";
+		}
 		builder.setTitle(R.string.delete_dialog_title);
 		builder.setItems(bssidArray, new DialogInterface.OnClickListener() {
 			@SuppressLint("NewApi")