func (cl *Client) Networks() (nets Networks, err error) {
	data, err := cl.conn.SendCommand(CmdListNetworks)
	if err != nil {
		return nil, err
	}
	nets, err = parseNetwork([]byte(data))
	if err != nil {
		return nil, err
	}
	for i := range nets {
		nets[i].Known = true
		(&nets[i]).populateAttrs(cl)
	}
	return nets, nil
}
Networks lists the known networks
package wireless
import (
	"errors"
	"io"
	"strconv"
	"strings"
	"time"
)
type WPAConn interface {
	SendCommand(...string) (string, error)
	SendCommandBool(...string) error
	SendCommandInt(...string) (int, error)
	io.Closer
	Subscribe(...string) *Subscription
}
type Client struct {
	conn WPAConn
}
func NewClient(iface string) (c *Client, err error) {
	c = new(Client)
	c.conn, err = Dial(iface)
	if err != nil {
		return
	}
	return
}
func NewClientFromConn(conn WPAConn) (c *Client) {
	c.conn = conn
	return
}
func (cl *Client) Close() {
	cl.conn.Close()
}
func (cl *Client) Conn() *Conn {
	return cl.conn.(*Conn)
}
func (cl *Client) Subscribe(topics ...string) *Subscription {
	return cl.conn.Subscribe(topics...)
}
func (cl *Client) Status() (State, error) {
	data, err := cl.conn.SendCommand(CmdStatus)
	if err != nil {
		return State{}, err
	}
	s := NewState(data)
	return s, nil
}
func (cl *Client) Scan() (nets APs, err error) {
	err = cl.conn.SendCommandBool(CmdScan)
	if err != nil {
		return
	}
	results := cl.conn.Subscribe(EventScanResults)
	failed := cl.conn.Subscribe(EventScanFailed)
	func() {
		for {
			select {
			case <-failed.Next():
				err = ErrScanFailed
				return
			case <-results.Next():
				return
			case <-time.NewTimer(time.Second * 2).C:
				return
			}
		}
	}()
	scanned, err := cl.conn.SendCommand(CmdScanResults)
	if err != nil {
		return
	}
	return parseAP([]byte(scanned))
}