Documentation

Overview

Package network contains network specific code ... lol.

Index

Constants

View Source
const (
	MonitorModeAddress = "0.0.0.0"
	BroadcastSuffix    = ".255"
	BroadcastMac       = "ff:ff:ff:ff:ff:ff"
	IPv4MulticastStart = "01:00:5e:00:00:00"
	IPv4MulticastEnd   = "01:00:5e:7f:ff:ff"
)
View Source
const BLEMacValidator = "([a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2})"
View Source
const LANDefaultttl = 10
View Source
const NO_CHANNEL = -1

Variables

View Source
var (
	BroadcastHw        = []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
	IPv4Validator      = regexp.MustCompile(`^[0-9\.]+/?\d*$`)
	IPv4RangeValidator = regexp.MustCompile(`^[0-9\.\-]+/?\d*$`)
	MACValidator       = regexp.MustCompile(`(?i)^[a-f0-9]{1,2}:[a-f0-9]{1,2}:[a-f0-9]{1,2}:[a-f0-9]{1,2}:[a-f0-9]{1,2}:[a-f0-9]{1,2}$`)
)
View Source
var ArpCmd = "ip"
View Source
var ArpCmdOpts = []string{"neigh"}
View Source
var ArpTableParser = regexp.MustCompile(`^([\d\.]+)\s+dev\s+(\w+)\s+\w+\s+([a-f0-9:]{17})\s+\w+$`)
View Source
var ArpTableTokenIndex = []int{1, 3, 2}
View Source
var ArpTableTokens = 4
View Source
var Debug = func(format string, args ...interface{}) {

}
View Source
var ErrNoGateway = errors.New("Could not detect gateway.")
View Source
var ErrNoIfaces = errors.New("No active interfaces found.")
View Source
var IPv4RouteCmd = "ip"
View Source
var IPv4RouteCmdOpts = []string{"route"}
View Source
var IPv4RouteParser = regexp.MustCompile(`^(default|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\svia\s([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\sdev\s(\S+).*$`)

only matches gateway lines

View Source
var IPv4RouteTokens = 4
View Source
var WiFiFreqParser = regexp.MustCompile(`^\s+Channel.([0-9]+)\s+:\s+([0-9\.]+)\s+GHz.*$`)

Functions

func ActivateInterface

func ActivateInterface(name string) error

func ArpInverseLookup

func ArpInverseLookup(iface string, mac string, refresh bool) (string, error)

func ArpLookup

func ArpLookup(iface string, address string, refresh bool) (string, error)

func ArpParsed

func ArpParsed() bool

func ColorRSSI

func ColorRSSI(n int) string

func Dot11Chan2Freq

func Dot11Chan2Freq(channel int) int

func Dot11Freq2Chan

func Dot11Freq2Chan(freq int) int

func GetInterfaceChannel

func GetInterfaceChannel(iface string) int

func GetServiceByPort

func GetServiceByPort(port int, proto string) string

func GetSupportedFrequencies

func GetSupportedFrequencies(iface string) ([]int, error)

func HIDAddress

func HIDAddress(address []byte) string

func IsBroadcastMac

func IsBroadcastMac(mac net.HardwareAddr) bool

func IsZeroMac

func IsZeroMac(mac net.HardwareAddr) bool

func ManufLookup

func ManufLookup(mac string) string

func NormalizeHIDAddress

func NormalizeHIDAddress(address string) string

func NormalizeMac

func NormalizeMac(mac string) string

func ParseMACs

func ParseMACs(targets string) (macs []net.HardwareAddr, err error)

func ParseTargets

func ParseTargets(targets string, aliasMap *data.UnsortedKV) (ips []net.IP, macs []net.HardwareAddr, err error)

func SetInterfaceChannel

func SetInterfaceChannel(iface string, channel int) error

func SetInterfaceCurrentChannel

func SetInterfaceCurrentChannel(iface string, channel int)

func SetInterfaceTxPower

func SetInterfaceTxPower(name string, txpower int) error

func SetWiFiRegion

func SetWiFiRegion(region string) error

Types

type APLostCallback

type APLostCallback func(ap *AccessPoint)

type APNewCallback

type APNewCallback func(ap *AccessPoint)

type AccessPoint

type AccessPoint struct {
	*Station
	sync.Mutex
	// contains filtered or unexported fields
}

func NewAccessPoint

func NewAccessPoint(essid, bssid string, frequency int, rssi int8, aliases *data.UnsortedKV) *AccessPoint

func (*AccessPoint) AddClientIfNew

func (ap *AccessPoint) AddClientIfNew(bssid string, frequency int, rssi int8) (*Station, bool)

func (*AccessPoint) Clients

func (ap *AccessPoint) Clients() (list []*Station)

func (*AccessPoint) EachClient

func (ap *AccessPoint) EachClient(cb func(mac string, station *Station))

func (*AccessPoint) Get

func (ap *AccessPoint) Get(bssid string) (*Station, bool)

func (*AccessPoint) HasHandshakes

func (ap *AccessPoint) HasHandshakes() bool

func (*AccessPoint) HasKeyMaterial

func (ap *AccessPoint) HasKeyMaterial() bool

func (*AccessPoint) HasPMKID

func (ap *AccessPoint) HasPMKID() bool

func (*AccessPoint) MarshalJSON

func (ap *AccessPoint) MarshalJSON() ([]byte, error)

func (*AccessPoint) NumClients

func (ap *AccessPoint) NumClients() int

func (*AccessPoint) NumHandshakes

func (ap *AccessPoint) NumHandshakes() int

func (*AccessPoint) RemoveClient

func (ap *AccessPoint) RemoveClient(mac string)

func (*AccessPoint) WithKeyMaterial

func (ap *AccessPoint) WithKeyMaterial(state bool)

type ArpTable

type ArpTable map[string]string

func ArpUpdate

func ArpUpdate(iface string) (ArpTable, error)

type BLE

type BLE struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewBLE

func NewBLE(aliases *data.UnsortedKV, newcb BLEDevNewCallback, lostcb BLEDevLostCallback) *BLE

func (*BLE) AddIfNew

func (b *BLE) AddIfNew(id string, p gatt.Peripheral, a *gatt.Advertisement, rssi int) *BLEDevice

func (*BLE) Clear

func (b *BLE) Clear()

func (*BLE) Devices

func (b *BLE) Devices() (devices []*BLEDevice)

func (*BLE) EachDevice

func (b *BLE) EachDevice(cb func(mac string, d *BLEDevice))

func (*BLE) Get

func (b *BLE) Get(id string) (dev *BLEDevice, found bool)

func (*BLE) MarshalJSON

func (b *BLE) MarshalJSON() ([]byte, error)

func (*BLE) Remove

func (b *BLE) Remove(id string)

type BLECharacteristic

type BLECharacteristic struct {
	UUID       string      `json:"uuid"`
	Name       string      `json:"name"`
	Handle     uint16      `json:"handle"`
	Properties []string    `json:"properties"`
	Data       interface{} `json:"data"`
}

type BLEDevLostCallback

type BLEDevLostCallback func(dev *BLEDevice)

type BLEDevNewCallback

type BLEDevNewCallback func(dev *BLEDevice)

type BLEDevice

type BLEDevice struct {
	Alias         string
	LastSeen      time.Time
	DeviceName    string
	Vendor        string
	RSSI          int
	Device        gatt.Peripheral
	Advertisement *gatt.Advertisement
	Services      []BLEService
}

func NewBLEDevice

func NewBLEDevice(p gatt.Peripheral, a *gatt.Advertisement, rssi int) *BLEDevice

func (*BLEDevice) MarshalJSON

func (d *BLEDevice) MarshalJSON() ([]byte, error)

func (*BLEDevice) Name

func (d *BLEDevice) Name() string

type BLEService

type BLEService struct {
	UUID            string              `json:"uuid"`
	Name            string              `json:"name"`
	Handle          uint16              `json:"handle"`
	EndHandle       uint16              `json:"end_handle"`
	Characteristics []BLECharacteristic `json:"characteristics"`
}

type DebugFunc

type DebugFunc func(format string, args ...interface{})

type Endpoint

type Endpoint struct {
	Index            int                    `json:"-"`
	IP               net.IP                 `json:"-"`
	Net              *net.IPNet             `json:"-"`
	IPv6             net.IP                 `json:"-"`
	HW               net.HardwareAddr       `json:"-"`
	IpAddress        string                 `json:"ipv4"`
	Ip6Address       string                 `json:"ipv6"`
	SubnetBits       uint32                 `json:"-"`
	IpAddressUint32  uint32                 `json:"-"`
	HwAddress        string                 `json:"mac"`
	Hostname         string                 `json:"hostname"`
	Alias            string                 `json:"alias"`
	Vendor           string                 `json:"vendor"`
	ResolvedCallback OnHostResolvedCallback `json:"-"`
	FirstSeen        time.Time              `json:"first_seen"`
	LastSeen         time.Time              `json:"last_seen"`
	Meta             *Meta                  `json:"meta"`
}

func FindGateway

func FindGateway(iface *Endpoint) (*Endpoint, error)

func FindInterface

func FindInterface(name string) (*Endpoint, error)

func GatewayProvidedByUser

func GatewayProvidedByUser(iface *Endpoint, gateway string) (*Endpoint, error)

func IPv4RouteIsGateway

func IPv4RouteIsGateway(ifname string, tokens []string, f func(gateway string) (*Endpoint, error)) (*Endpoint, error)

func NewEndpoint

func NewEndpoint(ip, mac string) *Endpoint

func NewEndpointNoResolve

func NewEndpointNoResolve(ip, mac, name string, bits uint32) *Endpoint

func NewEndpointWithAlias

func NewEndpointWithAlias(ip, mac, alias string) *Endpoint

func ParseEndpoints

func ParseEndpoints(targets string, lan *LAN) ([]*Endpoint, error)

func (*Endpoint) CIDR

func (t *Endpoint) CIDR() string

func (*Endpoint) IsMonitor

func (t *Endpoint) IsMonitor() bool

func (*Endpoint) Name

func (t *Endpoint) Name() string

func (*Endpoint) OnMeta

func (t *Endpoint) OnMeta(meta map[string]string)

func (*Endpoint) SetBits

func (t *Endpoint) SetBits(bits uint32)

func (*Endpoint) SetIP

func (t *Endpoint) SetIP(ip string)

func (*Endpoint) SetIPv6

func (t *Endpoint) SetIPv6(netw string)

func (*Endpoint) SetNetwork

func (t *Endpoint) SetNetwork(netw string)

func (*Endpoint) String

func (t *Endpoint) String() string

type EndpointLostCallback

type EndpointLostCallback func(e *Endpoint)

type EndpointNewCallback

type EndpointNewCallback func(e *Endpoint)

type HID

type HID struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewHID

func NewHID(aliases *data.UnsortedKV, newcb HIDDevNewCallback, lostcb HIDDevLostCallback) *HID

func (*HID) AddIfNew

func (b *HID) AddIfNew(address []byte, channel int, payload []byte) (bool, *HIDDevice)

func (*HID) Clear

func (b *HID) Clear()

func (*HID) Devices

func (b *HID) Devices() (devices []*HIDDevice)

func (*HID) EachDevice

func (b *HID) EachDevice(cb func(mac string, d *HIDDevice))

func (*HID) Get

func (b *HID) Get(id string) (dev *HIDDevice, found bool)

func (*HID) MarshalJSON

func (h *HID) MarshalJSON() ([]byte, error)

func (*HID) Remove

func (b *HID) Remove(id string)

type HIDDevLostCallback

type HIDDevLostCallback func(dev *HIDDevice)

type HIDDevNewCallback

type HIDDevNewCallback func(dev *HIDDevice)

type HIDDevice

type HIDDevice struct {
	sync.Mutex
	LastSeen   time.Time
	Type       HIDType
	Alias      string
	Address    string
	RawAddress []byte
	// contains filtered or unexported fields
}

func NewHIDDevice

func NewHIDDevice(address []byte, channel int, payload []byte) *HIDDevice

func (*HIDDevice) AddChannel

func (dev *HIDDevice) AddChannel(ch int)

func (*HIDDevice) AddPayload

func (dev *HIDDevice) AddPayload(payload []byte)

func (*HIDDevice) Channels

func (dev *HIDDevice) Channels() string

func (*HIDDevice) ChannelsList

func (dev *HIDDevice) ChannelsList() []string

func (*HIDDevice) EachPayload

func (dev *HIDDevice) EachPayload(cb func([]byte) bool)

func (*HIDDevice) MarshalJSON

func (dev *HIDDevice) MarshalJSON() ([]byte, error)

func (*HIDDevice) NumPayloads

func (dev *HIDDevice) NumPayloads() int

func (*HIDDevice) PayloadsSize

func (dev *HIDDevice) PayloadsSize() uint64

type HIDPayload

type HIDPayload []byte

type HIDType

type HIDType int
const (
	HIDTypeUnknown   HIDType = 0
	HIDTypeLogitech  HIDType = 1
	HIDTypeAmazon    HIDType = 2
	HIDTypeMicrosoft HIDType = 3
	HIDTypeDell      HIDType = 4
)

func (HIDType) String

func (t HIDType) String() string

type Handshake

type Handshake struct {
	sync.Mutex

	Beacon        gopacket.Packet
	Challenges    []gopacket.Packet
	Responses     []gopacket.Packet
	Confirmations []gopacket.Packet
	// contains filtered or unexported fields
}

func NewHandshake

func NewHandshake() *Handshake

func (*Handshake) AddAndGetPMKID

func (h *Handshake) AddAndGetPMKID(pkt gopacket.Packet) []byte

func (*Handshake) AddFrame

func (h *Handshake) AddFrame(n int, pkt gopacket.Packet)

func (*Handshake) Complete

func (h *Handshake) Complete() bool

func (*Handshake) EachUnsavedPacket

func (h *Handshake) EachUnsavedPacket(cb func(gopacket.Packet))

func (*Handshake) Half

func (h *Handshake) Half() bool

func (*Handshake) HasPMKID

func (h *Handshake) HasPMKID() bool

func (*Handshake) NumUnsaved

func (h *Handshake) NumUnsaved() int

func (*Handshake) SetBeacon

func (h *Handshake) SetBeacon(pkt gopacket.Packet)

type LAN

type LAN struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewLAN

func NewLAN(iface, gateway *Endpoint, aliases *data.UnsortedKV, newcb EndpointNewCallback, lostcb EndpointLostCallback) *LAN

func (*LAN) AddIfNew

func (lan *LAN) AddIfNew(ip, mac string) *Endpoint

func (*LAN) Aliases

func (lan *LAN) Aliases() *data.UnsortedKV

func (*LAN) Clear

func (lan *LAN) Clear()

func (*LAN) EachHost

func (lan *LAN) EachHost(cb func(mac string, e *Endpoint))

func (*LAN) Get

func (lan *LAN) Get(mac string) (*Endpoint, bool)

func (*LAN) GetAlias

func (lan *LAN) GetAlias(mac string) string

func (*LAN) GetByIp

func (lan *LAN) GetByIp(ip string) *Endpoint

func (*LAN) Has

func (lan *LAN) Has(ip string) bool

func (*LAN) List

func (lan *LAN) List() (list []*Endpoint)

func (*LAN) MarshalJSON

func (l *LAN) MarshalJSON() ([]byte, error)

func (*LAN) Remove

func (lan *LAN) Remove(ip, mac string)

func (*LAN) WasMissed

func (lan *LAN) WasMissed(mac string) bool

type Meta

type Meta struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewMeta

func NewMeta() *Meta

func (*Meta) Each

func (m *Meta) Each(cb func(name string, value interface{}))

func (*Meta) Empty

func (m *Meta) Empty() bool

func (*Meta) Get

func (m *Meta) Get(name string) interface{}

func (*Meta) GetIntsWith

func (m *Meta) GetIntsWith(name string, with int, sorted bool) []int

func (*Meta) GetOr

func (m *Meta) GetOr(name string, dflt interface{}) interface{}

func (*Meta) MarshalJSON

func (m *Meta) MarshalJSON() ([]byte, error)

func (*Meta) Set

func (m *Meta) Set(name string, value interface{})

func (*Meta) SetInts

func (m *Meta) SetInts(name string, ints []int)

type OnHostResolvedCallback

type OnHostResolvedCallback func(e *Endpoint)

type Station

type Station struct {
	*Endpoint
	Frequency      int               `json:"frequency"`
	Channel        int               `json:"channel"`
	RSSI           int8              `json:"rssi"`
	Sent           uint64            `json:"sent"`
	Received       uint64            `json:"received"`
	Encryption     string            `json:"encryption"`
	Cipher         string            `json:"cipher"`
	Authentication string            `json:"authentication"`
	WPS            map[string]string `json:"wps"`
	Handshake      *Handshake        `json:"-"`
}

func NewStation

func NewStation(essid, bssid string, frequency int, rssi int8) *Station

func (Station) BSSID

func (s Station) BSSID() string

func (*Station) ESSID

func (s *Station) ESSID() string

func (*Station) HasWPS

func (s *Station) HasWPS() bool

func (*Station) IsOpen

func (s *Station) IsOpen() bool

func (*Station) PathFriendlyName

func (s *Station) PathFriendlyName() string

type WiFi

type WiFi struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewWiFi

func NewWiFi(iface *Endpoint, aliases *data.UnsortedKV, newcb APNewCallback, lostcb APLostCallback) *WiFi

func (*WiFi) AddIfNew

func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) (*AccessPoint, bool)

func (*WiFi) Clear

func (w *WiFi) Clear()

func (*WiFi) EachAccessPoint

func (w *WiFi) EachAccessPoint(cb func(mac string, ap *AccessPoint))

func (*WiFi) Get

func (w *WiFi) Get(mac string) (*AccessPoint, bool)

func (*WiFi) GetClient

func (w *WiFi) GetClient(mac string) (*Station, bool)

func (*WiFi) List

func (w *WiFi) List() (list []*AccessPoint)

func (*WiFi) MarshalJSON

func (w *WiFi) MarshalJSON() ([]byte, error)

func (*WiFi) NumHandshakes

func (w *WiFi) NumHandshakes() int

func (*WiFi) Remove

func (w *WiFi) Remove(mac string)

func (*WiFi) SaveHandshakesTo

func (w *WiFi) SaveHandshakesTo(fileName string, linkType layers.LinkType) error

func (*WiFi) Stations

func (w *WiFi) Stations() (list []*Station)