CovertChannel.cpp 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "../../include/CovertChannel/CovertChannel.h"
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <thread>
  5. CovertChannel::CovertChannel(const std::string &innerInterface, const std::string &outerInterface, const std::string &innerForwardFilter,
  6. const std::string &outerForwardFilter, const std::string &innerChannelFilter, const std::string &outerChannelFilter)
  7. : innerSender(innerInterface), outerSender(outerInterface) {
  8. Tins::SnifferConfiguration config;
  9. config.set_promisc_mode(true);
  10. config.set_immediate_mode(true);
  11. config.set_direction(PCAP_D_IN);
  12. config.set_snap_len(1500);
  13. try {
  14. innerForwardSniffer = new Tins::Sniffer(innerInterface, config);
  15. outerForwardSniffer = new Tins::Sniffer(outerInterface, config);
  16. innerChannelSniffer = new Tins::Sniffer(innerInterface, config);
  17. outerChannelSniffer = new Tins::Sniffer(outerInterface, config);
  18. setFilter(innerForwardFilter, outerForwardFilter, innerChannelFilter, outerChannelFilter);
  19. } catch (const Tins::pcap_error &e) {
  20. std::cerr << "An error accured setting up the sniffer: " << e.what() << std::endl;
  21. std::exit(EXIT_FAILURE);
  22. }
  23. }
  24. CovertChannel::~CovertChannel() {
  25. innerForwardSniffer->stop_sniff();
  26. outerForwardSniffer->stop_sniff();
  27. innerChannelSniffer->stop_sniff();
  28. outerChannelSniffer->stop_sniff();
  29. delete (innerForwardSniffer);
  30. delete (outerForwardSniffer);
  31. delete (innerChannelSniffer);
  32. delete (outerChannelSniffer);
  33. }
  34. void CovertChannel::setFilter(const std::string &innerForwardFilter, const std::string &outerForwardFilter, const std::string &innerChannelFilter,
  35. const std::string &outerChannelFilter) {
  36. innerForwardSniffer->set_filter(innerForwardFilter);
  37. outerForwardSniffer->set_filter(outerForwardFilter);
  38. innerChannelSniffer->set_filter(innerChannelFilter);
  39. outerChannelSniffer->set_filter(outerChannelFilter);
  40. }
  41. void CovertChannel::startSniffing() {
  42. std::thread innerForwardSnifferThread(&CovertChannel::startInnerForwardSniffing, this);
  43. std::thread outerForwardSnifferThread(&CovertChannel::startOuterForwardSniffing, this);
  44. std::thread innerChannelSnifferThread(&CovertChannel::startInnerChannelSniffing, this);
  45. std::thread outerChannelSnifferThread(&CovertChannel::startOuterChannelSniffing, this);
  46. innerForwardSnifferThread.detach();
  47. outerForwardSnifferThread.detach();
  48. innerChannelSnifferThread.detach();
  49. outerChannelSnifferThread.detach();
  50. }
  51. void CovertChannel::startInnerForwardSniffing() { innerForwardSniffer->sniff_loop(make_sniffer_handler(this, &CovertChannel::handleForwardFromInner)); }
  52. void CovertChannel::startOuterForwardSniffing() { outerForwardSniffer->sniff_loop(make_sniffer_handler(this, &CovertChannel::handleForwardFromOuter)); }
  53. void CovertChannel::startInnerChannelSniffing() { innerChannelSniffer->sniff_loop(make_sniffer_handler(this, &CovertChannel::handleChannelFromInner)); }
  54. void CovertChannel::startOuterChannelSniffing() { outerChannelSniffer->sniff_loop(make_sniffer_handler(this, &CovertChannel::handleChannelFromOuter)); }
  55. bool CovertChannel::handleForwardFromOuter(Tins::PDU &pdu) {
  56. innerSender.send(pdu);
  57. return true;
  58. }
  59. bool CovertChannel::handleForwardFromInner(Tins::PDU &pdu) {
  60. outerSender.send(pdu);
  61. return true;
  62. }
  63. bool CovertChannel::sendFile(const std::string &fileName) { return false; }