Documentation

Index

Constants

View Source
const (
	IPv4 = IPVersion(4)
	IPv6 = IPVersion(6)

	InBound  = true
	OutBound = false

	ICMP    = IPProtocol(1)
	IGMP    = IPProtocol(2)
	TCP     = IPProtocol(6)
	UDP     = IPProtocol(17)
	ICMPv6  = IPProtocol(58)
	UDPLite = IPProtocol(136)
	RAW     = IPProtocol(255)
)

    Basic Constants

    Variables

    View Source
    var (
    	// ErrFailedToLoadPayload is returned by GetPayload if it failed for an unspecified reason, or is not implemented on the current system.
    	ErrFailedToLoadPayload = errors.New("could not load packet payload")
    )

    Functions

    func Parse

    func Parse(packetData []byte, pktInfo *Info) error

      Parse parses an IP packet and saves the information in the given packet object.

      Types

      type Base

      type Base struct {
      	Payload []byte
      	// contains filtered or unexported fields
      }

        Base is a base structure for satisfying the Packet interface.

        func (*Base) Ctx

        func (pkt *Base) Ctx() context.Context

          Ctx returns the packet context.

          func (*Base) FmtPacket

          func (pkt *Base) FmtPacket() string

            FmtPacket returns the most important information about the packet as a string

            func (*Base) FmtProtocol

            func (pkt *Base) FmtProtocol() string

              FmtProtocol returns the protocol as a string

              func (*Base) FmtRemoteAddress

              func (pkt *Base) FmtRemoteAddress() string

                FmtRemoteAddress returns the full remote address (protocol, IP, port) as a string

                func (*Base) FmtRemoteIP

                func (pkt *Base) FmtRemoteIP() string

                  FmtRemoteIP returns the remote IP address as a string

                  func (*Base) FmtRemotePort

                  func (pkt *Base) FmtRemotePort() string

                    FmtRemotePort returns the remote port as a string

                    func (*Base) GetConnectionID

                    func (pkt *Base) GetConnectionID() string

                      GetConnectionID returns the link ID for this packet.

                      func (*Base) GetPayload

                      func (pkt *Base) GetPayload() ([]byte, error)

                        GetPayload returns the packet payload. In some cases, this will fetch the payload from the os integration system.

                        func (*Base) HasPorts

                        func (pkt *Base) HasPorts() bool

                          HasPorts checks if the packet has a protocol that uses ports.

                          func (*Base) Info

                          func (pkt *Base) Info() *Info

                            Info returns the packet Info.

                            func (*Base) IsInbound

                            func (pkt *Base) IsInbound() bool

                              IsInbound checks if the packet is inbound.

                              func (*Base) IsOutbound

                              func (pkt *Base) IsOutbound() bool

                                IsOutbound checks if the packet is outbound.

                                func (*Base) MatchesAddress

                                func (pkt *Base) MatchesAddress(remote bool, protocol IPProtocol, network *net.IPNet, port uint16) bool

                                  MatchesAddress checks if a the packet matches a given endpoint (remote or local) in protocol, network and port.

                                  Comparison matrix:

                                  IN   OUT
                                  

                                  Local Dst Src Remote Src Dst

                                  func (*Base) MatchesIP

                                  func (pkt *Base) MatchesIP(endpoint bool, network *net.IPNet) bool

                                    MatchesIP checks if a the packet matches a given endpoint (remote or local) IP.

                                    Comparison matrix:

                                    IN   OUT
                                    

                                    Local Dst Src Remote Src Dst

                                    func (*Base) SetCtx

                                    func (pkt *Base) SetCtx(ctx context.Context)

                                      SetCtx sets the packet context.

                                      func (*Base) SetInbound

                                      func (pkt *Base) SetInbound()

                                        SetInbound sets a the packet direction to inbound. This must only used when initializing the packet structure.

                                        func (*Base) SetOutbound

                                        func (pkt *Base) SetOutbound()

                                          SetOutbound sets a the packet direction to outbound. This must only used when initializing the packet structure.

                                          func (*Base) SetPacketInfo

                                          func (pkt *Base) SetPacketInfo(packetInfo Info)

                                            SetPacketInfo sets a new packet Info. This must only used when initializing the packet structure.

                                            func (*Base) String

                                            func (pkt *Base) String() string

                                            type IPProtocol

                                            type IPProtocol uint8

                                              IPProtocol represents an IP protocol.

                                              func (IPProtocol) String

                                              func (p IPProtocol) String() string

                                                String returns the string representation (abbreviation) of the protocol.

                                                type IPVersion

                                                type IPVersion uint8

                                                  IPVersion represents an IP version.

                                                  func (IPVersion) ByteSize

                                                  func (v IPVersion) ByteSize() int

                                                    ByteSize returns the byte size of the ip, IPv4 = 4 bytes, IPv6 = 16

                                                    func (IPVersion) String

                                                    func (v IPVersion) String() string

                                                      String returns the string representation of the IP version: "IPv4" or "IPv6".

                                                      type Info

                                                      type Info struct {
                                                      	Inbound  bool
                                                      	InTunnel bool
                                                      
                                                      	Version          IPVersion
                                                      	Protocol         IPProtocol
                                                      	SrcPort, DstPort uint16
                                                      	Src, Dst         net.IP
                                                      }

                                                        Info holds IP and TCP/UDP header information

                                                        func (*Info) LocalIP

                                                        func (pi *Info) LocalIP() net.IP

                                                          LocalIP returns the local IP of the packet.

                                                          func (*Info) LocalPort

                                                          func (pi *Info) LocalPort() uint16

                                                            LocalPort returns the local port of the packet.

                                                            func (*Info) RemoteIP

                                                            func (pi *Info) RemoteIP() net.IP

                                                              RemoteIP returns the remote IP of the packet.

                                                              func (*Info) RemotePort

                                                              func (pi *Info) RemotePort() uint16

                                                                RemotePort returns the remote port of the packet.

                                                                type Packet

                                                                type Packet interface {
                                                                	// VERDICTS
                                                                	Accept() error
                                                                	Block() error
                                                                	Drop() error
                                                                	PermanentAccept() error
                                                                	PermanentBlock() error
                                                                	PermanentDrop() error
                                                                	RerouteToNameserver() error
                                                                	RerouteToTunnel() error
                                                                
                                                                	// INFO
                                                                	SetCtx(context.Context)
                                                                	Ctx() context.Context
                                                                	Info() *Info
                                                                	SetPacketInfo(Info)
                                                                	IsInbound() bool
                                                                	IsOutbound() bool
                                                                	SetInbound()
                                                                	SetOutbound()
                                                                	HasPorts() bool
                                                                	GetPayload() ([]byte, error)
                                                                	GetConnectionID() string
                                                                
                                                                	// MATCHING
                                                                	MatchesAddress(bool, IPProtocol, *net.IPNet, uint16) bool
                                                                	MatchesIP(bool, *net.IPNet) bool
                                                                
                                                                	// FORMATTING
                                                                	String() string
                                                                	FmtPacket() string
                                                                	FmtProtocol() string
                                                                	FmtRemoteIP() string
                                                                	FmtRemotePort() string
                                                                	FmtRemoteAddress() string
                                                                }

                                                                  Packet is an interface to a network packet to provide object behaviour the same across all systems

                                                                  type Verdict

                                                                  type Verdict uint8

                                                                    Verdict describes the decision on a packet.

                                                                    const (
                                                                    	DROP Verdict = iota
                                                                    	BLOCK
                                                                    	ACCEPT
                                                                    	STOLEN
                                                                    	QUEUE
                                                                    	REPEAT
                                                                    	STOP
                                                                    )

                                                                      Verdicts

                                                                      func (Verdict) String

                                                                      func (v Verdict) String() string

                                                                        String returns the string representation of the verdict.