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:
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user