mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
Adding test creating a dynamic pktsrc plugin.
This commit is contained in:
parent
3e669daa05
commit
5e4f498083
7 changed files with 167 additions and 0 deletions
10
testing/btest/Baseline/plugins.pktsrc/conn.log
Normal file
10
testing/btest/Baseline/plugins.pktsrc/conn.log
Normal file
|
@ -0,0 +1,10 @@
|
|||
#separator \x09
|
||||
#set_separator ,
|
||||
#empty_field (empty)
|
||||
#unset_field -
|
||||
#path conn
|
||||
#open 2014-08-28-04-53-05
|
||||
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents
|
||||
#types time string addr port addr port enum string interval count count string bool count string count count count count set[string]
|
||||
1409193037.000000 CXWv6p3arKYeMETxOg 1.2.0.2 2527 1.2.0.3 6649 tcp - - - - S0 - 0 S 1 64 0 0 (empty)
|
||||
#close 2014-08-28-04-53-05
|
0
testing/btest/plugins/pktsrc-plugin/.btest-ignore
Normal file
0
testing/btest/plugins/pktsrc-plugin/.btest-ignore
Normal file
17
testing/btest/plugins/pktsrc-plugin/CMakeLists.txt
Normal file
17
testing/btest/plugins/pktsrc-plugin/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
project(Bro-Plugin-Demo-Foo)
|
||||
|
||||
cmake_minimum_required(VERSION 2.6.3)
|
||||
|
||||
if ( NOT BRO_DIST )
|
||||
message(FATAL_ERROR "BRO_DIST not set")
|
||||
endif ()
|
||||
|
||||
set(CMAKE_MODULE_PATH ${BRO_DIST}/cmake)
|
||||
|
||||
include(BroPlugin)
|
||||
|
||||
bro_plugin_begin(Demo Foo)
|
||||
bro_plugin_cc(src/Plugin.cc)
|
||||
bro_plugin_cc(src/Foo.cc)
|
||||
bro_plugin_end()
|
77
testing/btest/plugins/pktsrc-plugin/src/Foo.cc
Normal file
77
testing/btest/plugins/pktsrc-plugin/src/Foo.cc
Normal file
|
@ -0,0 +1,77 @@
|
|||
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "Foo.h"
|
||||
|
||||
using namespace plugin::Demo_Foo;
|
||||
|
||||
Foo::Foo(const std::string& path, bool is_live)
|
||||
{
|
||||
packet =
|
||||
string("\x45\x00\x00\x40\x15\x55\x40\x00\x3e\x06\x25\x5b\x01\x02\x00\x02"
|
||||
"\x01\x02\x00\x03\x09\xdf\x19\xf9\x5d\x8a\x36\x7c\x00\x00\x00\x00"
|
||||
"\xb0\x02\x40\x00\x3c\x72\x00\x00\x02\x04\x05\x5c\x01\x03\x03\x00"
|
||||
"\x01\x01\x08\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x04\x02", 64);
|
||||
|
||||
props.path = path;
|
||||
props.selectable_fd = open("/bin/sh", O_RDONLY); // any fd is fine.
|
||||
props.link_type = DLT_RAW;
|
||||
props.hdr_size = 0;
|
||||
props.netmask = 0;
|
||||
props.is_live = 0;
|
||||
}
|
||||
|
||||
iosource::PktSrc* Foo::Instantiate(const std::string& path, bool is_live)
|
||||
{
|
||||
return new Foo(path, is_live);
|
||||
}
|
||||
|
||||
void Foo::Open()
|
||||
{
|
||||
Opened(props);
|
||||
}
|
||||
|
||||
void Foo::Close()
|
||||
{
|
||||
Closed();
|
||||
}
|
||||
|
||||
bool Foo::ExtractNextPacket(Packet* pkt)
|
||||
{
|
||||
if ( packet.empty() )
|
||||
{
|
||||
Close();
|
||||
return false;
|
||||
}
|
||||
|
||||
hdr.ts.tv_sec = 1409193037;
|
||||
hdr.ts.tv_usec = 0;
|
||||
hdr.caplen = hdr.len = packet.size();
|
||||
pkt->ts = hdr.ts.tv_sec;
|
||||
pkt->hdr = &hdr;
|
||||
pkt->data = (const u_char *)packet.c_str();
|
||||
return true;
|
||||
}
|
||||
|
||||
void Foo::DoneWithPacket()
|
||||
{
|
||||
packet.clear();
|
||||
}
|
||||
|
||||
bool Foo::PrecompileFilter(int index, const std::string& filter)
|
||||
{
|
||||
// skip for the testing.
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Foo::SetFilter(int index)
|
||||
{
|
||||
// skip for the testing.
|
||||
return true;
|
||||
}
|
||||
|
||||
void Foo::Statistics(Stats* stats)
|
||||
{
|
||||
// skip for the testing.
|
||||
}
|
35
testing/btest/plugins/pktsrc-plugin/src/Foo.h
Normal file
35
testing/btest/plugins/pktsrc-plugin/src/Foo.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
|
||||
#ifndef BRO_PLUGIN_DEMO_FOO_H
|
||||
#define BRO_PLUGIN_DEMO_FOO_H
|
||||
|
||||
#include <Val.h>
|
||||
#include <iosource/PktSrc.h>
|
||||
|
||||
namespace plugin {
|
||||
namespace Demo_Foo {
|
||||
|
||||
class Foo : public iosource::PktSrc {
|
||||
public:
|
||||
Foo(const std::string& path, bool is_live);
|
||||
|
||||
static PktSrc* Instantiate(const std::string& path, bool is_live);
|
||||
|
||||
protected:
|
||||
virtual void Open();
|
||||
virtual void Close();
|
||||
virtual bool ExtractNextPacket(Packet* pkt);
|
||||
virtual void DoneWithPacket();
|
||||
virtual bool PrecompileFilter(int index, const std::string& filter);
|
||||
virtual bool SetFilter(int index);
|
||||
virtual void Statistics(Stats* stats);
|
||||
|
||||
private:
|
||||
Properties props;
|
||||
string packet;
|
||||
struct pcap_pkthdr hdr;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
20
testing/btest/plugins/pktsrc-plugin/src/Plugin.cc
Normal file
20
testing/btest/plugins/pktsrc-plugin/src/Plugin.cc
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
#include "Plugin.h"
|
||||
|
||||
#include "Foo.h"
|
||||
|
||||
namespace plugin { namespace Demo_Foo { Plugin plugin; } }
|
||||
|
||||
using namespace plugin::Demo_Foo;
|
||||
|
||||
plugin::Configuration Plugin::Configure()
|
||||
{
|
||||
AddComponent(new ::iosource::PktSrcComponent("FooPktSrc", "foo", ::iosource::PktSrcComponent::BOTH, ::plugin::Demo_Foo::Foo::Instantiate));
|
||||
|
||||
plugin::Configuration config;
|
||||
config.name = "Demo::Foo";
|
||||
config.description = "A Foo packet source";
|
||||
config.version.major = 1;
|
||||
config.version.minor = 0;
|
||||
return config;
|
||||
}
|
8
testing/btest/plugins/pktsrc.bro
Normal file
8
testing/btest/plugins/pktsrc.bro
Normal file
|
@ -0,0 +1,8 @@
|
|||
# @TEST-EXEC: ${DIST}/aux/bro-aux/plugin-support/init-plugin Demo Foo
|
||||
# @TEST-EXEC: cp -r %DIR/pktsrc-plugin/* .
|
||||
# @TEST-EXEC: ./configure --bro-dist=${DIST} && make
|
||||
# @TEST-EXEC: BRO_PLUGIN_PATH=`pwd` bro -NN Demo::Foo >>output
|
||||
# @TEST-EXEC: echo === >>output
|
||||
# @TEST-EXEC: BRO_PLUGIN_PATH=`pwd` bro -r foo:XXX %INPUT FilteredTraceDetection::enable=F >>output
|
||||
# @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff conn.log
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue