scan

package
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: May 17, 2023 License: BSD-3-Clause Imports: 29 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DeadlineSec  = 10
	ProtocolICMP = 1
)

Some constants

Variables

This section is empty.

Functions

func CleanupHandlersUnix

func CleanupHandlersUnix(s *Scanner)

CleanupHandlers for all interfaces

func GetInterfaceFromIP

func GetInterfaceFromIP(ip net.IP) (*net.Interface, error)

GetInterfaceFromIP gets the name of the network interface from local ip address

func GetSourceIP

func GetSourceIP(dstip net.IP) (net.IP, error)

GetSourceIP gets the local ip based on our destination ip

func GetSrcParameters

func GetSrcParameters(destIP string) (srcIP net.IP, networkInterface *net.Interface, err error)

GetSrcParameters gets the network parameters from the destination ip

func NewScannerUnix

func NewScannerUnix(scanner *Scanner) error

func SetupHandlerUnix

func SetupHandlerUnix(s *Scanner, interfaceName string) error

func TCPReadWorkerPCAPUnix

func TCPReadWorkerPCAPUnix(s *Scanner)

func WhatsMyIP

func WhatsMyIP() (string, error)

WhatsMyIP attempts to obtain the external ip through public api

Types

type Handlers

type Handlers struct {
	Active   []*pcap.Handle
	Inactive []*pcap.InactiveHandle
}

type Options

type Options struct {
	Timeout     time.Duration
	Retries     int
	Rate        int
	Debug       bool
	ExcludeCdn  bool
	ExcludedIps []string
	Proxy       string
	Stream      bool
}

Options of the scan

type Ping

type Ping struct {
	Type    PingResultType
	Latency time.Duration
	Error   error
	Host    string
}

Ping contains the results for ping on a single host

type PingResult

type PingResult struct {
	Hosts []Ping
}

PingResult contains the results for the Ping request

func PingHosts

func PingHosts(addresses []string) (*PingResult, error)

PingHosts pings the addresses given and returns the latencies of each host If the address returns an error, that address is marked as unusable.

func (*PingResult) GetFastestHost

func (p *PingResult) GetFastestHost() (Ping, error)

GetFastestHost gets the fastest host from the ping responses

type PingResultType

type PingResultType int

PingResultType contains the type of result for ping request on an address

const (
	HostInactive PingResultType = iota
	HostActive
)

Type of ping responses

type PkgFlag

type PkgFlag int

PkgFlag represent the TCP packet flag

const (
	SYN PkgFlag = iota
	ACK
	ICMPECHOREQUEST
	ICMPTIMESTAMPREQUEST
)

type PkgResult

type PkgResult struct {
	// contains filtered or unexported fields
}

PkgResult contains the results of sending TCP packages

type PkgSend

type PkgSend struct {
	SourceIP string
	// contains filtered or unexported fields
}

PkgSend is a TCP package

type Scanner

type Scanner struct {
	SourceIP net.IP

	Ports    []int
	IPRanger *ipranger.IPRanger

	State            State
	ScanResults      *result.Result
	NetworkInterface *net.Interface
	// contains filtered or unexported fields
}

func NewScanner

func NewScanner(options *Options) (*Scanner, error)

NewScanner creates a new full port scanner that scans all ports using SYN packets.

func (*Scanner) ACKPort

func (s *Scanner) ACKPort(dstIP string, port int, timeout time.Duration) (bool, error)

ACKPort sends an ACK packet to a port

func (*Scanner) CdnCheck

func (s *Scanner) CdnCheck(ip string) (bool, string, error)

CdnCheck verifies if the given ip is part of Cdn ranges

func (*Scanner) CleanupHandlers

func (s *Scanner) CleanupHandlers()

CleanupHandlers for all interfaces

func (*Scanner) Close

func (s *Scanner) Close()

Close the scanner and terminate all workers

func (*Scanner) ConnectPort

func (s *Scanner) ConnectPort(host string, port int, timeout time.Duration) (bool, error)

ConnectPort a single host and port

func (*Scanner) ConnectVerify

func (s *Scanner) ConnectVerify(host string, ports map[int]struct{}) map[int]struct{}

ConnectVerify is used to verify if ports are accurate using a connect request

func (*Scanner) EnqueueICMP

func (s *Scanner) EnqueueICMP(ip string, pkgtype PkgFlag)

EnqueueICMP outgoing ICMP packets

func (*Scanner) EnqueueTCP

func (s *Scanner) EnqueueTCP(ip string, port int, pkgtype PkgFlag)

EnqueueTCP outgoing TCP packets

func (*Scanner) ICMPReadWorker

func (s *Scanner) ICMPReadWorker()

ICMPReadWorker reads packets from the network layer

func (*Scanner) ICMPWriteWorker

func (s *Scanner) ICMPWriteWorker()

ICMPWriteWorker writes packet to the network layer

func (*Scanner) ScanSyn

func (s *Scanner) ScanSyn(ip string)

ScanSyn a target ip

func (*Scanner) SendAsyncPkg

func (s *Scanner) SendAsyncPkg(ip string, port int, pkgFlag PkgFlag)

SendAsyncPkg sends a single packet to a port

func (*Scanner) SetupHandler

func (s *Scanner) SetupHandler(interfaceName string) error

SetupHandler to listen on the specified interface

func (*Scanner) SetupHandlers

func (s *Scanner) SetupHandlers() error

SetupHandlers to listen on all interfaces

func (*Scanner) StartWorkers

func (s *Scanner) StartWorkers()

StartWorkers of the scanner

func (*Scanner) TCPReadWorker

func (s *Scanner) TCPReadWorker()

TCPReadWorker reads and parse incoming TCP packets

func (*Scanner) TCPReadWorkerPCAP

func (s *Scanner) TCPReadWorkerPCAP()

TCPReadWorkerPCAP reads and parse incoming TCP packets with pcap

func (*Scanner) TCPResultWorker

func (s *Scanner) TCPResultWorker()

TCPResultWorker handles probes and scan results

func (*Scanner) TCPWriteWorker

func (s *Scanner) TCPWriteWorker()

TCPWriteWorker that sends out TCP packets

func (*Scanner) TuneSource

func (s *Scanner) TuneSource(ip string) error

TuneSource automatically with ip and interface

type State

type State int

State determines the internal scan state

const (
	Init State = iota
	Scan
	Done
	Guard
)

type TCPSequencer

type TCPSequencer struct {
	// contains filtered or unexported fields
}

TCPSequencer generates linear TCP sequence numbers that wrap around after reaching their maximum value.

According to specs, this is the correct way to approach TCP sequence number since linearity will be guaranteed by the wrapping around to initial 0.

func NewTCPSequencer

func NewTCPSequencer() *TCPSequencer

NewTCPSequencer creates a new linear tcp sequenc enumber generator

func (*TCPSequencer) Next

func (t *TCPSequencer) Next() uint32

Next returns the next number in the sequence of tcp sequence numbers

Jump to

Keyboard shortcuts

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