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)