diff --git a/modules/graph/create.go b/modules/graph/create.go index a1dfceb5..f4779df8 100644 --- a/modules/graph/create.go +++ b/modules/graph/create.go @@ -55,13 +55,13 @@ func (mod *Module) createDot11ApGraph(ap *network.AccessPoint) (*Node, bool, err return node, isNew, nil } -func (mod *Module) createDot11SSIDGraph(hw string, ssid string) (*Node, bool, error) { - node, err := mod.db.FindNode(SSID, hw) +func (mod *Module) createDot11SSIDGraph(hex string, ssid string) (*Node, bool, error) { + node, err := mod.db.FindNode(SSID, hex) isNew := node == nil if err != nil { return nil, false, err } else if isNew { - if node, err = mod.db.CreateNode(SSID, hw, ssid, ""); err != nil { + if node, err = mod.db.CreateNode(SSID, hex, ssid, ""); err != nil { return nil, false, err } } else if err = mod.db.UpdateNode(node); err != nil { @@ -117,7 +117,7 @@ func (mod *Module) createDot11Graph(ap *network.AccessPoint, station *network.St } func (mod *Module) createDot11ProbeGraph(ssid string, station *network.Station) (*Node, bool, *Node, bool, error) { - apNode, apIsNew, err := mod.createDot11SSIDGraph(station.HwAddress+fmt.Sprintf(":PROBE:%x", ssid), ssid) + ssidNode, ssidIsNew, err := mod.createDot11SSIDGraph(fmt.Sprintf("%x", ssid), ssid) if err != nil { return nil, false, nil, false, err } @@ -128,15 +128,23 @@ func (mod *Module) createDot11ProbeGraph(ssid string, station *network.Station) } // create relations if needed - if probes_for, err := mod.db.FindLastRecentEdgeOfType(staNode, apNode, ProbesFor, edgeStaleTime); err != nil { + if probes_for, err := mod.db.FindLastRecentEdgeOfType(staNode, ssidNode, ProbesFor, edgeStaleTime); err != nil { return nil, false, nil, false, err } else if probes_for == nil { - if probes_for, err = mod.db.CreateEdge(staNode, apNode, ProbesFor); err != nil { + if probes_for, err = mod.db.CreateEdge(staNode, ssidNode, ProbesFor); err != nil { return nil, false, nil, false, err } } - return apNode, apIsNew, staNode, staIsNew, nil + if probed_by, err := mod.db.FindLastRecentEdgeOfType(ssidNode, staNode, ProbedBy, edgeStaleTime); err != nil { + return nil, false, nil, false, err + } else if probed_by == nil { + if probed_by, err = mod.db.CreateEdge(ssidNode, staNode, ProbedBy); err != nil { + return nil, false, nil, false, err + } + } + + return ssidNode, ssidIsNew, staNode, staIsNew, nil } func (mod *Module) createBLEServerGraph(dev *network.BLEDevice) (*Node, bool, error) { diff --git a/modules/graph/edge.go b/modules/graph/edge.go index cadd69a3..4c6eff93 100644 --- a/modules/graph/edge.go +++ b/modules/graph/edge.go @@ -11,6 +11,7 @@ type EdgeType string const ( Is EdgeType = "is" ProbesFor EdgeType = "probes_for" + ProbedBy EdgeType = "probed_by" ConnectsTo EdgeType = "connects_to" Manages EdgeType = "manages" ) diff --git a/modules/graph/graph.go b/modules/graph/graph.go index 43269c3f..1a32e017 100644 --- a/modules/graph/graph.go +++ b/modules/graph/graph.go @@ -170,7 +170,7 @@ func (g *Graph) Dot(filter, layout, name string, disconnected bool) (string, int if err := g.Traverse(filter, func(node *Node) { include := false - if disconnected || node.Type == SSID { // we don't create backwards edges for SSID + if disconnected { include = true } else { include = g.edges.IsConnected(node.String()) @@ -265,7 +265,7 @@ func (g *Graph) JSON(filter string, disconnected bool) (string, int, int, error) if err := g.Traverse(filter, func(node *Node) { include := false - if disconnected || node.Type == SSID { // we don't create backwards edges for SSID + if disconnected { include = true } else { include = g.edges.IsConnected(node.String())