CovertChannel.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "../include/CovertChannel.h"
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <thread>
  5. CovertChannel::CovertChannel(const std::string &innerInterface, const std::string &outerInterface) : innerSender(innerInterface), outerSender(outerInterface) {
  6. Tins::SnifferConfiguration config;
  7. config.set_promisc_mode(true);
  8. config.set_immediate_mode(true);
  9. config.set_direction(PCAP_D_IN);
  10. config.set_snap_len(1500);
  11. try {
  12. innerSniffer = new Tins::Sniffer(innerInterface, config);
  13. outerSniffer = new Tins::Sniffer(outerInterface, config);
  14. } catch (const Tins::pcap_error &e) {
  15. std::cerr << "An error accured setting up the sniffer: " << e.what() << std::endl;
  16. std::exit(EXIT_FAILURE);
  17. }
  18. }
  19. CovertChannel::~CovertChannel() {
  20. innerSniffer->stop_sniff();
  21. outerSniffer->stop_sniff();
  22. delete (innerSniffer);
  23. delete (outerSniffer);
  24. }
  25. void CovertChannel::startSniffing() {
  26. std::thread innerSnifferThread(&CovertChannel::startInnerSniffing, this);
  27. std::thread outerSnifferThread(&CovertChannel::startOuterSniffing, this);
  28. innerSnifferThread.detach();
  29. outerSnifferThread.detach();
  30. }
  31. void CovertChannel::startInnerSniffing() { innerSniffer->sniff_loop(make_sniffer_handler(this, &CovertChannel::handleForwardToOuter)); }
  32. void CovertChannel::startOuterSniffing() { outerSniffer->sniff_loop(make_sniffer_handler(this, &CovertChannel::handleForwardToInner)); }
  33. void CovertChannel::setFilter(const std::string &filterString) { innerSniffer->set_filter(filterString); }
  34. bool CovertChannel::handleForwardToInner(Tins::PDU &pdu) {
  35. innerSender.send(pdu);
  36. return true;
  37. }
  38. bool CovertChannel::handleForwardToOuter(Tins::PDU &pdu) {
  39. outerSender.send(pdu);
  40. return true;
  41. }