RecordOverviewFragment.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. package de.tudarmstadt.informatik.hostage.ui2.fragment;
  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.Date;
  9. import java.util.HashMap;
  10. import android.annotation.SuppressLint;
  11. import android.app.Fragment;
  12. import android.content.Context;
  13. import android.content.Intent;
  14. import android.os.Bundle;
  15. import android.view.LayoutInflater;
  16. import android.view.Menu;
  17. import android.view.MenuInflater;
  18. import android.view.MenuItem;
  19. import android.view.View;
  20. import android.view.ViewGroup;
  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. import de.tudarmstadt.informatik.hostage.ui.LogFilter;
  31. import de.tudarmstadt.informatik.hostage.ui.LogFilter.SortType;
  32. import de.tudarmstadt.informatik.hostage.ui2.dialog.ChecklistDialog;
  33. import de.tudarmstadt.informatik.hostage.ui2.dialog.DateTimeDialogFragment;
  34. public class RecordOverviewFragment extends Fragment implements ChecklistDialog.ChecklistDialogListener, DateTimeDialogFragment.DateTimeDialogFragmentListener {
  35. static final String SELECTED_KEY = "Selected";
  36. static final String OTHERS_KEY = "Other";
  37. static final String FILTER_MENU_TITLE_BSSID = "BSSID";
  38. static final String FILTER_MENU_TITLE_ESSID = "ESSID";
  39. static final String FILTER_MENU_TITLE_PROTOCOLS = "Protocols";
  40. static final String FILTER_MENU_TITLE_TIMESTAMP_BELOW = "To Date";
  41. static final String FILTER_MENU_TITLE_TIMESTAMP_ABOVE = "From Date";
  42. static final String FILTER_MENU_TITLE_SORTING = "Sort by";
  43. static final String FILTER_MENU_TITLE_REMOVE = "Remove";
  44. private boolean wasBelowTimePicker;
  45. private LogFilter filter;
  46. private ListView listView;
  47. private boolean showFilterButton;
  48. DatabaseHandler dbh;
  49. public RecordOverviewFragment(){}
  50. @Override
  51. public void onCreate(Bundle savedInstanceState) {
  52. super.onCreate(savedInstanceState);
  53. setHasOptionsMenu(true);
  54. }
  55. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  56. Bundle savedInstanceState) {
  57. dbh = new DatabaseHandler(this.getActivity().getBaseContext());
  58. // Get the message from the intent
  59. Intent intent = this.getActivity().getIntent();
  60. LogFilter filter = intent.getParcelableExtra(LogFilter.LOG_FILTER_INTENT_KEY);
  61. if(filter == null){
  62. this.clearFilter();
  63. } else {
  64. this.filter = filter;
  65. }
  66. this.setShowFilterButton(!this.filter.isNotEditable());
  67. this.addRecordToDB();
  68. View rootView = inflater.inflate(R.layout.fragment_record_list, container, false);
  69. ListView mylist = (ListView) rootView.findViewById(R.id.loglistview);
  70. this.listView = mylist;
  71. populateListViewFromDB(mylist);
  72. registerListClickCallback(mylist);
  73. return rootView;
  74. }
  75. private void clearFilter(){
  76. this.filter = new LogFilter();
  77. this.filter.setProtocols(this.protocolTitles());
  78. this.filter.setBSSIDs(this.bssids());
  79. this.filter.setESSIDs(this.essids());
  80. }
  81. private void populateListViewFromDB(ListView mylist) {
  82. ArrayList<HashMap<String, String>> Items = new ArrayList<HashMap<String, String>>();
  83. ArrayList<Record> data = dbh.getRecordsForFilter(this.filter);
  84. for (Record val : data) {
  85. HashMap<String, String> map = new HashMap<String, String>();
  86. map.put(this.getString(R.string.RecordBSSID), val.getBSSID());
  87. map.put(this.getString(R.string.RecordSSID), val.getSSID());
  88. map.put(this.getString(R.string.RecordProtocol), val.getProtocol());
  89. map.put(this.getString(R.string.RecordTimestamp),
  90. this.getDateAsString(val.getTimestamp()));
  91. Items.add(map);
  92. }
  93. // Adding Items to ListView
  94. String keys[] = new String[] { this.getString(R.string.RecordBSSID), this.getString(R.string.RecordSSID), this.getString(R.string.RecordProtocol), this.getString(R.string.RecordTimestamp)};
  95. int ids[] = new int[] {R.id.RecordTextFieldBSSID, R.id.RecordTextFieldSSID, R.id.RecordTextFieldProtocol, R.id.RecordTextFieldTimestamp };
  96. ListAdapter adapter = new SimpleAdapter(this.getActivity(), Items, R.layout.loglist_row, keys, ids);
  97. mylist.setAdapter(adapter);
  98. }
  99. private Context getBaseContext(){
  100. return this.getActivity().getBaseContext();
  101. }
  102. private Context getApplicationContext(){
  103. return this.getActivity().getApplicationContext();
  104. }
  105. private void registerListClickCallback(ListView mylist) {
  106. mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  107. public void onItemClick(AdapterView<?> parent, View viewClicked,
  108. int position, long idInDB) {
  109. DatabaseHandler dbh = new DatabaseHandler(getBaseContext());
  110. Record rec = dbh.getRecord((int) idInDB);
  111. String message = createInformationStringFromRecord(rec);
  112. Toast.makeText(getApplicationContext(), message,
  113. Toast.LENGTH_LONG).show();
  114. }
  115. private String createInformationStringFromRecord(Record rec) {
  116. String message = "id: " + rec.getId() + "\n" + "attack_id: "
  117. + rec.getAttack_id() + "\n" + "protocol: "
  118. + rec.getProtocol() + "\n" + "type: " + rec.getType()
  119. + "\n" + "externalIP: " + rec.getExternalIP() + "\n"
  120. + "localIP: " + rec.getLocalIP() + "\n"
  121. + "local port: " + rec.getLocalPort() + "\n"
  122. + "remoteIP: " + rec.getRemoteIP() + "\n" + "BSSID: "
  123. + rec.getBSSID() + "\n" + "SSID: " + rec.getSSID()
  124. + "\n" + "latitude: " + rec.getLatitude() + "\n"
  125. + "longitude: " + rec.getLongitude() + "\n"
  126. + "accuracy: " + rec.getAccuracy() + "\n" + "packet: "
  127. + rec.getPacket() + "\n"
  128. + getDateAsString(rec.getTimestamp()) + "";
  129. return message;
  130. }
  131. @SuppressLint("SimpleDateFormat")
  132. private String getDateAsString(long timeStamp) {
  133. try {
  134. DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  135. Date netDate = (new Date(timeStamp));
  136. return sdf.format(netDate);
  137. } catch (Exception ex) {
  138. return "xx";
  139. }
  140. }
  141. });
  142. }
  143. public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
  144. super.onCreateOptionsMenu(menu, inflater);
  145. if(this.showFilterButton){
  146. for(String title : this.filterTitles()){
  147. MenuItem item = menu.add(title);
  148. }
  149. }
  150. }
  151. @Override
  152. public boolean onOptionsItemSelected(MenuItem item) {
  153. String title = item.getTitle().toString();
  154. if(title.equals(FILTER_MENU_TITLE_BSSID)){
  155. this.openBSSIDFilterDialog();
  156. }
  157. if(title.equals(FILTER_MENU_TITLE_ESSID)){
  158. this.openESSIDFilterDialog();
  159. }
  160. if(title.equals(FILTER_MENU_TITLE_PROTOCOLS)){
  161. this.openProtocolsFilterDialog();
  162. }
  163. if(title.equals(FILTER_MENU_TITLE_SORTING)){
  164. this.openSortingDialog();
  165. }
  166. if(title.equals(FILTER_MENU_TITLE_REMOVE)){
  167. this.clearFilter();
  168. }
  169. if(title.equals(FILTER_MENU_TITLE_TIMESTAMP_BELOW)){
  170. this.openTimestampToFilterDialog();
  171. }
  172. if(title.equals(FILTER_MENU_TITLE_TIMESTAMP_ABOVE)){
  173. this.openTimestampFromFilterDialog();
  174. }
  175. return super.onOptionsItemSelected(item);
  176. }
  177. private void openBSSIDFilterDialog(){
  178. Intent intent = this.getActivity().getIntent();
  179. intent.putExtra(ChecklistDialog.DIALOG_TITLE_KEY, FILTER_MENU_TITLE_BSSID);
  180. intent.putExtra(ChecklistDialog.DIALOG_IS_MULTIPLECHOICE_KEY, true);
  181. intent.putStringArrayListExtra(ChecklistDialog.DIALOG_TITLE_ARRAY_KEY, this.bssids());
  182. intent.putStringArrayListExtra(ChecklistDialog.DIALOG_MULTIPLECHOICE_SELECTED_KEY, this.selectedBSSIDs());
  183. ChecklistDialog newFragment = new ChecklistDialog();
  184. newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_BSSID);
  185. }
  186. private void openESSIDFilterDialog(){
  187. Intent intent = this.getActivity().getIntent();
  188. intent.putExtra(ChecklistDialog.DIALOG_TITLE_KEY, FILTER_MENU_TITLE_ESSID);
  189. intent.putExtra(ChecklistDialog.DIALOG_IS_MULTIPLECHOICE_KEY, true);
  190. intent.putStringArrayListExtra(ChecklistDialog.DIALOG_TITLE_ARRAY_KEY, this.essids());
  191. intent.putStringArrayListExtra(ChecklistDialog.DIALOG_MULTIPLECHOICE_SELECTED_KEY, this.selectedESSIDs());
  192. ChecklistDialog newFragment = new ChecklistDialog();
  193. newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_ESSID);
  194. }
  195. private void openProtocolsFilterDialog(){
  196. Intent intent = this.getActivity().getIntent();
  197. intent.putExtra(ChecklistDialog.DIALOG_TITLE_KEY, FILTER_MENU_TITLE_PROTOCOLS);
  198. intent.putExtra(ChecklistDialog.DIALOG_IS_MULTIPLECHOICE_KEY, true);
  199. intent.putStringArrayListExtra(ChecklistDialog.DIALOG_TITLE_ARRAY_KEY, this.protocolTitles());
  200. intent.putStringArrayListExtra(ChecklistDialog.DIALOG_MULTIPLECHOICE_SELECTED_KEY, this.selectedProtocols());
  201. ChecklistDialog newFragment = new ChecklistDialog();
  202. newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_PROTOCOLS);
  203. }
  204. private void openTimestampFromFilterDialog(){
  205. this.wasBelowTimePicker = false;
  206. DateTimeDialogFragment newFragment = new DateTimeDialogFragment(this.getActivity());
  207. newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_SORTING);
  208. }
  209. private void openTimestampToFilterDialog(){
  210. this.wasBelowTimePicker = true;
  211. DateTimeDialogFragment newFragment = new DateTimeDialogFragment(this.getActivity());
  212. newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_SORTING);
  213. }
  214. private void openSortingDialog(){
  215. Intent intent = this.getActivity().getIntent();
  216. intent.putExtra(ChecklistDialog.DIALOG_TITLE_KEY, FILTER_MENU_TITLE_SORTING);
  217. intent.putExtra(ChecklistDialog.DIALOG_IS_MULTIPLECHOICE_KEY, false);
  218. intent.putStringArrayListExtra(ChecklistDialog.DIALOG_TITLE_ARRAY_KEY, this.sortTypeTtiles());
  219. intent.putExtra(ChecklistDialog.DIALOG_SELECTED_INDEX_KEY, this.filter.sorttype.getValue());
  220. ChecklistDialog newFragment = new ChecklistDialog();
  221. newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_SORTING);
  222. }
  223. public void onDialogPositiveClick(ChecklistDialog dialog) {
  224. // TODO Auto-generated method stub
  225. String title = dialog.getTitle();
  226. if(title.equals(FILTER_MENU_TITLE_BSSID)){
  227. this.filter.setBSSIDs(dialog.getSelectedItemTitles());
  228. }
  229. if(title.equals(FILTER_MENU_TITLE_ESSID)){
  230. this.filter.setESSIDs(dialog.getSelectedItemTitles());
  231. }
  232. if(title.equals(FILTER_MENU_TITLE_PROTOCOLS)){
  233. this.filter.setProtocols(dialog.getSelectedItemTitles());
  234. }
  235. if(title.equals(FILTER_MENU_TITLE_SORTING)){
  236. ArrayList<String> titles = dialog.getSelectedItemTitles();
  237. String t = titles.get(0);
  238. int sortType = this.sortTypeTtiles().indexOf(t);
  239. this.filter.setSorttype(SortType.values()[sortType]);
  240. }
  241. this.populateListViewFromDB(this.listView);
  242. }
  243. public void onDialogNegativeClick(ChecklistDialog dialog) {
  244. // nothing in here
  245. }
  246. @SuppressLint("SimpleDateFormat")
  247. private String getDateAsString(long timeStamp) {
  248. try {
  249. DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  250. Date netDate = (new Date(timeStamp));
  251. return sdf.format(netDate);
  252. } catch (Exception ex) {
  253. return "xx";
  254. }
  255. }
  256. public boolean isShowFilterButton() {
  257. return showFilterButton;
  258. }
  259. public void setShowFilterButton(boolean showFilterButton) {
  260. this.showFilterButton = showFilterButton;
  261. }
  262. public ArrayList<String> protocolTitles(){
  263. ArrayList<String> titles = new ArrayList<String>();
  264. for (String protocol : this.getResources().getStringArray(
  265. R.array.protocols)) {
  266. titles.add(protocol);
  267. }
  268. return titles;
  269. }
  270. public ArrayList<String> selectedProtocols(){
  271. return this.filter.protocols;
  272. }
  273. public ArrayList<String> sortTypeTtiles(){
  274. ArrayList<String> titles = new ArrayList<String>();
  275. titles.add("Time");
  276. titles.add("Protocol");
  277. titles.add("BSSID");
  278. titles.add("ESSID");
  279. titles.add("Remote Host Name");
  280. titles.add("Local Host Name");
  281. //titles.add("Attack ID");
  282. //titles.add("ID");
  283. return titles;
  284. }
  285. public ArrayList<String> bssids(){
  286. ArrayList<String> titles = new ArrayList<String>();
  287. ArrayList<String> records = dbh.getUniqueBSSIDRecords();
  288. return records;
  289. }
  290. public ArrayList<String> selectedBSSIDs(){
  291. return this.filter.BSSIDs;
  292. }
  293. public ArrayList<String> essids(){
  294. ArrayList<String> titles = new ArrayList<String>();
  295. ArrayList<String> records = dbh.getUniqueESSIDRecords();
  296. return records;
  297. }
  298. public ArrayList<String> selectedESSIDs(){
  299. return this.filter.ESSIDs;
  300. }
  301. private ArrayList<String> filterTitles(){
  302. ArrayList<String> titles = new ArrayList<String>();
  303. titles.add(FILTER_MENU_TITLE_BSSID);
  304. titles.add(FILTER_MENU_TITLE_ESSID);
  305. titles.add(FILTER_MENU_TITLE_PROTOCOLS);
  306. titles.add(FILTER_MENU_TITLE_TIMESTAMP_ABOVE);
  307. titles.add(FILTER_MENU_TITLE_TIMESTAMP_BELOW);
  308. titles.add(FILTER_MENU_TITLE_SORTING);
  309. titles.add(FILTER_MENU_TITLE_REMOVE);
  310. return titles;
  311. }
  312. /*****************************
  313. *
  314. * TEST
  315. *
  316. * ***************************/
  317. private void addRecordToDB() {
  318. Calendar cal = Calendar.getInstance();
  319. int maxProtocolsIndex = this.getResources().getStringArray(
  320. R.array.protocols).length;
  321. int numberofRecords = (int) (Math.random() * (50 - 10));
  322. for (int i = 0; i < numberofRecords; i++) {
  323. Record record = new Record();
  324. record.setBSSID("BSSID: " + i);
  325. record.setSSID("SSID: w" + i);
  326. record.setTimestamp(cal.getTimeInMillis()
  327. + ((i * 60 * 60 * 60 * 24) * 1000));
  328. int index = i % maxProtocolsIndex;
  329. String protocolName = this.getResources().getStringArray(
  330. R.array.protocols)[index];
  331. record.setProtocol(protocolName);
  332. record.setId(i);
  333. record.setAttack_id(i);
  334. try {
  335. InetAddress localIP = InetAddress.getByAddress("Digga",
  336. new byte[] { 127, 0, 0, 1 }); // .getByName("192.168.2.1");
  337. record.setLocalIP(localIP);
  338. record.setRemoteIP(InetAddress.getByAddress("Digga",
  339. new byte[] { 127, 1, 1, 1 }));
  340. record.setType(TYPE.SEND);
  341. } catch (UnknownHostException e) {
  342. e.printStackTrace();
  343. }
  344. dbh.addRecord(record);
  345. }
  346. }
  347. public void onDateTimePickerPositiveClick(DateTimeDialogFragment dialog) {
  348. if(this.wasBelowTimePicker){
  349. this.filter.setBelowTimestamp(dialog.getDate());
  350. } else {
  351. this.filter.setAboveTimestamp(dialog.getDate());
  352. }
  353. this.populateListViewFromDB(listView);
  354. }
  355. public void onDateTimePickerNegativeClick(DateTimeDialogFragment dialog) {
  356. // nothing in here
  357. }
  358. }