ViewLogTable.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package de.tudarmstadt.informatik.hostage.ui;
  2. import java.net.InetAddress;
  3. import java.net.UnknownHostException;
  4. import java.text.DateFormat;
  5. import java.text.SimpleDateFormat;
  6. import java.util.ArrayList;
  7. import java.util.Calendar;
  8. import java.util.Collections;
  9. import java.util.Comparator;
  10. import java.util.Date;
  11. import java.util.HashMap;
  12. import android.annotation.SuppressLint;
  13. import android.app.Activity;
  14. import android.content.Context;
  15. import android.content.Intent;
  16. import android.content.SharedPreferences;
  17. import android.os.Bundle;
  18. import android.view.Menu;
  19. import android.view.MenuItem;
  20. import android.view.View;
  21. import android.widget.AdapterView;
  22. import android.widget.ListAdapter;
  23. import android.widget.ListView;
  24. import android.widget.SimpleAdapter;
  25. import android.widget.Toast;
  26. import de.tudarmstadt.informatik.hostage.R;
  27. import de.tudarmstadt.informatik.hostage.logging.DatabaseHandler;
  28. import de.tudarmstadt.informatik.hostage.logging.Record;
  29. import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
  30. /**
  31. * Creates a simple log view. Shows the Information for every attack. The format
  32. * ist defined in {@link Record#toString(int)}.
  33. *
  34. * @author Lars Pandikow
  35. *
  36. */
  37. @SuppressLint("NewApi")
  38. public class ViewLogTable extends Activity{
  39. DatabaseHandler dbh;
  40. private ArrayList<String> selectedProtocols;
  41. private LogFilter filter;
  42. private boolean showFilterButton;
  43. @Override
  44. protected void onCreate(Bundle savedInstanceState) {
  45. super.onCreate(savedInstanceState);
  46. // Get the message from the intent
  47. Intent intent = getIntent();
  48. LogFilter filter = intent.getParcelableExtra(LogFilter.LOG_FILTER_INTENT_KEY);
  49. if(filter == null){
  50. this.filter = new LogFilter();
  51. } else {
  52. this.filter = filter;
  53. }
  54. this.showFilterButton = !filter.isNotEditable();
  55. this.selectedProtocols = new ArrayList<String>();
  56. // for (String protocol : this.getResources().getStringArray(
  57. // R.array.protocols)) {
  58. // this.selectedProtocols.add(protocol);
  59. // }
  60. dbh = new DatabaseHandler(getBaseContext());
  61. setContentView(R.layout.activity_loglist);
  62. this.addRecordToDB();
  63. populateListViewFromDB();
  64. registerListClickCallback();
  65. }
  66. public class RecordComparator implements Comparator<Record> {
  67. public int compare(Record o1, Record o2) {
  68. long time1 = o1.getTimestamp();
  69. long time2 = o2.getTimestamp();
  70. if (time1 < time2)
  71. return -1;
  72. if (time1 > time2)
  73. return 1;
  74. return 0;
  75. }
  76. }
  77. private void addRecordToDB() {
  78. Calendar cal = Calendar.getInstance();
  79. int maxProtocolsIndex = this.getResources().getStringArray(
  80. R.array.protocols).length;
  81. int numberofRecords = (int) (Math.random() * (50 - 10));
  82. for (int i = 0; i < numberofRecords; i++) {
  83. Record record = new Record();
  84. record.setBSSID("BSSID: " + i);
  85. record.setSSID("SSID: w" + i);
  86. record.setTimestamp(cal.getTimeInMillis()
  87. + ((i * 60 * 60 * 60 * 24) * 1000));
  88. int index = i % maxProtocolsIndex;
  89. String protocolName = this.getResources().getStringArray(
  90. R.array.protocols)[index];
  91. record.setProtocol(protocolName);
  92. record.setId(i);
  93. record.setAttack_id(i);
  94. try {
  95. InetAddress localIP = InetAddress.getByAddress("Digga",
  96. new byte[] { 127, 0, 0, 1 }); // .getByName("192.168.2.1");
  97. record.setLocalIP(localIP);
  98. record.setRemoteIP(InetAddress.getByAddress("Digga",
  99. new byte[] { 127, 1, 1, 1 }));
  100. record.setType(TYPE.SEND);
  101. } catch (UnknownHostException e) {
  102. e.printStackTrace();
  103. }
  104. dbh.addRecord(record);
  105. }
  106. }
  107. private void populateListViewFromDB() {
  108. ListView mylist = (ListView) findViewById(R.id.loglistview);
  109. ArrayList<HashMap<String, String>> Items = new ArrayList<HashMap<String, String>>();
  110. ArrayList<Record> data = dbh.getRecordsForFilter(this.filter);
  111. Collections.sort(data, new RecordComparator());
  112. for (Record val : data) {
  113. HashMap<String, String> map = new HashMap<String, String>();
  114. map.put(this.getString(R.string.RecordBSSID), val.getBSSID() );
  115. map.put(this.getString(R.string.RecordSSID), val.getSSID());
  116. map.put(this.getString(R.string.RecordProtocol), val.getProtocol());
  117. map.put(this.getString(R.string.RecordTimestamp), this.getDateAsString(val.getTimestamp()));
  118. Items.add(map);
  119. }
  120. // Adding Items to ListView
  121. String keys[] = new String[] { this.getString(R.string.RecordBSSID), this.getString(R.string.RecordSSID), this.getString(R.string.RecordProtocol), this.getString(R.string.RecordTimestamp)};
  122. int ids[] = new int[] {R.id.RecordTextFieldBSSID, R.id.RecordTextFieldSSID, R.id.RecordTextFieldProtocol, R.id.RecordTextFieldTimestamp };
  123. ListAdapter adapter = new SimpleAdapter(this, Items, R.layout.loglist_row, keys, ids);
  124. mylist.setAdapter(adapter);
  125. }
  126. @SuppressLint("SimpleDateFormat")
  127. private String getDateAsString(long timeStamp) {
  128. try {
  129. DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  130. Date netDate = (new Date(timeStamp));
  131. return sdf.format(netDate);
  132. } catch (Exception ex) {
  133. return "xx";
  134. }
  135. }
  136. private void registerListClickCallback() {
  137. ListView mylist = (ListView) findViewById(R.id.loglistview);
  138. mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  139. public void onItemClick(AdapterView<?> parent, View viewClicked,
  140. int position, long idInDB) {
  141. DatabaseHandler dbh = new DatabaseHandler(getBaseContext());
  142. Record rec = dbh.getRecord((int) idInDB);
  143. String message = createInformationStringFromRecord(rec);
  144. Toast.makeText(getApplicationContext(), message,
  145. Toast.LENGTH_LONG).show();
  146. }
  147. private String createInformationStringFromRecord(Record rec) {
  148. String message = "id: " + rec.getId() + "\n" + "attack_id: "
  149. + rec.getAttack_id() + "\n" + "protocol: "
  150. + rec.getProtocol() + "\n" + "type: " + rec.getType()
  151. + "\n" + "externalIP: " + rec.getExternalIP() + "\n"
  152. + "localIP: " + rec.getLocalIP() + "\n"
  153. + "local port: " + rec.getLocalPort() + "\n"
  154. + "remoteIP: " + rec.getRemoteIP() + "\n" + "BSSID: "
  155. + rec.getBSSID() + "\n" + "SSID: " + rec.getSSID()
  156. + "\n" + "latitude: " + rec.getLatitude() + "\n"
  157. + "longitude: " + rec.getLongitude() + "\n"
  158. + "accuracy: " + rec.getAccuracy() + "\n" + "packet: "
  159. + rec.getPacket() + "\n"
  160. + getDateAsString(rec.getTimestamp()) + "";
  161. return message;
  162. }
  163. @SuppressLint("SimpleDateFormat")
  164. private String getDateAsString(long timeStamp) {
  165. try {
  166. DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  167. Date netDate = (new Date(timeStamp));
  168. return sdf.format(netDate);
  169. } catch (Exception ex) {
  170. return "xx";
  171. }
  172. }
  173. });
  174. }
  175. @Override
  176. public boolean onCreateOptionsMenu(Menu menu) {
  177. super.onCreateOptionsMenu(menu);
  178. if(this.showFilterButton){
  179. MenuItem item = menu.add("Filter");
  180. // MenuInflater inflater = getMenuInflater();
  181. // inflater.inflate(R.menu.listview_detail_menu, menu);
  182. return true;
  183. } else {
  184. return false;
  185. }
  186. }
  187. @Override
  188. public boolean onOptionsItemSelected(MenuItem item) {
  189. this.openFilterMenu(item.getActionView());
  190. this.populateListViewFromDB();
  191. return super.onOptionsItemSelected(item);
  192. }
  193. private void openFilterMenu(View anchorView){
  194. }
  195. private void saveInSharedPreferences(String key, boolean value) {
  196. // --SAVE Data
  197. SharedPreferences preferences = this.getSharedPreferences();
  198. SharedPreferences.Editor editor = preferences.edit();
  199. editor.putBoolean(key, value);
  200. editor.commit();
  201. }
  202. private boolean getBooleanInSharedPreferences(String key) {
  203. SharedPreferences preferences = this.getSharedPreferences();
  204. return preferences.getBoolean(key, true);
  205. }
  206. private SharedPreferences getSharedPreferences() {
  207. return this.getSharedPreferences("HostagePreferences",
  208. Context.MODE_PRIVATE);
  209. }
  210. }