move wifictld structs from data to capture

This commit is contained in:
Martin/Geno 2019-03-08 05:57:00 +01:00
parent 16fdeb85d4
commit 39ff9a43b0
No known key found for this signature in database
GPG Key ID: 9D7D3C6BFF600C6A
17 changed files with 67 additions and 82 deletions

View File

@ -3,20 +3,19 @@ package capture
import ( import (
"net" "net"
"dev.sum7.eu/genofire/wifictld-analyzer/data"
"github.com/bdlm/log" "github.com/bdlm/log"
) )
//Collector for capture //Collector for capture
type Collector struct { type Collector struct {
connections map[string]*net.UDPConn connections map[string]*net.UDPConn
handler data.Handler handler Handler
queue chan *Packet queue chan *Packet
stop chan interface{} stop chan interface{}
} }
// NewCollector creates a Collector struct // NewCollector creates a Collector struct
func NewCollector(handler data.Handler, ifaces []*IFaceConfig) *Collector { func NewCollector(handler Handler, ifaces []*IFaceConfig) *Collector {
coll := &Collector{ coll := &Collector{
handler: handler, handler: handler,
@ -96,7 +95,7 @@ type Packet struct {
func (coll *Collector) parser() { func (coll *Collector) parser() {
for obj := range coll.queue { for obj := range coll.queue {
msg, err := data.NewSocketMSG(obj.Raw) msg, err := NewSocketMSG(obj.Raw)
if err != nil { if err != nil {
log.Warnf("unable to unmarshal request from %s: %s", obj.Address.String(), err) log.Warnf("unable to unmarshal request from %s: %s", obj.Address.String(), err)
continue continue
@ -114,7 +113,7 @@ func (coll *Collector) parser() {
} }
// SendTo a specifical address // SendTo a specifical address
func (coll *Collector) SendTo(addr *net.UDPAddr, msg *data.SocketMSG) { func (coll *Collector) SendTo(addr *net.UDPAddr, msg *SocketMSG) {
log.Debugf("send[%s]: %s", addr, msg.String()) log.Debugf("send[%s]: %s", addr, msg.String())
data, err := msg.Marshal() data, err := msg.Marshal()
if err != nil { if err != nil {
@ -132,7 +131,7 @@ func (coll *Collector) SendTo(addr *net.UDPAddr, msg *data.SocketMSG) {
} }
// Send to every connection to default address // Send to every connection to default address
func (coll *Collector) Send(msg *data.SocketMSG) { func (coll *Collector) Send(msg *SocketMSG) {
log.Debugf("send: %s", msg.String()) log.Debugf("send: %s", msg.String())
data, err := msg.Marshal() data, err := msg.Marshal()
if err != nil { if err != nil {

View File

@ -1,4 +1,4 @@
package data package capture
import "net" import "net"

View File

@ -1,4 +1,4 @@
package data package capture
import ( import (
"encoding/binary" "encoding/binary"
@ -6,6 +6,8 @@ import (
"time" "time"
"github.com/bdlm/log" "github.com/bdlm/log"
"dev.sum7.eu/genofire/wifictld-analyzer/data"
) )
var DEBUG = false var DEBUG = false
@ -22,7 +24,6 @@ const (
func (a SocketMSGType) Is(b SocketMSGType) bool { func (a SocketMSGType) Is(b SocketMSGType) bool {
if DEBUG { if DEBUG {
log.Debugf("SocketType: %x & %x = %x -> %t", a, b, (a & b), (a&b) > 0) log.Debugf("SocketType: %x & %x = %x -> %t", a, b, (a & b), (a&b) > 0)
} }
return (a & b) > 0 return (a & b) > 0
@ -99,7 +100,7 @@ func (msg *SocketMSG) Unmarshal(obj []byte) error {
if msg.Types.Is(SocketMSGTypeClient) { if msg.Types.Is(SocketMSGTypeClient) {
msg.Client = &WifiClient{ msg.Client = &WifiClient{
Addr: HardwareAddr{HardwareAddr: obj[pos:(pos + 6)]}, Addr: data.HardwareAddr{HardwareAddr: obj[pos:(pos + 6)]},
Time: time.Unix(int64(binary.BigEndian.Uint32(obj[(pos+6):(pos+10)])), 0), Time: time.Unix(int64(binary.BigEndian.Uint32(obj[(pos+6):(pos+10)])), 0),
TryProbe: binary.BigEndian.Uint16(obj[(pos + 10):(pos + 12)]), TryProbe: binary.BigEndian.Uint16(obj[(pos + 10):(pos + 12)]),
TryAuth: binary.BigEndian.Uint16(obj[(pos + 12):(pos + 14)]), TryAuth: binary.BigEndian.Uint16(obj[(pos + 12):(pos + 14)]),

View File

@ -1,4 +1,4 @@
package data package capture
import ( import (
"encoding/hex" "encoding/hex"

20
capture/wifi_client.go Normal file
View File

@ -0,0 +1,20 @@
package capture
import (
"time"
"dev.sum7.eu/genofire/wifictld-analyzer/data"
)
// WifiClient datatype of wifictld
type WifiClient struct {
Addr data.HardwareAddr `json:"addr"`
Time time.Time `json:"time"`
TryProbe uint16 `json:"try_probe"`
TryAuth uint16 `json:"try_auth"`
Connected bool `json:"connected"`
Authed bool `json:"authed"`
FreqHighest uint16 `json:"freq_highest"`
SignalLowFreq int16 `json:"signal_low_freq"`
SignalHighFreq int16 `json:"signal_high_freq"`
}

View File

@ -11,13 +11,18 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"dev.sum7.eu/genofire/wifictld-analyzer/capture" "dev.sum7.eu/genofire/wifictld-analyzer/capture"
"dev.sum7.eu/genofire/wifictld-analyzer/config"
"dev.sum7.eu/genofire/wifictld-analyzer/controller" "dev.sum7.eu/genofire/wifictld-analyzer/controller"
"dev.sum7.eu/genofire/wifictld-analyzer/data"
"dev.sum7.eu/genofire/wifictld-analyzer/database" "dev.sum7.eu/genofire/wifictld-analyzer/database"
"dev.sum7.eu/genofire/wifictld-analyzer/web" "dev.sum7.eu/genofire/wifictld-analyzer/web"
) )
type ControllerConfig struct {
Database string `toml:"database"`
Answer bool `toml:"answer"`
Webserver *web.Config `toml:"webserver"`
Interfaces []*capture.IFaceConfig `toml:"interfaces"`
}
// queryCmd represents the query command // queryCmd represents the query command
var controllerCmd = &cobra.Command{ var controllerCmd = &cobra.Command{
Use: "controller <interfaces>", Use: "controller <interfaces>",
@ -25,35 +30,35 @@ var controllerCmd = &cobra.Command{
Example: `analyzer controller "/etc/wifictld.conf"`, Example: `analyzer controller "/etc/wifictld.conf"`,
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
configObj := &config.Config{} config := &ControllerConfig{}
file.ReadTOML(args[0], configObj) file.ReadTOML(args[0], config)
db := database.NewDB(configObj.StatePath) db := database.NewDB(config.Database)
ctr := controller.NewController(db) ctr := controller.NewController(db)
defer ctr.Close() defer ctr.Close()
var handlers []data.Handler var handlers []capture.Handler
if configObj.Webserver.Enable { if config.Webserver.Enable {
log.Infof("starting webserver on %s", configObj.Webserver.Bind) log.Infof("starting webserver on %s", config.Webserver.Bind)
srv := web.New(configObj.Webserver) srv := web.New(config.Webserver)
go srv.Start() go srv.Start()
handlers = append(handlers, srv.Handler) handlers = append(handlers, srv.Handler)
defer srv.Close() defer srv.Close()
} }
coll := capture.NewCollector(func(addr *net.UDPAddr, msg *data.SocketMSG) (*data.SocketMSG, error) { coll := capture.NewCollector(func(addr *net.UDPAddr, msg *capture.SocketMSG) (*capture.SocketMSG, error) {
for _, a := range handlers { for _, a := range handlers {
a(addr, msg) a(addr, msg)
} }
if !configObj.Answer { if !config.Answer {
ctr.Handler(addr, msg) ctr.Handler(addr, msg)
return nil, nil return nil, nil
} }
return ctr.Handler(addr, msg) return ctr.Handler(addr, msg)
}, configObj.Interfaces) }, config.Interfaces)
defer coll.Close() defer coll.Close()
ctr.Send = coll.Send ctr.Send = coll.Send

View File

@ -11,7 +11,6 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"dev.sum7.eu/genofire/wifictld-analyzer/capture" "dev.sum7.eu/genofire/wifictld-analyzer/capture"
"dev.sum7.eu/genofire/wifictld-analyzer/data"
) )
var ( var (
@ -40,9 +39,9 @@ var dumpCmd = &cobra.Command{
ifacesConfigs = append(ifacesConfigs, ifaceConfig) ifacesConfigs = append(ifacesConfigs, ifaceConfig)
} }
data.DEBUG = debug capture.DEBUG = debug
coll := capture.NewCollector(func(addr *net.UDPAddr, msg *data.SocketMSG) (*data.SocketMSG, error) { coll := capture.NewCollector(func(addr *net.UDPAddr, msg *capture.SocketMSG) (*capture.SocketMSG, error) {
log.Infof("recv[%s]: %s", addr, msg.String()) log.Infof("recv[%s]: %s", addr, msg.String())
return nil, nil return nil, nil
}, ifacesConfigs) }, ifacesConfigs)

View File

@ -1,13 +0,0 @@
package config
import (
"dev.sum7.eu/genofire/wifictld-analyzer/capture"
"dev.sum7.eu/genofire/wifictld-analyzer/web"
)
type Config struct {
StatePath string `toml:"state_path"`
Answer bool `toml:"answer"`
Webserver *web.Config `toml:"webserver"`
Interfaces []*capture.IFaceConfig `toml:"interfaces"`
}

View File

@ -1 +0,0 @@
package config

View File

@ -1,4 +1,4 @@
state_path = "/tmp/wifictld.json" database = "/tmp/wifictld.json"
answer = false answer = false

View File

@ -5,20 +5,20 @@ import (
// "github.com/bdlm/log" // "github.com/bdlm/log"
"dev.sum7.eu/genofire/wifictld-analyzer/data" "dev.sum7.eu/genofire/wifictld-analyzer/capture"
) )
func (c *Controller) Handler(addr *net.UDPAddr, msg *data.SocketMSG) (*data.SocketMSG, error) { func (c *Controller) Handler(addr *net.UDPAddr, msg *capture.SocketMSG) (*capture.SocketMSG, error) {
ignore := false ignore := false
if msg.Types.Is(data.SocketMSGTypeClient) && msg.Client != nil { if msg.Types.Is(capture.SocketMSGTypeClient) && msg.Client != nil {
ignore = c.db.LearnClient(addr.IP, msg.Client) ignore = c.db.LearnClient(addr.IP, msg.Client)
} }
if !msg.Types.Is(data.SocketMSGTypeRequest) { if !msg.Types.Is(capture.SocketMSGTypeRequest) {
return nil, nil return nil, nil
} }
msg = &data.SocketMSG{ msg = &capture.SocketMSG{
Types: (data.SocketMSGTypeResponse | data.SocketMSGTypeClient), Types: (capture.SocketMSGTypeResponse | capture.SocketMSGTypeClient),
Client: c.db.GetClient(msg.Client.Addr), Client: c.db.GetClient(msg.Client.Addr),
} }

View File

@ -6,13 +6,13 @@ import (
"github.com/bdlm/log" "github.com/bdlm/log"
"dev.sum7.eu/genofire/wifictld-analyzer/data" "dev.sum7.eu/genofire/wifictld-analyzer/capture"
"dev.sum7.eu/genofire/wifictld-analyzer/database" "dev.sum7.eu/genofire/wifictld-analyzer/database"
) )
type Controller struct { type Controller struct {
SendTo func(addr *net.UDPAddr, msg *data.SocketMSG) SendTo func(addr *net.UDPAddr, msg *capture.SocketMSG)
Send func(msg *data.SocketMSG) Send func(msg *capture.SocketMSG)
db *database.DB db *database.DB
ticker *time.Ticker ticker *time.Ticker
} }

1
data/hwaddr_test.go Normal file
View File

@ -0,0 +1 @@
package data

View File

@ -1,27 +0,0 @@
package data
import "time"
const (
// default multicast group used by announced
MulticastAddressDefault = "ff02::31f1"
// default udp port used by announced
Port = 1000
// maximum receivable size
MaxDataGramSize = 256
)
// WifiClient datatype of wifictld
type WifiClient struct {
Addr HardwareAddr `json:"addr"`
Time time.Time `json:"time"`
TryProbe uint16 `json:"try_probe"`
TryAuth uint16 `json:"try_auth"`
Connected bool `json:"connected"`
Authed bool `json:"authed"`
FreqHighest uint16 `json:"freq_highest"`
SignalLowFreq int16 `json:"signal_low_freq"`
SignalHighFreq int16 `json:"signal_high_freq"`
}

View File

@ -7,6 +7,7 @@ import (
// "github.com/bdlm/log" // "github.com/bdlm/log"
"github.com/FreifunkBremen/yanic/lib/jsontime" "github.com/FreifunkBremen/yanic/lib/jsontime"
"dev.sum7.eu/genofire/wifictld-analyzer/capture"
"dev.sum7.eu/genofire/wifictld-analyzer/data" "dev.sum7.eu/genofire/wifictld-analyzer/data"
) )
@ -24,7 +25,7 @@ type Client struct {
Lastseen jsontime.Time `json:"lastseen"` Lastseen jsontime.Time `json:"lastseen"`
} }
func (db *DB) LearnClient(apIP net.IP, clientWifictl *data.WifiClient) bool { func (db *DB) LearnClient(apIP net.IP, clientWifictl *capture.WifiClient) bool {
ret := false ret := false
// learn ap // learn ap
@ -70,9 +71,9 @@ func (db *DB) LearnClient(apIP net.IP, clientWifictl *data.WifiClient) bool {
return ret return ret
} }
func (db *DB) GetClient(addr data.HardwareAddr) *data.WifiClient { func (db *DB) GetClient(addr data.HardwareAddr) *capture.WifiClient {
client, ok := db.Clients[addr.String()] client, ok := db.Clients[addr.String()]
wClient := &data.WifiClient{ wClient := &capture.WifiClient{
Addr: addr, Addr: addr,
Time: time.Now(), Time: time.Now(),
} }

View File

@ -9,7 +9,7 @@ import (
"dev.sum7.eu/genofire/golang-lib/websocket" "dev.sum7.eu/genofire/golang-lib/websocket"
"dev.sum7.eu/genofire/wifictld-analyzer/data" "dev.sum7.eu/genofire/wifictld-analyzer/capture"
) )
type Server struct { type Server struct {
@ -31,7 +31,7 @@ func New(config *Config) *Server {
} }
} }
func (srv *Server) Handler(addr *net.UDPAddr, msg *data.SocketMSG) (*data.SocketMSG, error) { func (srv *Server) Handler(addr *net.UDPAddr, msg *capture.SocketMSG) (*capture.SocketMSG, error) {
srv.ws.SendAll(&websocket.Message{ srv.ws.SendAll(&websocket.Message{
Subject: "wifictld_pkg", Subject: "wifictld_pkg",
Body: map[string]interface{}{ Body: map[string]interface{}{