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

Added OfflinePacketFilter class.

This commit is contained in:
Matias Fontanini
2014-08-30 23:01:46 -03:00
parent 07be8e244c
commit a7a4105cf8
6 changed files with 303 additions and 0 deletions

View File

@@ -54,6 +54,7 @@ ADD_CUSTOM_TARGET(
LLCTest
MatchesResponseTest
NetworkInterfaceTest
OfflinePacketFilterTest
PDUTest
PPITest
PPPoETest
@@ -93,6 +94,7 @@ ADD_EXECUTABLE(IPv6AddressTest EXCLUDE_FROM_ALL ipv6address.cpp)
ADD_EXECUTABLE(LLCTest EXCLUDE_FROM_ALL llc.cpp)
ADD_EXECUTABLE(MatchesResponseTest EXCLUDE_FROM_ALL matches_response.cpp)
ADD_EXECUTABLE(NetworkInterfaceTest EXCLUDE_FROM_ALL network_interface.cpp)
ADD_EXECUTABLE(OfflinePacketFilterTest EXCLUDE_FROM_ALL offline_packet_filter.cpp)
ADD_EXECUTABLE(PDUTest EXCLUDE_FROM_ALL pdu.cpp)
ADD_EXECUTABLE(PPITest EXCLUDE_FROM_ALL ppi.cpp)
ADD_EXECUTABLE(PPPoETest EXCLUDE_FROM_ALL pppoe.cpp)
@@ -170,6 +172,7 @@ ADD_TEST(IPv6Address IPv6AddressTest)
ADD_TEST(LLC LLCTest)
ADD_TEST(MatchesResponse MatchesResponseTest)
ADD_TEST(NetworkInterface NetworkInterfaceTest)
ADD_TEST(OfflinePacketFilter OfflinePacketFilterTest)
ADD_TEST(PDU PDUTest)
ADD_TEST(PPI PPITest)
ADD_TEST(PPPoE PPPoETest)

View File

@@ -0,0 +1,77 @@
#include <gtest/gtest.h>
#include <cstring>
#include <string>
#include <stdint.h>
#include "offline_packet_filter.h"
#include "ip.h"
#include "tcp.h"
#include "ethernetII.h"
#include "dot3.h"
#include "sll.h"
#include "llc.h"
#include "udp.h"
#include "rawpdu.h"
using namespace Tins;
class OfflinePacketFilterTest : public testing::Test {
public:
};
TEST_F(OfflinePacketFilterTest, CopyConstructor) {
OfflinePacketFilter filter1("udp and port 111", DataLinkType<EthernetII>());
OfflinePacketFilter filter2(filter1);
OfflinePacketFilter filter3("tcp", DataLinkType<RadioTap>());
filter3 = filter1;
{
EthernetII pkt = EthernetII() / IP() / UDP(111, 11) / RawPDU("test");
EXPECT_TRUE(filter1.matches_filter(pkt));
EXPECT_TRUE(filter2.matches_filter(pkt));
EXPECT_TRUE(filter3.matches_filter(pkt));
}
{
EthernetII pkt = EthernetII() / IP() / TCP(111, 11) / RawPDU("test");
EXPECT_FALSE(filter1.matches_filter(pkt));
EXPECT_FALSE(filter2.matches_filter(pkt));
EXPECT_FALSE(filter3.matches_filter(pkt));
}
}
TEST_F(OfflinePacketFilterTest, MatchesFilterEthTcp) {
OfflinePacketFilter filter("ip and port 55", DataLinkType<EthernetII>());
{
EthernetII pkt = EthernetII() / IP() / TCP(55, 11) / RawPDU("test");
EXPECT_TRUE(filter.matches_filter(pkt));
}
{
EthernetII pkt = EthernetII() / IP() / TCP(45, 11) / RawPDU("test");
EXPECT_FALSE(filter.matches_filter(pkt));
}
}
TEST_F(OfflinePacketFilterTest, MatchesFilterEth) {
OfflinePacketFilter filter("ether dst 00:01:02:03:04:05", DataLinkType<EthernetII>());
{
EthernetII pkt = EthernetII("00:01:02:03:04:05") / IP() / TCP(55, 11) / RawPDU("test");
EXPECT_TRUE(filter.matches_filter(pkt));
}
{
EthernetII pkt = EthernetII() / IP() / TCP(45, 11) / RawPDU("test");
EXPECT_FALSE(filter.matches_filter(pkt));
}
}
TEST_F(OfflinePacketFilterTest, MatchesFilterSLLTcp) {
OfflinePacketFilter filter("ip and port 55", DataLinkType<SLL>());
{
SLL pkt = SLL() / IP() / TCP(55, 11) / RawPDU("test");
EXPECT_TRUE(filter.matches_filter(pkt));
}
{
SLL pkt = SLL() / IP() / TCP(45, 11) / RawPDU("test");
EXPECT_FALSE(filter.matches_filter(pkt));
}
}