new: new wifi.ap.ttl and wifi.sta.ttl parameters

This commit is contained in:
evilsocket 2019-09-07 17:53:59 +02:00
commit 32e1bf8a7b
No known key found for this signature in database
GPG key ID: 82E42E7F3B34C97E
2 changed files with 24 additions and 5 deletions

View file

@ -32,6 +32,8 @@ type WiFiModule struct {
region string
txPower int
minRSSI int
apTTL int
staTTL int
channel int
hopPeriod time.Duration
hopChanges chan bool
@ -63,6 +65,8 @@ func NewWiFiModule(s *session.Session) *WiFiModule {
SessionModule: session.NewSessionModule("wifi", s),
iface: s.Interface,
minRSSI: -200,
apTTL: 300,
staTTL: 300,
channel: 0,
stickChan: 0,
hopPeriod: 250 * time.Millisecond,
@ -185,6 +189,14 @@ func NewWiFiModule(s *session.Session) *WiFiModule {
mod.AddHandler(assoc)
mod.AddParam(session.NewIntParameter("wifi.ap.ttl",
"300",
"Seconds of inactivity for an access points to be considered not in range anymore."))
mod.AddParam(session.NewIntParameter("wifi.sta.ttl",
"300",
"Seconds of inactivity for a client station to be considered not in range or not connected to its access point anymore."))
mod.AddParam(session.NewStringParameter("wifi.region",
"",
"",
@ -354,6 +366,12 @@ func (mod *WiFiModule) Configure() error {
var hopPeriod int
var err error
if err, mod.apTTL = mod.IntParam("wifi.ap.ttl"); err != nil {
return err
} else if err, mod.staTTL = mod.IntParam("wifi.sta.ttl"); err != nil {
return err
}
if err, mod.region = mod.StringParam("wifi.region"); err != nil {
return err
} else if err, mod.txPower = mod.IntParam("wifi.txpower"); err != nil {

View file

@ -11,18 +11,19 @@ import (
"github.com/google/gopacket/layers"
)
var maxStationTTL = 5 * time.Minute
func (mod *WiFiModule) stationPruner() {
mod.reads.Add(1)
defer mod.reads.Done()
mod.Debug("wifi stations pruner started.")
maxApTTL := time.Duration(mod.apTTL) * time.Second
maxStaTTL := time.Duration(mod.staTTL) * time.Second
mod.Debug("wifi stations pruner started (ap.ttl:%v sta.ttl:%v).", maxApTTL, maxStaTTL)
for mod.Running() {
// loop every AP
for _, ap := range mod.Session.WiFi.List() {
sinceLastSeen := time.Since(ap.LastSeen)
if sinceLastSeen > maxStationTTL {
if sinceLastSeen > maxApTTL {
mod.Debug("station %s not seen in %s, removing.", ap.BSSID(), sinceLastSeen)
mod.Session.WiFi.Remove(ap.BSSID())
continue
@ -30,7 +31,7 @@ func (mod *WiFiModule) stationPruner() {
// loop every AP client
for _, c := range ap.Clients() {
sinceLastSeen := time.Since(c.LastSeen)
if sinceLastSeen > maxStationTTL {
if sinceLastSeen > maxStaTTL {
mod.Debug("client %s of station %s not seen in %s, removing.", c.String(), ap.BSSID(), sinceLastSeen)
ap.RemoveClient(c.BSSID())