parent
bc095bc1c3
commit
db79cfb259
@ -22,7 +22,7 @@ Supported packet capture engines
|
||||
--------------------------------
|
||||
- NetFlow v5, v9
|
||||
- IPFIX
|
||||
- ![sFlow](http://sflow.org/images/sflowlogo.gif) v4 (will be deprecated in 1.1.7), v5
|
||||
- ![sFlow](http://sflow.org/images/sflowlogo.gif) v5
|
||||
- PCAP
|
||||
- AF_PACKET
|
||||
- Netmap
|
||||
|
@ -77,7 +77,7 @@ SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||
# Create builds in current folder with install RPATH
|
||||
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
|
||||
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${FASTNETMON_LIBRARIES_GLOBAL_PATH}/libhiredis_0_13/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/log4cpp1.1.1/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/luajit_2.0.4/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/ndpi/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/pf_ring_6.0.3/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/json-c-0.13/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/mongo_c_driver_1_1_9/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/grpc_1_27_3_e73882dc0fcedab1ffe789e44ed6254819639ce3/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/protobuf_3.11.4/lib")
|
||||
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${FASTNETMON_LIBRARIES_GLOBAL_PATH}/libhiredis_0_13/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/log4cpp1.1.1/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/ndpi/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/pf_ring_6.0.3/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/json-c-0.13/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/mongo_c_driver_1_1_9/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/grpc_1_27_3_e73882dc0fcedab1ffe789e44ed6254819639ce3/lib;${FASTNETMON_LIBRARIES_GLOBAL_PATH}/protobuf_3.11.4/lib")
|
||||
|
||||
message(STATUS "C++ compilation flags: ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||
|
||||
@ -208,7 +208,6 @@ add_library(ipfix_rfc STATIC ipfix_rfc.cpp)
|
||||
add_library(fastnetmon_packet_parser STATIC fastnetmon_packet_parser.c)
|
||||
|
||||
# -DENABLE_SNABBSWITCH_SUPPORT=ON ..
|
||||
# Please also comment out line: set(ENABLE_LUA_SUPPORT yes) if you want SnabbSwitch support
|
||||
if (ENABLE_SNABBSWITCH_SUPPORT)
|
||||
add_definitions(-DSNABB_SWITCH)
|
||||
add_library(snabbswitch_plugin STATIC snabbswitch_plugin/snabbswitch_collector.cpp)
|
||||
@ -288,31 +287,6 @@ if (ENABLE_DPI_SUPPORT)
|
||||
target_link_libraries(fast_dpi ${NDPI_LIBRARIES})
|
||||
endif()
|
||||
|
||||
# We do not enable it by default, it's testing feature
|
||||
# If you want it please build with:
|
||||
# cmake -DENABLE_LUA_SUPPORT=ON ..
|
||||
option(ENABLE_LUA_SUPPORT "Enable Lua support" OFF)
|
||||
if (ENABLE_LUA_SUPPORT)
|
||||
message(STATUS "We will enable LuaJIT support")
|
||||
|
||||
add_definitions(-DENABLE_LUA_HOOKS)
|
||||
|
||||
set(LUAJIT_CUSTOM_INSTALL_PATH "${FASTNETMON_LIBRARIES_GLOBAL_PATH}/luajit_2.0.4")
|
||||
|
||||
link_directories("${LUAJIT_CUSTOM_INSTALL_PATH}/lib")
|
||||
include_directories("${LUAJIT_CUSTOM_INSTALL_PATH}/include")
|
||||
|
||||
find_library(LUAJIT_LIBRARY_PATH NAMES luajit-5.1 PATHS "${LUAJIT_CUSTOM_INSTALL_PATH}/lib" NO_DEFAULT_PATH)
|
||||
|
||||
if (NOT LUAJIT_LIBRARY_PATH)
|
||||
message(FATAL_ERROR "Could not find luajit library")
|
||||
endif()
|
||||
|
||||
target_link_libraries(netflow_plugin ${LUAJIT_LIBRARY_PATH})
|
||||
target_link_libraries(sflow_plugin ${LUAJIT_LIBRARY_PATH})
|
||||
target_link_libraries(fast_library ${LUAJIT_LIBRARY_PATH})
|
||||
endif()
|
||||
|
||||
# pcap plugin
|
||||
add_library(pcap_plugin STATIC pcap_plugin/pcap_collector.cpp)
|
||||
target_link_libraries(pcap_plugin pcap)
|
||||
@ -582,11 +556,6 @@ target_link_libraries(fastnetmon ${LOG4CPP_LIBRARY_PATH})
|
||||
|
||||
target_link_libraries(fastnetmon ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
if (ENABLE_LUA_SUPPORT)
|
||||
target_link_libraries(fast_library ${LUAJIT_LIBRARY_PATH})
|
||||
target_link_libraries(fastnetmon ${LUAJIT_LIBRARY_PATH})
|
||||
endif()
|
||||
|
||||
# Our libs
|
||||
target_link_libraries(fastnetmon patricia)
|
||||
target_link_libraries(fastnetmon fastnetmon_pcap_format)
|
||||
|
@ -918,67 +918,6 @@ bool manage_interface_promisc_mode(std::string interface_name, bool switch_on) {
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_LUA_HOOKS
|
||||
lua_State* init_lua_jit(std::string lua_hooks_path) {
|
||||
extern log4cpp::Category& logger;
|
||||
|
||||
lua_State* lua_state = luaL_newstate();
|
||||
|
||||
if (lua_state == NULL) {
|
||||
logger << log4cpp::Priority::ERROR << "Can't create LUA session";
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// load libraries
|
||||
luaL_openlibs(lua_state);
|
||||
|
||||
int lua_load_file_result = luaL_dofile(lua_state, lua_hooks_path.c_str());
|
||||
|
||||
if (lua_load_file_result != 0) {
|
||||
logger << log4cpp::Priority::ERROR << "LuaJIT can't load file correctly from path: " << lua_hooks_path
|
||||
<< " disable LUA support";
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return lua_state;
|
||||
}
|
||||
|
||||
bool call_lua_function(std::string function_name,
|
||||
lua_State* lua_state_param,
|
||||
std::string client_addres_in_string_format,
|
||||
void* ptr) {
|
||||
extern log4cpp::Category& logger;
|
||||
|
||||
/* Function name */
|
||||
lua_getfield(lua_state_param, LUA_GLOBALSINDEX, function_name.c_str());
|
||||
|
||||
/* Function params */
|
||||
lua_pushstring(lua_state_param, client_addres_in_string_format.c_str());
|
||||
lua_pushlightuserdata(lua_state_param, ptr);
|
||||
|
||||
// Call with 1 argumnents and 1 result
|
||||
lua_call(lua_state_param, 2, 1);
|
||||
|
||||
if (lua_gettop(lua_state_param) == 1) {
|
||||
bool result = lua_toboolean(lua_state_param, -1) == 1 ? true : false;
|
||||
|
||||
// pop returned value
|
||||
lua_pop(lua_state_param, 1);
|
||||
|
||||
return result;
|
||||
} else {
|
||||
logger << log4cpp::Priority::ERROR << "We got " << lua_gettop(lua_state_param)
|
||||
<< " return values from the LUA, it's error, please check your LUA code";
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
json_object* serialize_attack_description_to_json(attack_details& current_attack) {
|
||||
json_object* jobj = json_object_new_object();
|
||||
|
||||
|
@ -24,10 +24,6 @@
|
||||
|
||||
#include "libpatricia/patricia.h"
|
||||
|
||||
#ifdef ENABLE_LUA_HOOKS
|
||||
#include <luajit-2.0/lua.hpp>
|
||||
#endif
|
||||
|
||||
#include "fast_endianless.hpp"
|
||||
|
||||
#define TCP_FIN_FLAG_SHIFT 1
|
||||
@ -106,14 +102,6 @@ subnet_t convert_subnet_from_string_to_binary_with_cidr_format(std::string subne
|
||||
bool manage_interface_promisc_mode(std::string interface_name, bool switch_on);
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_LUA_HOOKS
|
||||
lua_State* init_lua_jit(std::string lua_hooks_path);
|
||||
bool call_lua_function(std::string function_name,
|
||||
lua_State* lua_state_param,
|
||||
std::string client_addres_in_string_format,
|
||||
void* ptr);
|
||||
#endif
|
||||
|
||||
std::string serialize_attack_description(attack_details& current_attack);
|
||||
attack_type_t detect_attack_type(attack_details& current_attack);
|
||||
std::string get_printable_attack_name(attack_type_t attack);
|
||||
|
@ -161,21 +161,13 @@ netflow_sampling_ratio = 1
|
||||
# We could try to get smoother data with this option, i.e. we will divide counters on collection interval time
|
||||
netflow_divide_counters_on_interval_length = off
|
||||
|
||||
# Process each netflow packet with LUA
|
||||
# This option is not default and you need build it additionally
|
||||
# netflow_lua_hooks_path = /usr/src/fastnetmon/src/netflow_hooks.lua
|
||||
|
||||
# sFLOW configuration
|
||||
# sFlow configuration
|
||||
|
||||
# It's possible to specify multiple ports here, using commas as delimiter
|
||||
sflow_port = 6343
|
||||
# sflow_port = 6343,6344
|
||||
sflow_host = 0.0.0.0
|
||||
|
||||
# process each sFLOW packet with LUA
|
||||
# This option is not default and you need build it additionally
|
||||
# sflow_lua_hooks_path = /usr/src/fastnetmon/src/sflow_hooks.lua
|
||||
|
||||
# sFlow processing QinQ
|
||||
sflow_qinq_process = off
|
||||
|
||||
|
@ -202,7 +202,6 @@ if ($use_modern_pf_ring) {
|
||||
}
|
||||
|
||||
my $we_have_ndpi_support = '1';
|
||||
my $we_have_luajit_support = '';
|
||||
my $we_have_hiredis_support = '1';
|
||||
my $we_have_log4cpp_support = '1';
|
||||
my $we_have_pfring_support = '';
|
||||
@ -519,10 +518,6 @@ sub main {
|
||||
install_ndpi_dependencies();
|
||||
}
|
||||
|
||||
if ($we_have_luajit_support) {
|
||||
install_luajit_dependencies();
|
||||
}
|
||||
|
||||
if ($we_have_protobuf_support) {
|
||||
install_protobuf_dependencies();
|
||||
}
|
||||
@ -559,13 +554,6 @@ sub main {
|
||||
install_ndpi();
|
||||
}
|
||||
|
||||
if ($we_have_luajit_support) {
|
||||
install_luajit_dependencies();
|
||||
|
||||
install_luajit();
|
||||
install_luajit_libs();
|
||||
}
|
||||
|
||||
if ($we_have_hiredis_support) {
|
||||
install_hiredis();
|
||||
}
|
||||
@ -690,91 +678,6 @@ sub download_file {
|
||||
}
|
||||
}
|
||||
|
||||
sub install_luajit_dependencies {
|
||||
if ($os_type eq 'freebsd') {
|
||||
exec_command("pkg install -y gcc gmake");
|
||||
}
|
||||
}
|
||||
|
||||
sub install_luajit {
|
||||
chdir $temp_folder_for_building_project;
|
||||
|
||||
my $archive_file_name = "LuaJIT-2.0.4.tar.gz";
|
||||
|
||||
my $luajit_install_path = "$library_install_folder/luajit_2.0.4";
|
||||
|
||||
if (-e $luajit_install_path && defined($ENV{'CI'})) {
|
||||
print "Luajit was installed already\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
print "Download Luajit\n";
|
||||
|
||||
my $luajit_download_result = download_file(
|
||||
"http://luajit.org/download/$archive_file_name",
|
||||
$archive_file_name,
|
||||
'6e533675180300e85d12c4bbeea2d0e41ad21172'
|
||||
);
|
||||
|
||||
unless ($luajit_download_result) {
|
||||
fast_die("Can't download luajit");
|
||||
}
|
||||
|
||||
print "Unpack Luajit\n";
|
||||
exec_command("tar -xf LuaJIT-2.0.4.tar.gz");
|
||||
chdir "LuaJIT-2.0.4";
|
||||
|
||||
if ($os_type eq 'macosx' or $os_type eq 'freebsd') {
|
||||
# FreeBSD's sed has slightly different syntax
|
||||
exec_command("sed -i -e 's#export PREFIX= /usr/local#export PREFIX= $luajit_install_path#' Makefile");
|
||||
} else {
|
||||
# Standard Linux sed
|
||||
exec_command("sed -i 's#export PREFIX= /usr/local#export PREFIX= $luajit_install_path#' Makefile");
|
||||
}
|
||||
|
||||
print "Build and install Luajit\n";
|
||||
if ($os_type eq 'freebsd') {
|
||||
exec_command('gmake CC=gcc48 CXX=g++48 CPP="gcc48 -E" install')
|
||||
} else {
|
||||
exec_command("make $make_options install");
|
||||
}
|
||||
}
|
||||
|
||||
sub install_luajit_libs {
|
||||
install_lua_lpeg();
|
||||
install_lua_json();
|
||||
}
|
||||
|
||||
sub install_lua_lpeg {
|
||||
print "Install LUA lpeg module\n";
|
||||
|
||||
print "Download archive\n";
|
||||
chdir $temp_folder_for_building_project;
|
||||
|
||||
my $archive_file_name = 'lpeg-0.12.2.tar.gz';
|
||||
|
||||
my $lpeg_download_result = download_file("http://www.inf.puc-rio.br/~roberto/lpeg/$archive_file_name",
|
||||
$archive_file_name, '69eda40623cb479b4a30fb3720302d3a75f45577');
|
||||
|
||||
unless ($lpeg_download_result) {
|
||||
fast_die("Can't download lpeg");
|
||||
}
|
||||
|
||||
exec_command("tar -xf lpeg-0.12.2.tar.gz");
|
||||
chdir "lpeg-0.12.2";
|
||||
|
||||
# Set path
|
||||
print "Install lpeg library\n";
|
||||
if ($os_type eq 'macosx' or $os_type eq 'freebsd') {
|
||||
exec_command("sed -i -e 's#LUADIR = ../lua/#LUADIR = $library_install_folder/luajit_2.0.4/include/luajit-2.0#' makefile");
|
||||
} else {
|
||||
exec_command("sed -i 's#LUADIR = ../lua/#LUADIR = $library_install_folder/luajit_2.0.4/include/luajit-2.0#' makefile");
|
||||
}
|
||||
|
||||
exec_command("make $make_options");
|
||||
exec_command("cp lpeg.so $library_install_folder/luajit_2.0.4/lib/lua/5.1");
|
||||
}
|
||||
|
||||
sub install_json_c {
|
||||
my $archive_name = 'json-c-0.13-20171207.tar.gz';
|
||||
my $install_path = "$library_install_folder/json-c-0.13";
|
||||
@ -815,30 +718,6 @@ sub install_json_c {
|
||||
exec_command("make $make_options install");
|
||||
}
|
||||
|
||||
sub install_lua_json {
|
||||
print "Install LUA json module\n";
|
||||
|
||||
chdir $temp_folder_for_building_project;
|
||||
|
||||
print "Download archive\n";
|
||||
|
||||
my $archive_file_name = '1.3.3.tar.gz';
|
||||
|
||||
my $lua_json_download_result = download_file("https://github.com/harningt/luajson/archive/$archive_file_name", $archive_file_name,
|
||||
'53455f697c3f1d7cc955202062e97bbafbea0779');
|
||||
|
||||
unless ($lua_json_download_result) {
|
||||
fast_die("Can't download lua json");
|
||||
}
|
||||
|
||||
exec_command("tar -xf $archive_file_name");
|
||||
|
||||
chdir "luajson-1.3.3";
|
||||
|
||||
print "Install it\n";
|
||||
exec_command("PREFIX=$library_install_folder/luajit_2.0.4 make $make_options install");
|
||||
}
|
||||
|
||||
sub install_init_scripts {
|
||||
# Init file for any systemd aware distro
|
||||
my $systemd_distro = '';
|
||||
@ -1929,11 +1808,6 @@ sub install_fastnetmon {
|
||||
system("sed -i 's/netmap_plugin fastnetmon_packet_parser/netmap_plugin fastnetmon_packet_parser unified_parser/' ../CMakeLists.txt")
|
||||
}
|
||||
|
||||
# We do not need LUA by default
|
||||
unless ($we_have_luajit_support) {
|
||||
$cmake_params .= " -DENABLE_LUA_SUPPORT=OFF ";
|
||||
}
|
||||
|
||||
# We use $configure_options to pass CC and CXX variables about custom compiler when we use it
|
||||
if ((defined($ENV{'TRAVIS'}) && $ENV{'TRAVIS'}) or (defined($ENV{'CI'}) && $ENV{'CI'})) {
|
||||
system("$configure_options $ld_library_path_for_make $cmake_path .. $cmake_params");
|
||||
|
@ -1,58 +0,0 @@
|
||||
package.path = package.path .. ";/usr/share/lua/5.1/?.lua"
|
||||
|
||||
local json = require("json")
|
||||
|
||||
-- We have this library bundled only in luajit:
|
||||
-- g++ lua_integration.cpp -lluajit-5.1
|
||||
|
||||
-- Before production use, please call your code with luajit CLI
|
||||
local ffi = require("ffi")
|
||||
|
||||
-- Load declaration from the inside separate header file
|
||||
-- This code should be in sync with https://github.com/pavel-odintsov/fastnetmon/blob/master/src/netflow_plugin/netflow.h
|
||||
-- And we use uintXX_t instead u_intXX_t here
|
||||
ffi.cdef([[typedef struct __attribute__((packed)) NF5_FLOW {
|
||||
uint32_t src_ip, dest_ip, nexthop_ip;
|
||||
uint16_t if_index_in, if_index_out;
|
||||
uint32_t flow_packets, flow_octets;
|
||||
uint32_t flow_start, flow_finish;
|
||||
uint16_t src_port, dest_port;
|
||||
uint8_t pad1;
|
||||
uint8_t tcp_flags, protocol, tos;
|
||||
uint16_t src_as, dest_as;
|
||||
uint8_t src_mask, dst_mask;
|
||||
uint16_t pad2;
|
||||
} NF5_FLOW_t;]])
|
||||
|
||||
-- Load json file once
|
||||
local json_file = io.open("/usr/src/fastnetmon/src/tests/netflow_exclude.json", "r")
|
||||
local decoded = json.decode(json_file:read("*all"))
|
||||
|
||||
--for k, v in pairs(decoded) do
|
||||
-- for kk, vv in pairs(v) do
|
||||
-- print(k, kk, vv)
|
||||
-- end
|
||||
--end
|
||||
|
||||
function process_netflow(flow_agent_ip, flow)
|
||||
local netlflow5_t = ffi.typeof('NF5_FLOW_t*')
|
||||
local lua_flow = ffi.cast(netlflow5_t, flow)
|
||||
|
||||
--print ("We got this packets from: ", flow_agent_ip)
|
||||
-- TODO: PLEASE BE AWARE! Thid code will read json file for every netflow packet
|
||||
--print ("Flow packets and bytes: ", lua_flow.flow_packets, lua_flow.flow_octets)
|
||||
--print ("In interface :", lua_flow.if_index_in, " out interface: ", lua_flow.if_index_out)
|
||||
|
||||
for agent_ip, ports_table in pairs(decoded) do
|
||||
if agent_ip == flow_agent_ip then
|
||||
for port_number, port_description in pairs(ports_table) do
|
||||
if lua_flow.if_index_in == port_number then
|
||||
-- We found this port in ignore list
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
@ -128,7 +128,6 @@ int main(int argc, char* argv[]) {
|
||||
// Required by Netmap and PF_RING plugins
|
||||
// We use fake interface name here because netmap could make server unreachable :)
|
||||
configuration_map["interfaces"] = "ethXXX";
|
||||
configuration_map["sflow_lua_hooks_path"] = "/usr/src/fastnetmon_lua/src/sflow_hooks.lua";
|
||||
|
||||
if (strstr(argv[1], "sflow") != NULL) {
|
||||
std::cout << "Starting sflow" << std::endl;
|
||||
|
@ -172,7 +172,7 @@ DOC
|
||||
put_text_to_file("$rpm_sources_path/systemd_init", $systemd_init_script);
|
||||
|
||||
# Create files list from archive
|
||||
# ./luajit_2.0.4/
|
||||
# ./libname_1.2.3/
|
||||
my @files_list = `tar -tf /root/rpmbuild/SOURCES/archive.tar.gz`;
|
||||
chomp @files_list;
|
||||
|
||||
|
@ -1,223 +0,0 @@
|
||||
local json = require("json")
|
||||
|
||||
-- We have this library bundled only in luajit:
|
||||
-- g++ lua_integration.cpp -lluajit-5.1
|
||||
|
||||
-- Before production use, please call your code with luajit CLI
|
||||
local ffi = require("ffi")
|
||||
|
||||
-- Load declaration from the inside separate header file
|
||||
-- This code should be in sync with https://github.com/pavel-odintsov/fastnetmon/blob/master/src/sflow_plugin/sflow_data.h
|
||||
-- We have changed all defines to actual values
|
||||
ffi.cdef([[
|
||||
typedef unsigned char u_char;
|
||||
typedef long time_t;
|
||||
|
||||
typedef struct _SFLIf_counters {
|
||||
uint32_t ifIndex;
|
||||
uint32_t ifType;
|
||||
uint64_t ifSpeed;
|
||||
uint32_t ifDirection; /* Derived from MAU MIB (RFC 2668)
|
||||
0 = unknown, 1 = full-duplex,
|
||||
2 = half-duplex, 3 = in, 4 = out */
|
||||
uint32_t ifStatus; /* bit field with the following bits assigned:
|
||||
bit 0 = ifAdminStatus (0 = down, 1 = up)
|
||||
bit 1 = ifOperStatus (0 = down, 1 = up) */
|
||||
uint64_t ifInOctets;
|
||||
uint32_t ifInUcastPkts;
|
||||
uint32_t ifInMulticastPkts;
|
||||
uint32_t ifInBroadcastPkts;
|
||||
uint32_t ifInDiscards;
|
||||
uint32_t ifInErrors;
|
||||
uint32_t ifInUnknownProtos;
|
||||
uint64_t ifOutOctets;
|
||||
uint32_t ifOutUcastPkts;
|
||||
uint32_t ifOutMulticastPkts;
|
||||
uint32_t ifOutBroadcastPkts;
|
||||
uint32_t ifOutDiscards;
|
||||
uint32_t ifOutErrors;
|
||||
uint32_t ifPromiscuousMode;
|
||||
} SFLIf_counters;
|
||||
|
||||
typedef struct { uint32_t addr; } SFLIPv4;
|
||||
|
||||
typedef struct { u_char addr[16]; } SFLIPv6;
|
||||
|
||||
typedef union _SFLAddress_value {
|
||||
SFLIPv4 ip_v4;
|
||||
SFLIPv6 ip_v6;
|
||||
} SFLAddress_value;
|
||||
|
||||
typedef struct _SFLAddress {
|
||||
uint32_t type; /* enum SFLAddress_type */
|
||||
SFLAddress_value address;
|
||||
} SFLAddress;
|
||||
typedef struct _SFSample {
|
||||
SFLAddress sourceIP;
|
||||
SFLAddress agent_addr;
|
||||
uint32_t agentSubId;
|
||||
|
||||
/* the raw pdu */
|
||||
uint8_t* rawSample;
|
||||
uint32_t rawSampleLen;
|
||||
uint8_t* endp;
|
||||
time_t pcapTimestamp;
|
||||
|
||||
/* decode cursor */
|
||||
uint32_t* datap;
|
||||
|
||||
uint32_t datagramVersion;
|
||||
uint32_t sampleType;
|
||||
uint32_t elementType;
|
||||
uint32_t ds_class;
|
||||
uint32_t ds_index;
|
||||
|
||||
/* generic interface counter sample */
|
||||
SFLIf_counters ifCounters;
|
||||
|
||||
/* sample stream info */
|
||||
uint32_t sysUpTime;
|
||||
uint32_t sequenceNo;
|
||||
uint32_t sampledPacketSize;
|
||||
uint32_t samplesGenerated;
|
||||
uint32_t meanSkipCount;
|
||||
uint32_t samplePool;
|
||||
uint32_t dropEvents;
|
||||
|
||||
/* the sampled header */
|
||||
uint32_t packet_data_tag;
|
||||
uint32_t headerProtocol;
|
||||
uint8_t* header;
|
||||
int headerLen;
|
||||
uint32_t stripped;
|
||||
|
||||
/* header decode */
|
||||
int gotIPV4;
|
||||
int gotIPV4Struct;
|
||||
int offsetToIPV4;
|
||||
int gotIPV6;
|
||||
int gotIPV6Struct;
|
||||
int offsetToIPV6;
|
||||
int offsetToPayload;
|
||||
SFLAddress ipsrc;
|
||||
SFLAddress ipdst;
|
||||
uint32_t dcd_ipProtocol;
|
||||
uint32_t dcd_ipTos;
|
||||
uint32_t dcd_ipTTL;
|
||||
uint32_t dcd_sport;
|
||||
uint32_t dcd_dport;
|
||||
uint32_t dcd_tcpFlags;
|
||||
uint32_t ip_fragmentOffset;
|
||||
uint32_t udp_pduLen;
|
||||
|
||||
/* ports */
|
||||
uint32_t inputPortFormat;
|
||||
uint32_t outputPortFormat;
|
||||
uint32_t inputPort;
|
||||
uint32_t outputPort;
|
||||
|
||||
/* ethernet */
|
||||
uint32_t eth_type;
|
||||
uint32_t eth_len;
|
||||
uint8_t eth_src[8];
|
||||
uint8_t eth_dst[8];
|
||||
|
||||
/* vlan */
|
||||
uint32_t in_outer_vlan;
|
||||
uint32_t in_vlan;
|
||||
uint32_t in_priority;
|
||||
uint32_t internalPriority;
|
||||
uint32_t out_vlan;
|
||||
uint32_t out_priority;
|
||||
int vlanFilterReject;
|
||||
|
||||
/* extended data fields */
|
||||
uint32_t num_extended;
|
||||
uint32_t extended_data_tag;
|
||||
|
||||
/* IP forwarding info */
|
||||
SFLAddress nextHop;
|
||||
uint32_t srcMask;
|
||||
uint32_t dstMask;
|
||||
|
||||
/* BGP info */
|
||||
SFLAddress bgp_nextHop;
|
||||
uint32_t my_as;
|
||||
uint32_t src_as;
|
||||
uint32_t src_peer_as;
|
||||
uint32_t dst_as_path_len;
|
||||
uint32_t* dst_as_path;
|
||||
/* note: version 4 dst as path segments just get printed, not stored here, however
|
||||
* the dst_peer and dst_as are filled in, since those are used for netflow encoding
|
||||
*/
|
||||
uint32_t dst_peer_as;
|
||||
uint32_t dst_as;
|
||||
|
||||
uint32_t communities_len;
|
||||
uint32_t* communities;
|
||||
uint32_t localpref;
|
||||
|
||||
/* user id */
|
||||
uint32_t src_user_charset;
|
||||
uint32_t src_user_len;
|
||||
char src_user[200 + 1];
|
||||
uint32_t dst_user_charset;
|
||||
uint32_t dst_user_len;
|
||||
char dst_user[200 + 1];
|
||||
|
||||
/* url */
|
||||
uint32_t url_direction;
|
||||
uint32_t url_len;
|
||||
char url[200 + 1];
|
||||
uint32_t host_len;
|
||||
char host[200 + 1];
|
||||
|
||||
/* mpls */
|
||||
SFLAddress mpls_nextHop;
|
||||
|
||||
/* nat */
|
||||
SFLAddress nat_src;
|
||||
SFLAddress nat_dst;
|
||||
|
||||
/* counter blocks */
|
||||
uint32_t statsSamplingInterval;
|
||||
uint32_t counterBlockVersion;
|
||||
|
||||
/* exception handler context */
|
||||
//jmp_buf env;
|
||||
} SFSample;
|
||||
]])
|
||||
|
||||
-- Load json file once
|
||||
local json_file = io.open("/usr/src/fastnetmon/src/tests/netflow_exclude.json", "r")
|
||||
local decoded = json.decode(json_file:read("*all"))
|
||||
|
||||
|
||||
function process_sflow(flow_agent_ip, flow)
|
||||
local sflow_t = ffi.typeof('SFSample*')
|
||||
local lua_sflow = ffi.cast(sflow_t, flow)
|
||||
|
||||
--print ("We got this packets from: ", flow_agent_ip)
|
||||
-- TODO: PLEASE BE AWARE! Thid code will read json file for every packet
|
||||
--print ("Flow packets and bytes: ", lua_flow.flow_packets, lua_flow.flow_octets)
|
||||
print ("Agent IP", flow_agent_ip," in interface :", lua_sflow.inputPort, " out interface: ", lua_sflow.outputPort)
|
||||
|
||||
for agent_ip, ports_table in pairs(decoded) do
|
||||
if agent_ip == flow_agent_ip then
|
||||
for port_number, port_description in pairs(ports_table) do
|
||||
if lua_sflow.outputPort == port_number then
|
||||
-- We found this port in ignore list
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--for k,v in pairs(decoded) do
|
||||
-- for kk, vv in pairs(v) do
|
||||
-- --print(k, kk, vv)
|
||||
-- end
|
||||
--end
|
||||
|
||||
return true
|
||||
end
|
@ -1,49 +0,0 @@
|
||||
#include <lua5.1/lua.hpp>
|
||||
|
||||
// Heh, we have luajit only for Debian Jessie and should think about custom compilation
|
||||
// https://packages.debian.org/search?keywords=luajit
|
||||
|
||||
// This code will NOT work with lua 5.2 because 5.1 and 5.2 really incompatible:
|
||||
// http://lists.opensuse.org/opensuse-factory/2012-01/msg00265.html
|
||||
// Ubuntu 14.04 also has it: http://packages.ubuntu.com/trusty/luajit
|
||||
|
||||
// apt-get install -y lua5.1 lua-json liblua5.1-dev
|
||||
// g++ lua_integration.cpp -lluajit-5.1
|
||||
|
||||
// Unfortunately, we haven't support for FFI in standard lua and should switch to luajit:
|
||||
// Info about bundled modules to luajit: http://luajit.org/extensions.html
|
||||
// apt-get install -y libluajit-5.1-dev
|
||||
int main() {
|
||||
typedef struct netflow_struct {
|
||||
int packets;
|
||||
int bytes;
|
||||
} netflow_t;
|
||||
netflow_t flow;
|
||||
|
||||
flow.packets = 55;
|
||||
flow.bytes = 77;
|
||||
|
||||
lua_State* L = luaL_newstate();
|
||||
// load libraries
|
||||
luaL_openlibs(L);
|
||||
|
||||
luaL_dofile(L, "json_parser.lua");
|
||||
// luaL_dostring(L, "a = 10 + 5");
|
||||
// lua_getglobal(L, "a");
|
||||
// int i = lua_tointeger(L, -1);
|
||||
// printf("%d\n", i);
|
||||
lua_getfield(L, LUA_GLOBALSINDEX, "process_netflow");
|
||||
// lua_pushstring(L, "first_arg");
|
||||
|
||||
lua_pushlightuserdata(L, (void*)&flow);
|
||||
|
||||
// Call with 1 argumnents and 1 result
|
||||
lua_call(L, 1, 1);
|
||||
|
||||
printf("Lua gettop: %d\n", lua_gettop(L));
|
||||
printf("Boolean result: %d\n", lua_toboolean(L, -1));
|
||||
|
||||
lua_close(L);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,169 +0,0 @@
|
||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index a65734b..8a52b0b 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -5,6 +5,13 @@ cmake_minimum_required (VERSION 2.8)
|
||||
# Debian 7 - 2.8.9
|
||||
# CentOS 6 - 2.8.12
|
||||
|
||||
+# We should set compiler berfor project() call
|
||||
+if (ENABLE_BUILD_IN_CPP_11_CUSTOM_ENVIRONMENT)
|
||||
+ # We use custom compiler too
|
||||
+ set(CMAKE_C_COMPILER "/opt/gcc520/bin/gcc")
|
||||
+ set(CMAKE_CXX_COMPILER "/opt/gcc520/bin/g++")
|
||||
+endif()
|
||||
+
|
||||
project(FastNetMon)
|
||||
|
||||
# Unfortunately, Debian Squeeze haven't support for this feature
|
||||
@@ -20,11 +27,42 @@ set (FASTNETMON_VERSION_MINOR 1)
|
||||
|
||||
# cmake -DENABLE_BUILD_IN_CPP_11_CUSTOM_ENVIRONMENT=ON ..
|
||||
if (ENABLE_BUILD_IN_CPP_11_CUSTOM_ENVIRONMENT)
|
||||
- # We use custom compiler too
|
||||
- set(CMAKE_C_COMPILER "/opt/gcc520/bin/gcc")
|
||||
- set(CMAKE_CXX_COMPILER "/opt/gcc520/bin/g++")
|
||||
+ # Set blank sysroot
|
||||
+ #set(CMAKE_SYSROOT "/opt/glibc_2.22")
|
||||
+
|
||||
+ set(MY_LINK_DIRECTORIES "/opt/glibc_2.22/lib;/opt/gcc520/lib64;/opt/boost_1_58_0/stage/lib;/opt/libhiredis_0_13/lib;/opt/log4cpp1.1.1/lib;/opt/luajit_2.0.4/lib;/opt/ndpi/lib;/opt/pf_ring/lib;/opt/json-c-0.12/lib")
|
||||
+ set(MY_INCLUDE_DIRECTORIES "/opt/glibc_2.22/include")
|
||||
+
|
||||
+ # TODO: onlt temp code
|
||||
+ include_directories("/usr/include/x86_64-linux-gnu")
|
||||
+ include_directories("/usr/include")
|
||||
+ #include_directories("/usr/src/linux-headers-3.16.0-4-common/include/uapi")
|
||||
+
|
||||
+ # Remove all standard path's for C and C++ compilers
|
||||
+ set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")
|
||||
+ set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "")
|
||||
+ set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
|
||||
+
|
||||
+ set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "")
|
||||
+ set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "")
|
||||
+ set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "")
|
||||
+
|
||||
+ # Remove all default paths for platform
|
||||
+ set(CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "")
|
||||
+ set(CMAKE_SYSTEM_INCLUDE_PATH "${MY_INCLUDE_DIRECTORIES}")
|
||||
+
|
||||
+ set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "${MY_LINK_DIRECTORIES}")
|
||||
+ set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "${MY_LINK_DIRECTORIES}")
|
||||
+ set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "c")
|
||||
+
|
||||
+ # Specify path's to custom compiled gcc and glibc
|
||||
+ set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;gcc;gcc_s;m;c")
|
||||
+ set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "${MY_LINK_DIRECTORIES}")
|
||||
+ set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "${MY_LINK_DIRECTORIES}")
|
||||
|
||||
set(BOOST_INCLUDEDIR "/opt/boost_1_58_0")
|
||||
+ include_directories("${BOOST_INCLUDEDIR}")
|
||||
+
|
||||
set(BOOST_LIBRARYDIR "/opt/boost_1_58_0/stage/lib/")
|
||||
|
||||
# It's really nice part of this custom build process :)
|
||||
@@ -32,6 +70,9 @@ if (ENABLE_BUILD_IN_CPP_11_CUSTOM_ENVIRONMENT)
|
||||
|
||||
# Disable warning from Boost when compiling with gcc 5.2
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-deprecated-declarations")
|
||||
+
|
||||
+ # Specify custom ld-linux dynamic linker path
|
||||
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wl,--dynamic-linker=/opt/glibc_2.22/lib/ld-linux-x86-64.so.2")
|
||||
|
||||
# Specify full RPATH for build tree
|
||||
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||
@@ -39,7 +80,7 @@ if (ENABLE_BUILD_IN_CPP_11_CUSTOM_ENVIRONMENT)
|
||||
# Create builds in current folder with install RPATH
|
||||
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
|
||||
- SET(CMAKE_INSTALL_RPATH "/opt/gcc520/lib64;/opt/boost_1_58_0/stage/lib;/opt/libhiredis_0_13/lib;/opt/log4cpp1.1.1/lib;/opt/luajit_2.0.4/lib;/opt/ndpi/lib;/opt/pf_ring/lib;/opt/json-c-0.12/lib")
|
||||
+ SET(CMAKE_INSTALL_RPATH "${MY_LINK_DIRECTORIES}")
|
||||
endif()
|
||||
|
||||
# It's pretty safe and provide big speedup for our packet processor and patricia code
|
||||
@@ -169,7 +210,15 @@ endif()
|
||||
add_library(pcap_plugin STATIC pcap_plugin/pcap_collector.cpp)
|
||||
target_link_libraries(pcap_plugin pcap)
|
||||
|
||||
-find_package(Threads)
|
||||
+#find_package(Threads)
|
||||
+
|
||||
+#if (Threads_FOUND)
|
||||
+# message(STATUS "We found threads library")
|
||||
+#else()
|
||||
+# message(FATAL_ERROR "We can't find threads library")
|
||||
+#endif()
|
||||
+# TODO: fix this hack
|
||||
+set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||
|
||||
if (ENABLE_PFRING_SUPPORT)
|
||||
add_library(pfring_plugin STATIC pfring_plugin/pfring_collector.cpp)
|
||||
@@ -247,7 +296,7 @@ if (LOG4CPP_INCLUDES_FOLDER AND LOG4CPP_LIBRARY_PATH)
|
||||
include_directories(${LOG4CPP_INCLUDES_FOLDER})
|
||||
message(STATUS "We have found log4cpp and will build project")
|
||||
else()
|
||||
- message(STATUS "We can't find log4cpp. We can't build project")
|
||||
+ message(FATAL_ERROR "We can't find log4cpp. We can't build project")
|
||||
endif()
|
||||
|
||||
### Look for jsonc
|
||||
@@ -259,7 +308,7 @@ if (JSONC_INCLUDES_FOLDER AND JSONC_LIBRARY_PATH)
|
||||
include_directories(${JSONC_INCLUDES_FOLDER})
|
||||
message(STATUS "We have found json-c library correctly: ${JSONC_LIBRARY_PATH}")
|
||||
else()
|
||||
- message(STATUS "We can't find json-c library! Can't build project")
|
||||
+ message(FATAL_ERROR "We can't find json-c library! Can't build project")
|
||||
endif()
|
||||
|
||||
target_link_libraries(fast_library ${JSONC_LIBRARY_PATH})
|
||||
diff --git a/src/tests/patch_for_custom_libc.patch b/src/tests/patch_for_custom_libc.patch
|
||||
index 6426400..c7ea4ff 100644
|
||||
--- a/src/tests/patch_for_custom_libc.patch
|
||||
+++ b/src/tests/patch_for_custom_libc.patch
|
||||
@@ -1,46 +0,0 @@
|
||||
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
-index a65734b..406a5b9 100644
|
||||
---- a/src/CMakeLists.txt
|
||||
-+++ b/src/CMakeLists.txt
|
||||
-@@ -27,11 +27,32 @@ if (ENABLE_BUILD_IN_CPP_11_CUSTOM_ENVIRONMENT)
|
||||
- set(BOOST_INCLUDEDIR "/opt/boost_1_58_0")
|
||||
- set(BOOST_LIBRARYDIR "/opt/boost_1_58_0/stage/lib/")
|
||||
-
|
||||
-+ # Remove all system directories with default libraries
|
||||
-+ message(STATUS "CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES=${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES}")
|
||||
-+ set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")
|
||||
-+
|
||||
-+ message(STATUS "CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES = ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}")
|
||||
-+ set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/opt/glibc_2.22/include")
|
||||
-+
|
||||
-+ set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/opt/glibc_2.22/lib;/opt/gcc520/lib64;/opt/glibc_2.22/lib;/opt/gcc520/lib/gcc/x86_64-unknown-linux-gnu/5.2.0")
|
||||
-+ include_directories("/opt/glibc_2.22/include")
|
||||
-+
|
||||
-+ message(STATUS "CMAKE_CXX_IMPLICIT_LINK_LIBRARIES=${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}")
|
||||
-+ set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
|
||||
-+ set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;gcc;gcc_s;m;c")
|
||||
-+
|
||||
-+ message(STATUS "CMAKE_CXX_IMPLICIT_LINK_LIBRARIES=${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}")
|
||||
-+
|
||||
- # It's really nice part of this custom build process :)
|
||||
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11")
|
||||
-
|
||||
- # Disable warning from Boost when compiling with gcc 5.2
|
||||
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-deprecated-declarations")
|
||||
-+
|
||||
-+ # Pass custom ld-linux for our own binary
|
||||
-+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wl,--dynamic-linker=/opt/glibc_2.22/lib/ld-linux-x86-64.so.2")
|
||||
-+
|
||||
-+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -nodefaultlibs -nostdinc -nostdinc++")
|
||||
-
|
||||
- # Specify full RPATH for build tree
|
||||
- SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||
-@@ -39,7 +60,7 @@ if (ENABLE_BUILD_IN_CPP_11_CUSTOM_ENVIRONMENT)
|
||||
- # Create builds in current folder with install RPATH
|
||||
- SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
-
|
||||
-- SET(CMAKE_INSTALL_RPATH "/opt/gcc520/lib64;/opt/boost_1_58_0/stage/lib;/opt/libhiredis_0_13/lib;/opt/log4cpp1.1.1/lib;/opt/luajit_2.0.4/lib;/opt/ndpi/lib;/opt/pf_ring/lib;/opt/json-c-0.12/lib")
|
||||
-+ SET(CMAKE_INSTALL_RPATH "/opt/glibc_2.22/lib;/opt/gcc520/lib64;/opt/boost_1_58_0/stage/lib;/opt/libhiredis_0_13/lib;/opt/log4cpp1.1.1/lib;/opt/luajit_2.0.4/lib;/opt/ndpi/lib;/opt/pf_ring/lib;/opt/json-c-0.12/lib")
|
||||
- endif()
|
||||
-
|
||||
- # It's pretty safe and provide big speedup for our packet processor and patricia code
|
Loading…
Reference in New Issue
Block a user