CovertChannel.cpp 3.2 KB

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