cameradar: github.com/Ullaakut/cameradar Index | Files | Directories

package cmrdr

import "github.com/Ullaakut/cameradar"

Package cmrdr provides methods to be able to discover and attack RTSP streams easily. RTSP streams are used by most IP Cameras, often for surveillance.

A simple example usage of the library can be found in https://github.com/ullaakut/cameradar/tree/master/cameradar

The example usage is complete enough for most users to ignore the library, but for users with specific needs such as creating their own bruteforcing dictionary to access cameras, or running their own network scan, this library allows to use simple and performant methods to attack streams.

Index

Package Files

attack.go cmrdr.go curl.go discover.go helpers.go loaders.go models.go

func GetCameraAdminPanelURL Uses

func GetCameraAdminPanelURL(stream Stream) string

GetCameraAdminPanelURL returns the URL to the camera's admin panel

func GetCameraRTSPURL Uses

func GetCameraRTSPURL(stream Stream) string

GetCameraRTSPURL generates a stream's RTSP URL

func ParseTargetsFile Uses

func ParseTargetsFile(path string) ([]string, error)

ParseTargetsFile parses an input file containing hosts to targets

type Credentials Uses

type Credentials struct {
    Usernames []string `json:"usernames"`
    Passwords []string `json:"passwords"`
}

Credentials is a map of credentials usernames are keys and passwords are values creds['admin'] -> 'secure_password'

func LoadCredentials Uses

func LoadCredentials(path string) (Credentials, error)

LoadCredentials opens a dictionary file and returns its contents as a Credentials structure

func ParseCredentialsFromString Uses

func ParseCredentialsFromString(content string) (Credentials, error)

ParseCredentialsFromString parses a dictionary string and returns its contents as a Credentials structure

type Curl Uses

type Curl struct {
    *curl.CURL
}

Curl is a libcurl wrapper used to make the Curler interface work even though golang currently does not support covariance (see https://github.com/golang/go/issues/7512)

func (*Curl) Duphandle Uses

func (c *Curl) Duphandle() Curler

Duphandle wraps curl.Duphandle

type Curler Uses

type Curler interface {
    Setopt(opt int, param interface{}) error
    Perform() error
    Getinfo(info curl.CurlInfo) (interface{}, error)
    Duphandle() Curler
}

Curler is an interface that implements the CURL interface of the go-curl library Used for mocking

type Options Uses

type Options struct {
    Targets     []string      `json:"target" validate:"required"`
    Ports       []string      `json:"ports"`
    Routes      Routes        `json:"routes"`
    Credentials Credentials   `json:"credentials"`
    Speed       int           `json:"speed"`
    Timeout     time.Duration `json:"timeout"`
}

Options contains all options needed to launch a complete cameradar scan

type Routes Uses

type Routes []string

Routes is a slice of Routes ['/live.sdp', '/media.amp', ...]

func LoadRoutes Uses

func LoadRoutes(path string) (Routes, error)

LoadRoutes opens a dictionary file and returns its contents as a Routes structure

func ParseRoutesFromString Uses

func ParseRoutesFromString(content string) Routes

ParseRoutesFromString parses a dictionary string and returns its contents as a Routes structure

type Stream Uses

type Stream struct {
    Device   string `json:"device"`
    Username string `json:"username"`
    Password string `json:"password"`
    Route    string `json:"route"`
    Address  string `json:"address" validate:"required"`
    Port     uint16 `json:"port" validate:"required"`

    CredentialsFound bool `json:"credentials_found"`
    RouteFound       bool `json:"route_found"`
    Available        bool `json:"available"`
}

Stream represents a camera's RTSP stream

func AttackCredentials Uses

func AttackCredentials(c Curler, targets []Stream, credentials Credentials, timeout time.Duration, log bool) ([]Stream, error)

AttackCredentials attempts to guess the provided targets' credentials using the given dictionary or the default dictionary if none was provided by the user.

func AttackRoute Uses

func AttackRoute(c Curler, targets []Stream, routes Routes, timeout time.Duration, log bool) ([]Stream, error)

AttackRoute attempts to guess the provided targets' streaming routes using the given dictionary or the default dictionary if none was provided by the user.

func Discover Uses

func Discover(targets, ports []string, speed int) ([]Stream, error)

Discover scans the target networks and tries to find RTSP streams within them.

targets can be:

- a subnet (e.g.: 172.16.100.0/24)
- an IP (e.g.: 172.16.100.10)
- a hostname (e.g.: localhost)
- a range of IPs (e.g.: 172.16.100.10-20)

ports can be:

- one or multiple ports and port ranges separated by commas (e.g.: 554,8554-8560,18554-28554)

func ValidateStreams Uses

func ValidateStreams(c Curler, targets []Stream, timeout time.Duration, log bool) ([]Stream, error)

ValidateStreams tries to setup the stream to validate whether or not it is available

Directories

PathSynopsis
cameradar

Package cmrdr imports 12 packages (graph). Updated 2019-04-09. Refresh now. Tools for package owners.