X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/641204dfbdb9fc870cdd2e7f9e3169a44693e7bf..a5709854a8f0dc833598a2e1aefbd3000aeefb41:/projects/stargazer/plugins/capture/cap_nf/cap_nf.cpp?ds=sidebyside diff --git a/projects/stargazer/plugins/capture/cap_nf/cap_nf.cpp b/projects/stargazer/plugins/capture/cap_nf/cap_nf.cpp index 11a96ef1..a572e8a1 100644 --- a/projects/stargazer/plugins/capture/cap_nf/cap_nf.cpp +++ b/projects/stargazer/plugins/capture/cap_nf/cap_nf.cpp @@ -37,33 +37,19 @@ $Author: faust $ #include #include -#include "common.h" -#include "cap_nf.h" -#include "raw_ip_packet.h" - -#include "../../../traffcounter.h" - -class CAP_NF_CREATOR -{ -public: - CAP_NF_CREATOR() - : nf(new NF_CAP()) - { - }; +#include - ~CAP_NF_CREATOR() - { - delete nf; - }; +#include "stg/common.h" +#include "stg/raw_ip_packet.h" +#include "stg/traffcounter.h" +#include "stg/plugin_creator.h" +#include "cap_nf.h" - NF_CAP * GetCapturer() { return nf; }; -private: - NF_CAP * nf; -} cnc; +PLUGIN_CREATOR cnc; -BASE_PLUGIN * GetPlugin() +PLUGIN * GetPlugin() { -return cnc.GetCapturer(); +return cnc.GetPlugin(); } NF_CAP::NF_CAP() @@ -87,7 +73,7 @@ NF_CAP::~NF_CAP() int NF_CAP::ParseSettings() { -vector::iterator it; +std::vector::iterator it; for (it = settings.moduleParams.begin(); it != settings.moduleParams.end(); ++it) { if (it->param == "TCPPort") @@ -262,7 +248,7 @@ socklen_t slen; cap->stoppedUDP = false; while (cap->runningUDP) { - if (!cap->WaitPackets(cap->sockUDP)) + if (!WaitPackets(cap->sockUDP)) { continue; } @@ -278,9 +264,6 @@ while (cap->runningUDP) continue; } - - // Wrong logic! - // Need to check actual data length and wait all data to receive if (res < 24) { if (errno != EINTR) @@ -308,7 +291,7 @@ socklen_t slen; cap->stoppedTCP = false; while (cap->runningTCP) { - if (!cap->WaitPackets(cap->sockTCP)) + if (!WaitPackets(cap->sockTCP)) { continue; } @@ -329,7 +312,7 @@ while (cap->runningTCP) continue; } - if (!cap->WaitPackets(sd)) + if (!WaitPackets(sd)) { close(sd); continue; @@ -390,51 +373,15 @@ for (int i = 0; i < packets; ++i) { NF_DATA * data = reinterpret_cast(buf + 24 + i * 48); - /*ip.pckt[0] = 4 << 4; - ip.pckt[0] |= 5; - ip.pckt[9] = data->proto; - ip.dataLen = ntohl(data->octets); - *(uint32_t *)(ip.pckt + 12) = data->srcAddr; - *(uint32_t *)(ip.pckt + 16) = data->dstAddr; - *(uint16_t *)(ip.pckt + 20) = data->srcPort; - *(uint16_t *)(ip.pckt + 22) = data->dstPort;*/ - ip.ipHeader.ip_v = 4; - ip.ipHeader.ip_hl = 5; - ip.ipHeader.ip_p = data->proto; + ip.header.ipHeader.ip_v = 4; + ip.header.ipHeader.ip_hl = 5; + ip.header.ipHeader.ip_p = data->proto; ip.dataLen = ntohl(data->octets); - ip.ipHeader.ip_src.s_addr = data->srcAddr; - ip.ipHeader.ip_dst.s_addr = data->dstAddr; - ip.sPort = data->srcPort; - ip.dPort = data->dstPort; + ip.header.ipHeader.ip_src.s_addr = data->srcAddr; + ip.header.ipHeader.ip_dst.s_addr = data->dstAddr; + ip.header.sPort = data->srcPort; + ip.header.dPort = data->dstPort; traffCnt->Process(ip); } } - -bool NF_CAP::WaitPackets(int sd) const -{ -fd_set rfds; -FD_ZERO(&rfds); -FD_SET(sd, &rfds); - -struct timeval tv; -tv.tv_sec = 0; -tv.tv_usec = 500000; - -int res = select(sd + 1, &rfds, NULL, NULL, &tv); -if (res == -1) // Error - { - if (errno != EINTR) - { - printfd(__FILE__, "Error on select: '%s'\n", strerror(errno)); - } - return false; - } - -if (res == 0) // Timeout - { - return false; - } - -return true; -}