1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-23 02:35:57 +01:00

Added pcap_setdirection to sniffer

This commit is contained in:
Jesus Llorente
2015-11-23 23:10:34 +02:00
parent 534bdaf30b
commit b07deba105
2 changed files with 32 additions and 1 deletions

View File

@@ -47,6 +47,8 @@ namespace Tins {
class SnifferIterator;
class SnifferConfiguration;
typedef pcap_direction_t tins_direction_t;
/**
* \class BaseSniffer
* \brief Base class for sniffers.
@@ -212,6 +214,14 @@ namespace Tins {
*/
void set_timeout(int ms);
/**
* \brief Sets direction for the sniffer.
*
* This calls pcap_setdirection using the provided parameter.
* \param d The direction for the sniffer.
*/
int set_direction(tins_direction_t d);
/**
* \brief Sets whether to extract RawPDUs or fully parsed packets.
*
@@ -566,6 +576,12 @@ namespace Tins {
*/
void set_timeout(unsigned timeout);
/**
* Sets the direction option.
* \param direction The direction to be set.
*/
void set_direction(tins_direction_t direction);
/**
* Sets the immediate mode option.
* \param enabled The immediate mode option value.
@@ -596,6 +612,7 @@ namespace Tins {
bool _promisc;
bool _rfmon;
bool _immediate_mode;
tins_direction_t _direction;
};
template<class Functor>

View File

@@ -224,6 +224,10 @@ void BaseSniffer::set_timeout(int ms) {
pcap_set_timeout(handle, ms);
}
int BaseSniffer::set_direction(tins_direction_t d) {
return pcap_setdirection(handle, d);
}
// ****************************** Sniffer ******************************
Sniffer::Sniffer(const string &device, const SnifferConfiguration& configuration)
@@ -408,7 +412,8 @@ SnifferConfiguration::SnifferConfiguration() :
_timeout(DEFAULT_TIMEOUT),
_promisc(false),
_rfmon(false),
_immediate_mode(false)
_immediate_mode(false),
_direction(PCAP_D_INOUT)
{
}
@@ -417,6 +422,7 @@ void SnifferConfiguration::configure_sniffer_pre_activation(Sniffer& sniffer) co
{
sniffer.set_snap_len(_snap_len);
sniffer.set_timeout(_timeout);
if ((_flags & BUFFER_SIZE) != 0) {
sniffer.set_buffer_size(_buffer_size);
}
@@ -447,6 +453,9 @@ void SnifferConfiguration::configure_sniffer_post_activation(Sniffer& sniffer) c
throw std::runtime_error("Could not set the filter! ");
}
}
if (sniffer.set_direction(_direction) < 0) {
throw std::runtime_error("Could not set the direction! ");
}
}
void SnifferConfiguration::set_snap_len(unsigned snap_len)
@@ -483,6 +492,11 @@ void SnifferConfiguration::set_timeout(unsigned timeout)
_timeout = timeout;
}
void SnifferConfiguration::set_direction(tins_direction_t direction)
{
_direction = direction;
}
void SnifferConfiguration::set_immediate_mode(bool enabled)
{
_flags |= IMMEDIATE_MODE;