Browse Source

Sniffer: catch pcap_error exception + const string

pcap_error exception in Sniffer will be catched and the programs
terminates after printing the message properly.
The contructor now accepts only const std::string&
anon 4 years ago
parent
commit
6cd022c2b3
3 changed files with 16 additions and 8 deletions
  1. 2 2
      daemon/include/Sniffer.h
  2. 11 4
      daemon/src/Sniffer.cpp
  3. 3 2
      daemon/src/main.cpp

+ 2 - 2
daemon/include/Sniffer.h

@@ -21,7 +21,7 @@ public:
    *
    * @param interface name of the interface for sniffing
    */
-  Sniffer(std::string interfaceName);
+  Sniffer(const std::string &interfaceName);
 
   /**
    * Destroys the Sniffer.
@@ -64,7 +64,7 @@ private:
   /**
    * Tins sniffer object.
    */
-  Tins::Sniffer sniffer;
+  Tins::Sniffer *sniffer;
 };
 
 #endif

+ 11 - 4
daemon/src/Sniffer.cpp

@@ -1,21 +1,28 @@
 #include "../include/Sniffer.h"
+#include <cstdlib>
 #include <iostream>
 
-Sniffer::Sniffer(std::string interfaceName) : sniffer(interfaceName) {
+Sniffer::Sniffer(const std::string &interfaceName) {
   Tins::SnifferConfiguration config;
   config.set_promisc_mode(true);
 
-  sniffer = Tins::Sniffer(interfaceName, config);
+  try {
+    sniffer = new Tins::Sniffer(interfaceName, config);
+  } catch (const Tins::pcap_error &e) {
+    std::cerr << "An error accured setting up the sniffer: " << e.what()
+              << std::endl;
+    std::exit(EXIT_FAILURE);
+  }
 }
 
 Sniffer::~Sniffer() {}
 
 void Sniffer::startSniffing() {
-  sniffer.sniff_loop(make_sniffer_handler(this, &Sniffer::handle));
+  sniffer->sniff_loop(make_sniffer_handler(this, &Sniffer::handle));
 }
 
 void Sniffer::setFilter(std::string filterString) {
-  sniffer.set_filter(filterString);
+  sniffer->set_filter(filterString);
 }
 
 bool Sniffer::handle(Tins::PDU &pdu) {

+ 3 - 2
daemon/src/main.cpp

@@ -99,7 +99,8 @@ int main(int argc, char *argv[]) {
     return 0;
   }
 
-  Sniffer sniffer(argv[1]);
+  const std::string interface = argv[1];
+  Sniffer sniffer(interface);
   sniffer.startSniffing();
 
   try {
@@ -110,4 +111,4 @@ int main(int argc, char *argv[]) {
     std::cerr << e.what() << endl;
   }
   return 0;
-}
+}