session

package
v2.24.1+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 22, 2019 License: GPL-3.0 Imports: 33 Imported by: 0

Documentation ¶

Overview ¶

Package session contains code to manage the interactive session, modules, environment, etc.

Index ¶

Constants ¶

View Source
const (
	IPv4Validator = `^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$`
	IPv6Validator = `^[:a-fA-F0-9]{6,}$`
)
View Source
const (
	STRING ParamType = iota
	BOOL             = iota
	INT              = iota
	FLOAT            = iota
)
View Source
const (
	PromptVariable       = "$"
	DefaultPrompt        = "{by}{fw}{cidr} {fb}> {env.iface.ipv4} {reset} {bold}» {reset}"
	DefaultPromptMonitor = "{by}{fb} {env.iface.name} {reset} {bold}» {reset}"
)
View Source
const AliasesFile = "~/bettercap.aliases"
View Source
const (
	HistoryFile = "~/bettercap.history"
)
View Source
const ParamIfaceAddress = "<interface address>"
View Source
const ParamIfaceAddress6 = "<interface address6>"
View Source
const ParamIfaceName = "<interface name>"
View Source
const ParamRandomMAC = "<random mac>"
View Source
const ParamSubnet = "<entire subnet>"

Variables ¶

View Source
var (
	I = (*Session)(nil)

	ErrNotSupported = errors.New("this component is not supported on this OS")
)
View Source
var (
	ErrEmptyExpression = errors.New("expression can not be empty")
)
View Source
var (
	PromptCallbacks = map[string]func(s *Session) string{
		"{cidr}": func(s *Session) string {
			return s.Interface.CIDR()
		},
		"{net.sent}": func(s *Session) string {
			return fmt.Sprintf("%d", s.Queue.Stats.Sent)
		},
		"{net.sent.human}": func(s *Session) string {
			return humanize.Bytes(s.Queue.Stats.Sent)
		},
		"{net.received}": func(s *Session) string {
			return fmt.Sprintf("%d", s.Queue.Stats.Received)
		},
		"{net.received.human}": func(s *Session) string {
			return humanize.Bytes(s.Queue.Stats.Received)
		},
		"{net.packets}": func(s *Session) string {
			return fmt.Sprintf("%d", s.Queue.Stats.PktReceived)
		},
		"{net.errors}": func(s *Session) string {
			return fmt.Sprintf("%d", s.Queue.Stats.Errors)
		},
	}
)

Functions ¶

func AsTag ¶

func AsTag(name string) string

func ErrAlreadyStarted ¶

func ErrAlreadyStarted(name string) error

func ErrAlreadyStopped ¶

func ErrAlreadyStopped(name string) error

func ParseCommands ¶

func ParseCommands(line string) []string

Types ¶

type CommandHandler ¶

type CommandHandler struct {
	sync.Mutex
	Name        string
	Description string
	Completer   *readline.PrefixCompleter
	Parser      *regexp.Regexp
	// contains filtered or unexported fields
}

func NewCommandHandler ¶

func NewCommandHandler(name string, expr string, desc string, exec func(args []string, s *Session) error) CommandHandler

func (*CommandHandler) Exec ¶

func (h *CommandHandler) Exec(args []string, s *Session) error

func (*CommandHandler) Parse ¶

func (h *CommandHandler) Parse(line string) (bool, []string)

type Environment ¶

type Environment struct {
	sync.Mutex
	Data map[string]string `json:"data"`
	// contains filtered or unexported fields
}

func NewEnvironment ¶

func NewEnvironment(envFile string) (*Environment, error)

func (*Environment) Get ¶

func (env *Environment) Get(name string) (bool, string)

func (*Environment) GetInt ¶

func (env *Environment) GetInt(name string) (error, int)

func (*Environment) GetUnlocked ¶

func (env *Environment) GetUnlocked(name string) (bool, string)

func (*Environment) Has ¶

func (env *Environment) Has(name string) bool

func (*Environment) Load ¶

func (env *Environment) Load(fileName string) error

func (*Environment) Save ¶

func (env *Environment) Save(fileName string) error

func (*Environment) Set ¶

func (env *Environment) Set(name, value string) string

func (*Environment) Sorted ¶

func (env *Environment) Sorted() []string

func (*Environment) WithCallback ¶

func (env *Environment) WithCallback(name, value string, cb EnvironmentChangedCallback) string

type EnvironmentChangedCallback ¶

type EnvironmentChangedCallback func(newValue string)

type Event ¶

type Event struct {
	Tag  string      `json:"tag"`
	Time time.Time   `json:"time"`
	Data interface{} `json:"data"`
}

func NewEvent ¶

func NewEvent(tag string, data interface{}) Event

func (Event) Label ¶

func (e Event) Label() string

type EventPool ¶

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

func NewEventPool ¶

func NewEventPool(debug bool, silent bool) *EventPool

func (*EventPool) Add ¶

func (p *EventPool) Add(tag string, data interface{})

func (*EventPool) Clear ¶

func (p *EventPool) Clear()

func (*EventPool) Listen ¶

func (p *EventPool) Listen() <-chan Event

func (*EventPool) Log ¶

func (p *EventPool) Log(level log.Verbosity, format string, args ...interface{})

func (*EventPool) SetDebug ¶

func (p *EventPool) SetDebug(d bool)

func (*EventPool) SetSilent ¶

func (p *EventPool) SetSilent(s bool)

func (*EventPool) Sorted ¶

func (p *EventPool) Sorted() []Event

func (*EventPool) Unlisten ¶

func (p *EventPool) Unlisten(listener <-chan Event)

type EventsIgnoreList ¶

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

func NewEventsIgnoreList ¶

func NewEventsIgnoreList() *EventsIgnoreList

func (*EventsIgnoreList) Add ¶

func (l *EventsIgnoreList) Add(expr string) (err error)

func (*EventsIgnoreList) Clear ¶

func (l *EventsIgnoreList) Clear()

func (*EventsIgnoreList) Empty ¶

func (l *EventsIgnoreList) Empty() bool

func (*EventsIgnoreList) Filters ¶

func (l *EventsIgnoreList) Filters() []filter

func (*EventsIgnoreList) Ignored ¶

func (l *EventsIgnoreList) Ignored(e Event) bool

func (*EventsIgnoreList) MarshalJSON ¶

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

func (*EventsIgnoreList) Remove ¶

func (l *EventsIgnoreList) Remove(expr string) (err error)

type GPS ¶

type GPS struct {
	Updated       time.Time
	Latitude      float64 // Latitude.
	Longitude     float64 // Longitude.
	FixQuality    string  // Quality of fix.
	NumSatellites int64   // Number of satellites in use.
	HDOP          float64 // Horizontal dilution of precision.
	Altitude      float64 // Altitude.
	Separation    float64 // Geoidal separation
}

type JSONModuleHandler ¶

type JSONModuleHandler struct {
	Name        string `json:"name"`
	Description string `json:"description"`
	Parser      string `json:"parser"`
}

type JSONModuleParam ¶

type JSONModuleParam struct {
	Name        string    `json:"name"`
	Type        ParamType `json:"type"`
	Description string    `json:"description"`
	Value       string    `json:"default_value"`
	Current     string    `json:"current_value"`
	Validator   string    `json:"validator"`
}

type LogMessage ¶

type LogMessage struct {
	Level   log.Verbosity
	Message string
}

type Module ¶

type Module interface {
	Name() string
	Description() string
	Author() string
	Handlers() []ModuleHandler
	Parameters() map[string]*ModuleParam

	Extra() map[string]interface{}
	Required() []string
	Running() bool
	Start() error
	Stop() error
}

type ModuleHandler ¶

type ModuleHandler struct {
	sync.Mutex

	Name        string
	Description string
	Parser      *regexp.Regexp
	Completer   *readline.PrefixCompleter
	// contains filtered or unexported fields
}

func NewModuleHandler ¶

func NewModuleHandler(name string, expr string, desc string, exec func(args []string) error) ModuleHandler

func (*ModuleHandler) Complete ¶

func (h *ModuleHandler) Complete(name string, cb func(prefix string) []string)

func (*ModuleHandler) Exec ¶

func (h *ModuleHandler) Exec(args []string) error

func (*ModuleHandler) Help ¶

func (h *ModuleHandler) Help(padding int) string

func (ModuleHandler) MarshalJSON ¶

func (h ModuleHandler) MarshalJSON() ([]byte, error)

func (*ModuleHandler) Parse ¶

func (h *ModuleHandler) Parse(line string) (bool, []string)

type ModuleList ¶

type ModuleList []Module

func (ModuleList) MarshalJSON ¶

func (mm ModuleList) MarshalJSON() ([]byte, error)

type ModuleParam ¶

type ModuleParam struct {
	Name        string
	Type        ParamType
	Value       string
	Description string

	Validator *regexp.Regexp
}

func NewBoolParameter ¶

func NewBoolParameter(name string, def_value string, desc string) *ModuleParam

func NewDecimalParameter ¶

func NewDecimalParameter(name string, def_value string, desc string) *ModuleParam

func NewIntParameter ¶

func NewIntParameter(name string, def_value string, desc string) *ModuleParam

func NewModuleParameter ¶

func NewModuleParameter(name string, def_value string, t ParamType, validator string, desc string) *ModuleParam

func NewStringParameter ¶

func NewStringParameter(name string, def_value string, validator string, desc string) *ModuleParam

func (ModuleParam) Get ¶

func (p ModuleParam) Get(s *Session) (error, interface{})

func (ModuleParam) Help ¶

func (p ModuleParam) Help(padding int) string

func (ModuleParam) MarshalJSON ¶

func (p ModuleParam) MarshalJSON() ([]byte, error)

func (ModuleParam) Register ¶

func (p ModuleParam) Register(s *Session)

func (ModuleParam) Validate ¶

func (p ModuleParam) Validate(value string) (error, interface{})

type ParamType ¶

type ParamType int

type Prompt ¶

type Prompt struct {
}

func NewPrompt ¶

func NewPrompt() Prompt

func (Prompt) Render ¶

func (p Prompt) Render(s *Session) string

type Session ¶

type Session struct {
	Options   core.Options
	Interface *network.Endpoint
	Gateway   *network.Endpoint
	Env       *Environment
	Lan       *network.LAN
	WiFi      *network.WiFi
	BLE       *network.BLE
	HID       *network.HID
	Queue     *packets.Queue
	StartedAt time.Time
	Active    bool
	GPS       GPS
	Modules   ModuleList
	Aliases   *data.UnsortedKV

	Input            *readline.Instance
	Prompt           Prompt
	CoreHandlers     []CommandHandler
	Events           *EventPool
	EventsIgnoreList *EventsIgnoreList
	UnkCmdCallback   UnknownCommandCallback
	Firewall         firewall.FirewallManager
}

func New ¶

func New() (*Session, error)

func (*Session) BLECompleter ¶

func (s *Session) BLECompleter(prefix string) []string

func (*Session) Close ¶

func (s *Session) Close()

func (*Session) EventsCompleter ¶

func (s *Session) EventsCompleter(prefix string) []string

func (*Session) FindMAC ¶

func (s *Session) FindMAC(ip net.IP, probe bool) (net.HardwareAddr, error)

func (*Session) HIDCompleter ¶

func (s *Session) HIDCompleter(prefix string) []string

func (*Session) IsOn ¶

func (s *Session) IsOn(moduleName string) bool

func (*Session) LANCompleter ¶

func (s *Session) LANCompleter(prefix string) []string

func (*Session) Lock ¶

func (s *Session) Lock()

func (*Session) MarshalJSON ¶

func (s *Session) MarshalJSON() ([]byte, error)

func (*Session) Module ¶

func (s *Session) Module(name string) (err error, mod Module)

func (*Session) ReadLine ¶

func (s *Session) ReadLine() (string, error)

func (*Session) Refresh ¶

func (s *Session) Refresh()

func (*Session) Register ¶

func (s *Session) Register(mod Module) error

func (*Session) Run ¶

func (s *Session) Run(line string) error

func (*Session) RunCaplet ¶

func (s *Session) RunCaplet(filename string) error

func (*Session) Skip ¶

func (s *Session) Skip(ip net.IP) bool

func (*Session) Start ¶

func (s *Session) Start() error

func (*Session) Unlock ¶

func (s *Session) Unlock()

func (*Session) WiFiCompleter ¶

func (s *Session) WiFiCompleter(prefix string) []string

func (*Session) WiFiCompleterFull ¶

func (s *Session) WiFiCompleterFull(prefix string) []string

type SessionJSON ¶

type SessionJSON struct {
	Version    string            `json:"version"`
	OS         string            `json:"os"`
	Arch       string            `json:"arch"`
	GoVersion  string            `json:"goversion"`
	Resources  resourcesJSON     `json:"resources"`
	Interfaces []ifaceJSON       `json:"interfaces"`
	Options    core.Options      `json:"options"`
	Interface  *network.Endpoint `json:"interface"`
	Gateway    *network.Endpoint `json:"gateway"`
	Env        *Environment      `json:"env"`
	Lan        *network.LAN      `json:"lan"`
	WiFi       *network.WiFi     `json:"wifi"`
	BLE        *network.BLE      `json:"ble"`
	HID        *network.HID      `json:"hid"`
	Queue      *packets.Queue    `json:"packets"`
	StartedAt  time.Time         `json:"started_at"`
	PolledAt   time.Time         `json:"polled_at"`
	Active     bool              `json:"active"`
	GPS        GPS               `json:"gps"`
	Modules    ModuleList        `json:"modules"`
	Caplets    []*caplets.Caplet `json:"caplets"`
}

type SessionModule ¶

type SessionModule struct {
	Name       string
	Session    *Session
	Started    bool
	StatusLock *sync.RWMutex
	State      *sync.Map
	// contains filtered or unexported fields
}

func NewSessionModule ¶

func NewSessionModule(name string, s *Session) SessionModule

func (*SessionModule) AddHandler ¶

func (m *SessionModule) AddHandler(h ModuleHandler)

func (*SessionModule) AddParam ¶

func (m *SessionModule) AddParam(p *ModuleParam) *ModuleParam

func (SessionModule) BoolParam ¶

func (m SessionModule) BoolParam(name string) (error, bool)

func (*SessionModule) Debug ¶

func (m *SessionModule) Debug(format string, args ...interface{})

func (SessionModule) DecParam ¶

func (m SessionModule) DecParam(name string) (error, float64)

func (*SessionModule) Error ¶

func (m *SessionModule) Error(format string, args ...interface{})

func (*SessionModule) Extra ¶

func (m *SessionModule) Extra() map[string]interface{}

func (*SessionModule) Fatal ¶

func (m *SessionModule) Fatal(format string, args ...interface{})

func (*SessionModule) Handlers ¶

func (m *SessionModule) Handlers() []ModuleHandler

func (SessionModule) IPParam ¶

func (m SessionModule) IPParam(name string) (error, net.IP)

func (*SessionModule) Info ¶

func (m *SessionModule) Info(format string, args ...interface{})

func (*SessionModule) InitState ¶

func (m *SessionModule) InitState(keys ...string)

func (SessionModule) IntParam ¶

func (m SessionModule) IntParam(name string) (error, int)

func (SessionModule) ListParam ¶

func (m SessionModule) ListParam(name string) (err error, values []string)

func (*SessionModule) Param ¶

func (m *SessionModule) Param(name string) *ModuleParam

func (*SessionModule) Parameters ¶

func (m *SessionModule) Parameters() map[string]*ModuleParam

func (*SessionModule) Required ¶

func (m *SessionModule) Required() []string

func (*SessionModule) Requires ¶

func (m *SessionModule) Requires(modName string)

func (*SessionModule) ResetState ¶

func (m *SessionModule) ResetState()

func (*SessionModule) Running ¶

func (m *SessionModule) Running() bool

func (*SessionModule) SetRunning ¶

func (m *SessionModule) SetRunning(running bool, cb func()) error

func (SessionModule) StringParam ¶

func (m SessionModule) StringParam(name string) (error, string)

func (*SessionModule) Warning ¶

func (m *SessionModule) Warning(format string, args ...interface{})

type UnknownCommandCallback ¶

type UnknownCommandCallback func(cmd string) bool

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL