From 772763ccd1aff57875bee42c00715e3f0f453847 Mon Sep 17 00:00:00 2001 From: dragorn Date: Sun, 22 Nov 2009 11:41:51 +0000 Subject: Enhanced gps support decttxt logfile support min/max rssi tracking support scandect pcap now volatile git-svn-id: https://dedected.org/svn/trunk@100 8d8ab74c-27aa-4a3d-9bde-523a2bc1f624 --- kismet-dect-v2/Makefile | 2 +- kismet-dect-v2/dumpfile_decttxt.cc | 137 +++++++++++++++++++++++++++++++++++++ kismet-dect-v2/dumpfile_decttxt.h | 51 ++++++++++++++ kismet-dect-v2/kismet_dect.cc | 5 ++ kismet-dect-v2/tracker_dect.cc | 30 +++++++- kismet-dect-v2/tracker_dect.h | 12 +++- 6 files changed, 233 insertions(+), 4 deletions(-) create mode 100644 kismet-dect-v2/dumpfile_decttxt.cc create mode 100644 kismet-dect-v2/dumpfile_decttxt.h diff --git a/kismet-dect-v2/Makefile b/kismet-dect-v2/Makefile index ce9e5de..a1e8546 100644 --- a/kismet-dect-v2/Makefile +++ b/kismet-dect-v2/Makefile @@ -12,7 +12,7 @@ PLUGINLDFLAGS += -shared -rdynamic LIBS += -lstdc++ CFLAGS += -I/usr/include -I$(KIS_INC_DIR) -g -fPIC -SRVOBJS = packetsource_dect.o tracker_dect.o kismet_dect.o +SRVOBJS = packetsource_dect.o tracker_dect.o dumpfile_decttxt.o kismet_dect.o SRVOUT = dedected.so CLIOBJS = dect_client.o diff --git a/kismet-dect-v2/dumpfile_decttxt.cc b/kismet-dect-v2/dumpfile_decttxt.cc new file mode 100644 index 0000000..0f5b8d0 --- /dev/null +++ b/kismet-dect-v2/dumpfile_decttxt.cc @@ -0,0 +1,137 @@ +/* + This file is part of Kismet + + Kismet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + Kismet is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Kismet; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + DECT source v2 + (c) 2008 by Mike Kershaw +#include + +#include "dumpfile_decttxt.h" + +Dumpfile_Decttxt::Dumpfile_Decttxt(GlobalRegistry *in_globalreg, + Tracker_Dect *in_tracker) : Dumpfile(in_globalreg) { + + globalreg = in_globalreg; + tracker = in_tracker; + + txtfile = NULL; + + if ((fname = ProcessConfigOpt("decttxt")) == "" || + globalreg->fatal_condition) { + return; + } + + if ((txtfile = fopen(fname.c_str(), "w")) == NULL) { + _MSG("Failed to open decttxt log file '" + fname + "': " + strerror(errno), + MSGFLAG_FATAL); + globalreg->fatal_condition = 1; + return; + } + + globalreg->RegisterDumpFile(this); + + _MSG("Opened decttxt log file '" + fname + "'", MSGFLAG_INFO); +} + +Dumpfile_Decttxt::~Dumpfile_Decttxt() { + Flush(); +} + +int Dumpfile_Decttxt::Flush() { + if (txtfile != NULL) + fclose(txtfile); + + string tempname = fname + ".temp"; + if ((txtfile = fopen(tempname.c_str(), "w")) == NULL) { + _MSG("Failed to open temporary nettxt file for writing: " + + string(strerror(errno)), MSGFLAG_ERROR); + return -1; + } + + fprintf(txtfile, "Kismet (http://www.kismetwireless.net)\n" + "Dedected (http://www.dedected.org)\n" + "%.24s - Kismet %s.%s.%s\n" + "-----------------\n\n", + ctime(&(globalreg->start_time)), + globalreg->version_major.c_str(), + globalreg->version_minor.c_str(), + globalreg->version_tiny.c_str()); + + map m = tracker->tracked_fp; + + int count = 1; + + for (map::iterator i = m.begin(); + i != m.end(); ++i) { + + fprintf(txtfile, "Basestation %d: RFPI %s\n", count, + i->second->rfpi.Mac2String().substr(0, 14).c_str()); + fprintf(txtfile, " First : %.24s\n", ctime(&(i->second->first_time))); + fprintf(txtfile, " Last : %.24s\n", ctime(&(i->second->last_time))); + fprintf(txtfile, " RFPI : %s\n", + i->second->rfpi.Mac2String().substr(0, 14).c_str()); + fprintf(txtfile, " Channel : %u\n", i->second->channel); + fprintf(txtfile, " Count : %u\n", i->second->num_seen); + if (i->second->min_rssi > 0) + fprintf(txtfile, " Min RSSI : %d\n", i->second->min_rssi); + if (i->second->max_rssi > 0) + fprintf(txtfile, " Max RSSI : %d\n", i->second->max_rssi); + + if (i->second->gpsdata.gps_valid) { + fprintf(txtfile, " Min Pos : Lat %f Lon %f Alt %f Spd %f\n", + i->second->gpsdata.min_lat, i->second->gpsdata.min_lon, + i->second->gpsdata.min_alt, i->second->gpsdata.min_spd); + fprintf(txtfile, " Max Pos : Lat %f Lon %f Alt %f Spd %f\n", + i->second->gpsdata.max_lat, i->second->gpsdata.max_lon, + i->second->gpsdata.max_alt, i->second->gpsdata.max_spd); + fprintf(txtfile, " Peak Pos : Lat %f Lon %f Alt %f\n", + i->second->peak_lat, i->second->peak_lon, + i->second->peak_alt); + fprintf(txtfile, " Avg Pos : AvgLat %Lf AvgLon %Lf AvgAlt %Lf\n", + i->second->gpsdata.aggregate_lat / + i->second->gpsdata.aggregate_points, + i->second->gpsdata.aggregate_lon / + i->second->gpsdata.aggregate_points, + i->second->gpsdata.aggregate_alt / + i->second->gpsdata.aggregate_points); + + } + + fprintf(txtfile, "\n"); + + count++; + } + + dumped_frames = count; + + fflush(txtfile); + fclose(txtfile); + + txtfile = NULL; + + if (rename(tempname.c_str(), fname.c_str()) < 0) { + _MSG("Failed to rename decttxt temp file " + tempname + " to " + fname + ":" + + string(strerror(errno)), MSGFLAG_ERROR); + return -1; + } + + return 1; +} diff --git a/kismet-dect-v2/dumpfile_decttxt.h b/kismet-dect-v2/dumpfile_decttxt.h new file mode 100644 index 0000000..1b5adcc --- /dev/null +++ b/kismet-dect-v2/dumpfile_decttxt.h @@ -0,0 +1,51 @@ +/* + This file is part of Kismet + + Kismet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + Kismet is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Kismet; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + DECT source v2 + (c) 2008 by Mike Kershaw +#include +#include +#include + +#include "packet_dect.h" +#include "tracker_dect.h" + +class Dumpfile_Decttxt : public Dumpfile { +public: + Dumpfile_Decttxt() { fprintf(stderr, "FATAL OOPS: Dumpfile_Decttxt()\n"); exit(1); } + Dumpfile_Decttxt(GlobalRegistry *in_globalreg, Tracker_Dect *in_tracker); + virtual ~Dumpfile_Decttxt(); + + virtual int Flush(); + +protected: + FILE *txtfile; + Tracker_Dect *tracker; +}; + +#endif + diff --git a/kismet-dect-v2/kismet_dect.cc b/kismet-dect-v2/kismet_dect.cc index 3d665f1..bde1b8c 100644 --- a/kismet-dect-v2/kismet_dect.cc +++ b/kismet-dect-v2/kismet_dect.cc @@ -49,6 +49,7 @@ #include "packetsource_dect.h" #include "tracker_dect.h" +#include "dumpfile_decttxt.h" GlobalRegistry *globalreg = NULL; @@ -193,10 +194,14 @@ int dect_register(GlobalRegistry *in_globalreg) { Dumpfile_Pcap *dectscandump = new Dumpfile_Pcap(globalreg, "scandect", DLT_EN10MB, globalreg->pcapdump, dumpfile_dect_scanfilter, NULL); + dectscandump->SetVolatile(1); Tracker_Dect *trackdect; trackdect = new Tracker_Dect(globalreg); + Dumpfile_Decttxt *dumptxt = new Dumpfile_Decttxt(globalreg, trackdect); + dumptxt->SetVolatile(1); + return 1; } diff --git a/kismet-dect-v2/tracker_dect.cc b/kismet-dect-v2/tracker_dect.cc index f9fba8a..34ec8d4 100644 --- a/kismet-dect-v2/tracker_dect.cc +++ b/kismet-dect-v2/tracker_dect.cc @@ -37,6 +37,7 @@ enum DECTFP_fields { DECTFP_gpsfixed, DECTFP_minlat, DECTFP_maxlat, DECTFP_minlon, DECTFP_maxlon, DECTFP_minalt, DECTFP_maxalt, DECTFP_minspd, DECTFP_maxspd, DECTFP_agglat, DECTFP_agglon, DECTFP_aggalt, DECTFP_aggpoints, + DECTFP_minrssi, DECTFP_maxrssi, DECTFP_peaklat, DECTFP_peaklon, DECTFP_peakalt, DECTFP_maxfield }; @@ -46,6 +47,7 @@ const char *DECTFP_fields_text[] = { "gpsfixed", "minlat", "maxlat", "minlon", "maxlon", "minalt", "maxalt", "minspd", "maxspd", "agglat", "agglon", "aggalt", "aggpoints", + "minrssi", "maxrssi", "peaklat", "peaklon", "peakalt", NULL }; @@ -128,6 +130,21 @@ int Protocol_DECTFP(PROTO_PARMS) { case DECTFP_aggpoints: osstr << fp->gpsdata.aggregate_points; break; + case DECTFP_minrssi: + osstr << fp->min_rssi; + break; + case DECTFP_maxrssi: + osstr << fp->max_rssi; + break; + case DECTFP_peaklat: + osstr << fp->peak_lat; + break; + case DECTFP_peaklon: + osstr << fp->peak_lon; + break; + case DECTFP_peakalt: + osstr << fp->peak_alt; + break; } out_string += osstr.str() + " "; @@ -221,10 +238,21 @@ int Tracker_Dect::chain_handler(kis_packet *in_pack) { fp->num_seen++; fp->last_rssi = di->sdata.RSSI; - if (gpsinfo != NULL) { + if (gpsinfo != NULL && gpsinfo->gps_fix) { fp->gpsdata += gpsinfo; + + if (fp->last_rssi > fp->max_rssi) { + fp->peak_lat = gpsinfo->lat; + fp->peak_lon = gpsinfo->lon; + fp->peak_alt = gpsinfo->alt; + } } + if (fp->last_rssi < fp->min_rssi) + fp->min_rssi = fp->last_rssi; + if (fp->last_rssi > fp->max_rssi) + fp->max_rssi = fp->last_rssi; + fp->dirty = 1; return 0; diff --git a/kismet-dect-v2/tracker_dect.h b/kismet-dect-v2/tracker_dect.h index 17ee724..928d28f 100644 --- a/kismet-dect-v2/tracker_dect.h +++ b/kismet-dect-v2/tracker_dect.h @@ -36,20 +36,27 @@ class dect_tracked_fp { public: dect_tracked_fp() { first_time = last_time = 0; - last_rssi = 0; num_seen = 0; channel = 0; dirty = 0; + + min_rssi = 999; + max_rssi = -999; + last_rssi = 0; + + peak_lat = peak_lon = peak_alt = 0; } mac_addr rfpi; time_t first_time, last_time; - unsigned int last_rssi; unsigned int num_seen; unsigned int channel; unsigned int dirty; kis_gps_data gpsdata; + + int min_rssi, max_rssi, last_rssi; + double peak_lat, peak_lon, peak_alt; }; class Tracker_Dect { @@ -69,6 +76,7 @@ protected: int DECTFP_ref; int timer_ref; + friend class Dumpfile_Decttxt; }; #endif -- cgit v1.2.3