RecordOverviewFragment.java 15 KB

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