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

Merge pull request #114 from jllorente/master

Added pcap_setdirection to sniffer
This commit is contained in:
Matias Fontanini
2016-01-12 10:31:40 -03:00
2 changed files with 31 additions and 1 deletions

View File

@@ -212,6 +212,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.
*/
bool set_direction(pcap_direction_t d);
/**
* \brief Sets whether to extract RawPDUs or fully parsed packets.
*
@@ -566,6 +574,12 @@ namespace Tins {
*/
void set_timeout(unsigned timeout);
/**
* Sets the direction option.
* \param direction The direction to be set.
*/
void set_direction(pcap_direction_t direction);
/**
* Sets the immediate mode option.
* \param enabled The immediate mode option value.
@@ -596,6 +610,7 @@ namespace Tins {
bool _promisc;
bool _rfmon;
bool _immediate_mode;
pcap_direction_t _direction;
};
template<class Functor>

View File

@@ -224,6 +224,11 @@ void BaseSniffer::set_timeout(int ms) {
pcap_set_timeout(handle, ms);
}
bool BaseSniffer::set_direction(pcap_direction_t d) {
bool result = pcap_setdirection(handle, d) != -1;
return result;
}
// ****************************** Sniffer ******************************
Sniffer::Sniffer(const string &device, const SnifferConfiguration& configuration)
@@ -408,7 +413,8 @@ SnifferConfiguration::SnifferConfiguration() :
_timeout(DEFAULT_TIMEOUT),
_promisc(false),
_rfmon(false),
_immediate_mode(false)
_immediate_mode(false),
_direction(PCAP_D_INOUT)
{
}
@@ -417,6 +423,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 +454,9 @@ void SnifferConfiguration::configure_sniffer_post_activation(Sniffer& sniffer) c
throw std::runtime_error("Could not set the filter! ");
}
}
if (!sniffer.set_direction(_direction)) {
throw std::runtime_error("Could not set the direction! ");
}
}
void SnifferConfiguration::set_snap_len(unsigned snap_len)
@@ -483,6 +493,11 @@ void SnifferConfiguration::set_timeout(unsigned timeout)
_timeout = timeout;
}
void SnifferConfiguration::set_direction(pcap_direction_t direction)
{
_direction = direction;
}
void SnifferConfiguration::set_immediate_mode(bool enabled)
{
_flags |= IMMEDIATE_MODE;