|
@@ -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});
|