Logger.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package de.tudarmstadt.informatik.hostage.logging;
  2. import android.app.IntentService;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.os.Parcelable;
  6. import de.tudarmstadt.informatik.hostage.logging.MessageRecord.TYPE;
  7. import de.tudarmstadt.informatik.hostage.persistence.HostageDBOpenHelper;
  8. /**
  9. * The Logger is used to write the database in dedicated worker threads and implements a message queue.
  10. * @author Mihai Plasoianu
  11. * @author Lars Pandikow
  12. *
  13. */
  14. public class Logger extends IntentService {
  15. private static final String ACTION_LOG_MESSAGE = "de.tudarmstadt.informatik.hostage.action.LOG_MESSAGE";
  16. private static final String ACTION_LOG_ATTACK = "de.tudarmstadt.informatik.hostage.action.LOG_ATTACK";
  17. private static final String ACTION_LOG_NETWORK = "de.tudarmstadt.informatik.hostage.action.LOG_NETWORK";
  18. private static final String ACTION_LOG_PORTSCAN = "de.tudarmstadt.informatik.hostage.action.LOG_PORTSCAN";
  19. private static final String ACTION_LOG_MULTISTAGE = "de.tudarmstadt.informatik.hostage.action.LOG_MULTISTAGE";
  20. private static final String EXTRA_RECORD = "de.tudarmstadt.informatik.hostage.extra.RECORD";
  21. private static final String EXTRA_RECORD2 = "de.tudarmstadt.informatik.hostage.extra.RECORD2";
  22. private static final String EXTRA_RECORD3 = "de.tudarmstadt.informatik.hostage.extra.RECORD3";
  23. private static final String EXTRA_TIMESTAMP = "de.tudarmstadt.informatik.hostage.extra.TIMESTAMP";
  24. /**
  25. * Adds a single MessageRecord to the Database.
  26. * @param context Context needed to access database
  27. * @param record The MessageRecord to be added
  28. */
  29. public static void log(Context context, MessageRecord record) {
  30. Intent intent = new Intent(context, Logger.class);
  31. intent.setAction(ACTION_LOG_MESSAGE);
  32. intent.putExtra(EXTRA_RECORD, (Parcelable)record);
  33. context.startService(intent);
  34. }
  35. /**
  36. * Adds a single AttackRecord to the Database.
  37. * @param context Context needed to access database
  38. * @param record The AttackRecord to be added
  39. */
  40. public static void log(Context context, AttackRecord record) {
  41. Intent intent = new Intent(context, Logger.class);
  42. intent.setAction(ACTION_LOG_ATTACK);
  43. intent.putExtra(EXTRA_RECORD, (Parcelable)record);
  44. context.startService(intent);
  45. }
  46. /**
  47. * Adds a single NetworkRecord to the Database.
  48. * @param context Context needed to access database
  49. * @param record The NetworkRecord to be added
  50. */
  51. public static void log(Context context, NetworkRecord record) {
  52. Intent intent = new Intent(context, Logger.class);
  53. intent.setAction(ACTION_LOG_NETWORK);
  54. intent.putExtra(EXTRA_RECORD, (Parcelable)record);
  55. context.startService(intent);
  56. }
  57. /**
  58. * Adds a port scan entry to the database
  59. * @param context Context needed to access database
  60. * @param attackRecord AttackRecord containing the attack information of the port scan
  61. * @param netRecord NetworkRecord containing the network information of the port scan
  62. * @param timestamp Timestamp of the port scan
  63. */
  64. public static void logPortscan(Context context, AttackRecord attackRecord, NetworkRecord netRecord, long timestamp){
  65. Intent intent = new Intent(context, Logger.class);
  66. intent.setAction(ACTION_LOG_PORTSCAN);
  67. intent.putExtra(EXTRA_RECORD, (Parcelable) attackRecord);
  68. intent.putExtra(EXTRA_RECORD2, (Parcelable) netRecord);
  69. intent.putExtra(EXTRA_TIMESTAMP, timestamp);
  70. context.startService(intent);
  71. }
  72. /**
  73. * Adds a Multi Stage Attack entry to the database
  74. * @param context
  75. * @param attackRecord
  76. * @param networkRecord
  77. * @param timestamp
  78. */
  79. public static void logMultiStageAttack(Context context,AttackRecord attackRecord,NetworkRecord networkRecord, MessageRecord messageRecord, long timestamp){
  80. Intent intent = new Intent(context, Logger.class);
  81. intent.setAction(ACTION_LOG_MULTISTAGE);
  82. intent.putExtra(EXTRA_RECORD, (Parcelable) attackRecord);
  83. intent.putExtra(EXTRA_RECORD2, (Parcelable)networkRecord);
  84. intent.putExtra(EXTRA_RECORD3,(Parcelable)messageRecord);
  85. intent.putExtra(EXTRA_TIMESTAMP, timestamp);
  86. context.startService(intent);
  87. }
  88. private HostageDBOpenHelper mDbHelper;
  89. public Logger() {
  90. super("Logger");
  91. }
  92. @Override
  93. public void onCreate() {
  94. super.onCreate();
  95. mDbHelper = new HostageDBOpenHelper(getApplicationContext());
  96. }
  97. private void handleActionLog(MessageRecord record) {
  98. mDbHelper.addMessageRecord(record);
  99. }
  100. private void handleActionLog(AttackRecord record) {
  101. mDbHelper.addAttackRecord(record);
  102. mDbHelper.updateSyncAttackCounter(record);
  103. }
  104. private void handleActionLog(NetworkRecord record) {
  105. mDbHelper.updateNetworkInformation(record);
  106. }
  107. /**
  108. * Method to handle the Intent created by the public interface.
  109. */
  110. @Override
  111. protected void onHandleIntent(Intent intent) {
  112. if (intent != null) {
  113. final String action = intent.getAction();
  114. if (ACTION_LOG_MESSAGE.equals(action)) {
  115. final MessageRecord record = intent.getParcelableExtra(EXTRA_RECORD);
  116. handleActionLog(record);
  117. }else if(ACTION_LOG_ATTACK.equals(action)){
  118. final AttackRecord record = intent.getParcelableExtra(EXTRA_RECORD);
  119. handleActionLog(record);
  120. }else if(ACTION_LOG_NETWORK.equals(action)){
  121. final NetworkRecord record = intent.getParcelableExtra(EXTRA_RECORD);
  122. handleActionLog(record);
  123. }else if(ACTION_LOG_PORTSCAN.equals(action)){
  124. final AttackRecord attackRecord = intent.getParcelableExtra(EXTRA_RECORD);
  125. final NetworkRecord networkRecord = intent.getParcelableExtra(EXTRA_RECORD2);
  126. MessageRecord messageRecord = new MessageRecord(true);
  127. messageRecord.setAttack_id(attackRecord.getAttack_id());
  128. //messageRecord.setId(0);
  129. messageRecord.setPacket("");
  130. messageRecord.setTimestamp(intent.getLongExtra(EXTRA_TIMESTAMP, 0));
  131. messageRecord.setType(TYPE.RECEIVE);
  132. handleActionLog(attackRecord);
  133. handleActionLog(networkRecord);
  134. handleActionLog(messageRecord);
  135. } else if(ACTION_LOG_MULTISTAGE.equals(action)) {
  136. final AttackRecord attackRecord = intent.getParcelableExtra(EXTRA_RECORD);
  137. final NetworkRecord networkRecord = intent.getParcelableExtra(EXTRA_RECORD2);
  138. final MessageRecord msgRecord = intent.getParcelableExtra(EXTRA_RECORD3);
  139. handleActionLog(attackRecord);
  140. handleActionLog(networkRecord);
  141. handleActionLog(msgRecord);
  142. }
  143. }
  144. }
  145. }