layers

package
v0.0.14 Latest Latest
Warning

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

Go to latest
Published: Aug 12, 2025 License: MIT Imports: 15 Imported by: 1

Documentation

Overview

Package layers

Index

Constants

View Source
const (
	HandshakeTLSVal   = 0x16 // 22
	ClientHelloTLSVal = 0x01
	ServerHelloTLSVal = 0x02
)

Variables

View Source
var (
	ErrParsingAddress = fmt.Errorf("failed parsing IP address")
	ErrSliceBounds    = fmt.Errorf("slice bounds out of range")
)
View Source
var ErrTLSTooShort = fmt.Errorf("tls message too short")

Functions

func CalculateIPv4Checksum added in v0.0.9

func CalculateIPv4Checksum(data []byte) (uint16, error)

func CalculateUDPChecksum added in v0.0.9

func CalculateUDPChecksum(data []byte) (uint16, error)

func GenerateRandomBytes added in v0.0.14

func GenerateRandomBytes(n int) ([]byte, error)

func GenerateRandomUint16BE added in v0.0.14

func GenerateRandomUint16BE() (uint16, error)

func GenerateRandomUint16LE added in v0.0.14

func GenerateRandomUint16LE() (uint16, error)

func GenerateRandomUint16NE added in v0.0.14

func GenerateRandomUint16NE() (uint16, error)

func MustGenerateRandomUint16NE added in v0.0.14

func MustGenerateRandomUint16NE() uint16

Types

type ARPOperation added in v0.0.6

type ARPOperation struct {
	Val  Operation
	Desc string
}

func (*ARPOperation) String added in v0.0.6

func (ao *ARPOperation) String() string

type ARPPacket

type ARPPacket struct {
	HardwareType     uint16        // Network link protocol type.
	ProtocolType     uint16        // Internetwork protocol for which the ARP request is intended.
	ProtocolTypeDesc string        // Internetwork protocol description.
	Hlen             uint8         // Length (in octets) of a hardware address.
	Plen             uint8         // Length (in octets) of internetwork addresses.
	Op               *ARPOperation // Specifies the operation that the sender is performing.
	// Media address of the sender. In an ARP request this field is used to indicate
	// the address of the host sending the request. In an ARP reply this field is used
	// to indicate the address of the host that the request was looking for.
	SenderMAC net.HardwareAddr
	SenderIP  netip.Addr // Internetwork address of the sender.
	// Media address of the intended receiver. In an ARP request this field is ignored.
	// In an ARP reply this field is used to indicate the address of the host that originated the ARP request.
	TargetMAC net.HardwareAddr
	TargetIP  netip.Addr // Internetwork address of the intended receiver.
	DstVendor string
	SrcVendor string
}

ARPPacket represents The Address Resolution Protocol (ARP) that is a communication protocol used for discovering the link layer address, such as a MAC address, associated with a given internet layer address, typically an IPv4 address. Defined in RFC 826.

func NewARPPacket added in v0.0.6

func NewARPPacket(
	op Operation,
	senderMAC net.HardwareAddr,
	senderIP netip.Addr,
	targetMAC net.HardwareAddr,
	targetIP netip.Addr,
) (*ARPPacket, error)

func (*ARPPacket) MarshalBinary added in v0.0.6

func (ap *ARPPacket) MarshalBinary() ([]byte, error)

MarshalBinary implements encoding.BinaryMarshaler interface

func (*ARPPacket) Name added in v0.0.14

func (ap *ARPPacket) Name() LayerName

func (*ARPPacket) NextLayer

func (ap *ARPPacket) NextLayer() Layer

func (*ARPPacket) Parse

func (ap *ARPPacket) Parse(data []byte) error

Parse parses the given ARP packet data into the ARPPacket struct.

func (*ARPPacket) String

func (ap *ARPPacket) String() string

func (*ARPPacket) Summary

func (ap *ARPPacket) Summary() string

func (*ARPPacket) ToBytes added in v0.0.6

func (ap *ARPPacket) ToBytes() []byte

func (*ARPPacket) UnmarshalBinary added in v0.0.6

func (ap *ARPPacket) UnmarshalBinary(data []byte) error

UnmarshalBinary implements encoding.BinaryUnmarshaler interface

type CipherSuite added in v0.0.3

type CipherSuite struct {
	Value uint16
	Desc  string
}

func (*CipherSuite) String added in v0.0.3

func (cs *CipherSuite) String() string

type DNSFlags

type DNSFlags struct {
	Raw        uint16 `json:"raw"`
	QR         uint8  `json:"qr"`     // Indicates if the message is a query (0) or a reply (1).
	QRDesc     string `json:"qrdesc"` // Query (0) or Reply (1)
	OPCode     uint8  `json:"opcode"` // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-5
	OPCodeDesc string `json:"opcodedesc"`
	AA         uint8  `json:"aa"`    // Authoritative Answer, in a response, indicates if the DNS server is authoritative for the queried hostname.
	TC         uint8  `json:"tc"`    // TrunCation, indicates that this message was truncated due to excessive length.
	RD         uint8  `json:"rd"`    // Recursion Desired, indicates if the client means a recursive query.
	RA         uint8  `json:"ra"`    // Recursion Available, in a response, indicates if the replying DNS server supports recursion.
	Z          uint8  `json:"z"`     // Zero, reserved for future use.
	AU         uint8  `json:"au"`    // Indicates if answer/authority portion was authenticated by the server.
	NA         uint8  `json:"na"`    // Indicates if non-authenticated data is accepatable.
	RCode      uint8  `json:"rcode"` // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6
	RCodeDesc  string `json:"rcodedesc"`
}

func (*DNSFlags) String

func (df *DNSFlags) String() string

type DNSMessage

type DNSMessage struct {
	TransactionID uint16            `json:"transaction-id"`       // Used for matching response to queries.
	Flags         *DNSFlags         `json:"flags,omitempty"`      // Flags specify the requested operation and a response code.
	QDCount       uint16            `json:"questions-count"`      // Count of entries in the queries section.
	ANCount       uint16            `json:"answer-rrs-count"`     //  Count of entries in the answers section.
	NSCount       uint16            `json:"authority-rrs-count"`  // Count of entries in the authority section.
	ARCount       uint16            `json:"additional-rrs-count"` // Count of entries in the additional section.
	Questions     []*QueryEntry     `json:"questions,omitempty"`
	AnswerRRs     []*ResourceRecord `json:"answers,omitempty"`
	AuthorityRRs  []*ResourceRecord `json:"authoritative-nameservers,omitempty"`
	AdditionalRRs []*ResourceRecord `json:"additional-records,omitempty"`
}

func (*DNSMessage) MarshalJSON added in v0.0.14

func (d *DNSMessage) MarshalJSON() ([]byte, error)

func (*DNSMessage) Name added in v0.0.14

func (d *DNSMessage) Name() LayerName

func (*DNSMessage) NextLayer

func (d *DNSMessage) NextLayer() Layer

func (*DNSMessage) Parse

func (d *DNSMessage) Parse(data []byte) error

Parse parses the given byte data into a DNSMessage struct.

func (*DNSMessage) String

func (d *DNSMessage) String() string

func (*DNSMessage) Summary

func (d *DNSMessage) Summary() string

func (*DNSMessage) UnmarshalBinary added in v0.0.14

func (d *DNSMessage) UnmarshalBinary(data []byte) error

type EtherType added in v0.0.6

type EtherType uint16
const (
	EtherTypeIPv4 EtherType = 0x0800
	EtherTypeARP  EtherType = 0x0806
	EtherTypeIPv6 EtherType = 0x86dd
)

type EthernetFrame

type EthernetFrame struct {
	DstMAC    net.HardwareAddr // MAC address of the destination device.
	SrcMAC    net.HardwareAddr // MAC address of the source device.
	EtherType *EthernetType    // The protocol of the upper layer.
	Payload   []byte
	DstVendor string
	SrcVendor string
}

EthernetFrame represents Ethernet Frame An Ethernet frame is a data link layer protocol data unit.

func NewEthernetFrame added in v0.0.6

func NewEthernetFrame(dstMAC, srcMAC net.HardwareAddr, et EtherType, payload []byte) (*EthernetFrame, error)

func (*EthernetFrame) MarshalBinary added in v0.0.6

func (ef *EthernetFrame) MarshalBinary() ([]byte, error)

func (*EthernetFrame) Name added in v0.0.14

func (ef *EthernetFrame) Name() LayerName

func (*EthernetFrame) NextLayer

func (ef *EthernetFrame) NextLayer() Layer

func (*EthernetFrame) Parse

func (ef *EthernetFrame) Parse(data []byte) error

Parse parses the given byte data into an Ethernet frame.

func (*EthernetFrame) String

func (ef *EthernetFrame) String() string

func (*EthernetFrame) Summary

func (ef *EthernetFrame) Summary() string

func (*EthernetFrame) ToBytes added in v0.0.6

func (ef *EthernetFrame) ToBytes() []byte

func (*EthernetFrame) UnmarshalBinary added in v0.0.6

func (ef *EthernetFrame) UnmarshalBinary(data []byte) error

type EthernetType added in v0.0.6

type EthernetType struct {
	Val  EtherType
	Desc string // Protocol description
}

func (*EthernetType) String added in v0.0.6

func (et *EthernetType) String() string

type Extension added in v0.0.3

type Extension struct {
	Value uint16
	Desc  string
}

func (*Extension) String added in v0.0.3

func (e *Extension) String() string

type FTPMessage

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

func (*FTPMessage) Name added in v0.0.14

func (f *FTPMessage) Name() LayerName

func (*FTPMessage) NextLayer

func (f *FTPMessage) NextLayer() Layer

func (*FTPMessage) Parse

func (f *FTPMessage) Parse(data []byte) error

func (*FTPMessage) String

func (f *FTPMessage) String() string

func (*FTPMessage) Summary

func (f *FTPMessage) Summary() string

type HSTLSParser added in v0.0.3

type HSTLSParser interface {
	ParseHS(data []byte) error
}

func HSTLSParserByType added in v0.0.3

func HSTLSParserByType(hstype uint8) HSTLSParser

type HTTPMessage

type HTTPMessage struct {
	Request  *http.Request
	Response *http.Response
}

https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages port 80

func (*HTTPMessage) IsEmpty added in v0.0.3

func (h *HTTPMessage) IsEmpty() bool

func (*HTTPMessage) MarshalJSON added in v0.0.4

func (h *HTTPMessage) MarshalJSON() ([]byte, error)

func (*HTTPMessage) Name added in v0.0.14

func (h *HTTPMessage) Name() LayerName

func (*HTTPMessage) NextLayer

func (h *HTTPMessage) NextLayer() Layer

func (*HTTPMessage) Parse

func (h *HTTPMessage) Parse(data []byte) error

func (*HTTPMessage) String

func (h *HTTPMessage) String() string

func (*HTTPMessage) Summary

func (h *HTTPMessage) Summary() string

type HTTPRequest added in v0.0.4

type HTTPRequest struct {
	Host          string      `json:"host,omitempty"`
	URI           string      `json:"uri,omitempty"`
	Method        string      `json:"method,omitempty"`
	Proto         string      `json:"proto,omitempty"`
	ContentLength int         `json:"content-length,omitempty"`
	Header        http.Header `json:"header,omitempty"`
}

type HTTPRequestWrapper added in v0.0.4

type HTTPRequestWrapper struct {
	Request *HTTPRequest `json:"http_request"`
}

type HTTPResponse added in v0.0.4

type HTTPResponse struct {
	Proto         string      `json:"proto,omitempty"`
	Status        string      `json:"status,omitempty"`
	ContentLength int         `json:"content-length,omitempty"`
	Header        http.Header `json:"header,omitempty"`
}

type HTTPResponseWrapper added in v0.0.4

type HTTPResponseWrapper struct {
	Response *HTTPResponse `json:"http_response"`
}

type ICMPSegment

type ICMPSegment struct {
	Type     uint8  // ICMP type.
	TypeDesc string // ICMP type description.
	Code     uint8  // ICMP subtype.
	CodeDesc string // ICMP subtype description.
	// Internet checksum (RFC 1071) for error checking, calculated from the ICMP header
	// and data with value 0 substituted for this field.
	Checksum uint16
	Data     []byte // Contents vary based on the ICMP type and code.
}

ICMP is part of the Internet protocol suite as defined in RFC 792.

func (*ICMPSegment) Name added in v0.0.14

func (i *ICMPSegment) Name() LayerName

func (*ICMPSegment) NextLayer

func (i *ICMPSegment) NextLayer() Layer

func (*ICMPSegment) Parse

func (i *ICMPSegment) Parse(data []byte) error

Parse parses the given byte data into an ICMP segment struct.

func (*ICMPSegment) String

func (i *ICMPSegment) String() string

func (*ICMPSegment) Summary

func (i *ICMPSegment) Summary() string

type ICMPv6Segment

type ICMPv6Segment struct {
	Type     uint8
	TypeDesc string
	Code     uint8
	CodeDesc string
	Checksum uint16
	Data     []byte
}

ICMPv6 is an integral part of IPv6 and performs error reporting and diagnostic functions.

func (*ICMPv6Segment) Name added in v0.0.14

func (i *ICMPv6Segment) Name() LayerName

func (*ICMPv6Segment) NextLayer

func (i *ICMPv6Segment) NextLayer() Layer

func (*ICMPv6Segment) Parse

func (i *ICMPv6Segment) Parse(data []byte) error

Parse parses the given byte data into an ICMPv6 segment struct.

func (*ICMPv6Segment) String

func (i *ICMPv6Segment) String() string

func (*ICMPv6Segment) Summary

func (i *ICMPv6Segment) Summary() string

type IPProto added in v0.0.9

type IPProto uint8
const (
	ProtoICMP IPProto = 1
	ProtoTCP  IPProto = 6
	ProtoUDP  IPProto = 17
)

type IPv4Flags

type IPv4Flags struct {
	Raw      uint8
	Reserved uint8
	DF       uint8
	MF       uint8
}

func NewIPv4Flags added in v0.0.9

func NewIPv4Flags(flags uint8) *IPv4Flags

func (*IPv4Flags) String

func (i *IPv4Flags) String() string

type IPv4Packet

type IPv4Packet struct {
	// Internet Protocol version 4 is described in IETF publication RFC 791.
	Version        uint8      // 4 bits version (for IPv4, this is always equal to 4).
	IHL            uint8      // 4 bits size of header (number of 32-bit words).
	DSCP           uint8      // 6 bits specifies differentiated services.
	DSCPDesc       string     // differentiated services description.
	ECN            uint8      // 2 bits end-to-end notification of network congestion without dropping packets.
	TotalLength    uint16     // 16 bits defines the entire packet size in bytes, including header and data.
	Identification uint16     // 16 bits identifies the group of fragments of a single IP datagram.
	Flags          *IPv4Flags // 3 bits used to control or identify fragments.
	FragmentOffset uint16     // 13 bits offset of a particular fragment.
	TTL            uint8      // 8 bits limits a datagram's lifetime to prevent network failure.
	Protocol       *IPv4Proto
	HeaderChecksum uint16     // 16 bits used for error checking of the header.
	SrcIP          netip.Addr // IPv4 address of the sender of the packet.
	DstIP          netip.Addr // IPv4 address of the receiver of the packet.
	Options        []byte     // if ihl > 5
	Payload        []byte
}

func NewIPv4Packet added in v0.0.9

func NewIPv4Packet(srcIP, dstIP netip.Addr, proto IPProto, payload []byte) (*IPv4Packet, error)

func (*IPv4Packet) MarshalBinary added in v0.0.9

func (p *IPv4Packet) MarshalBinary() ([]byte, error)

func (*IPv4Packet) Name added in v0.0.14

func (p *IPv4Packet) Name() LayerName

func (*IPv4Packet) NextLayer

func (p *IPv4Packet) NextLayer() Layer

func (*IPv4Packet) Parse

func (p *IPv4Packet) Parse(data []byte) error

Parse parses the given byte data into an IPv4 packet struct.

func (*IPv4Packet) PseudoHeader added in v0.0.9

func (p *IPv4Packet) PseudoHeader() *IPv4PseudoHeader

func (*IPv4Packet) SetPayload added in v0.0.14

func (p *IPv4Packet) SetPayload(payload []byte)

func (*IPv4Packet) String

func (p *IPv4Packet) String() string

func (*IPv4Packet) Summary

func (p *IPv4Packet) Summary() string

func (*IPv4Packet) ToBytes added in v0.0.9

func (p *IPv4Packet) ToBytes() []byte

func (*IPv4Packet) UnmarshalBinary added in v0.0.9

func (p *IPv4Packet) UnmarshalBinary(data []byte) error

type IPv4Proto added in v0.0.9

type IPv4Proto struct {
	Val  IPProto // 8 bits defines the protocol used in the data portion of the IP datagram.
	Desc string  // Protocol description.
}

func (*IPv4Proto) String added in v0.0.9

func (p *IPv4Proto) String() string

type IPv4PseudoHeader added in v0.0.9

type IPv4PseudoHeader struct {
	SrcIP       netip.Addr
	DstIP       netip.Addr
	Protocol    *IPv4Proto
	TotalLength uint16
}

func (*IPv4PseudoHeader) MarshalBinary added in v0.0.9

func (ph *IPv4PseudoHeader) MarshalBinary() ([]byte, error)

func (*IPv4PseudoHeader) ToBytes added in v0.0.9

func (ph *IPv4PseudoHeader) ToBytes() []byte

type IPv6Packet

type IPv6Packet struct {
	Version        uint8         // 4 bits version field (for IPv6, this is always equal to 6).
	TrafficClass   *TrafficClass // 6 + 2 bits holds DS and ECN values.
	FlowLabel      uint32        // 20 bits high-entropy identifier of a flow of packets between a source and destination.
	PayloadLength  uint16        // 16 bits the size of the payload in octets, including any extension headers.
	NextHeader     uint8         // 8 bits specifies the type of the next header.
	NextHeaderDesc string        // next header description
	// 8 bits replaces the time to live field in IPv4. This value is decremented by one at each forwarding node
	// and the packet is discarded if it becomes 0. However, the destination node should process the packet normally
	// even if received with a hop limit of 0.
	HopLimit uint8
	SrcIP    netip.Addr // The unicast IPv6 address of the sending node.
	DstIP    netip.Addr // The IPv6 unicast or multicast address of the destination node(s).
	Payload  []byte
}

An IPv6 packet is the smallest message entity exchanged using Internet Protocol version 6 (IPv6). IPv6 protocol defined in RFC 2460.

func (*IPv6Packet) Name added in v0.0.14

func (p *IPv6Packet) Name() LayerName

func (*IPv6Packet) NextLayer

func (p *IPv6Packet) NextLayer() Layer

func (*IPv6Packet) Parse

func (p *IPv6Packet) Parse(data []byte) error

Parse parses the given byte data into an IPv6 packet struct.

func (*IPv6Packet) String

func (p *IPv6Packet) String() string

func (*IPv6Packet) Summary

func (p *IPv6Packet) Summary() string

type Layer

type Layer interface {
	fmt.Stringer
	Parse(data []byte) error
	NextLayer() Layer
	Summary() string
	Name() LayerName
}

func GetLayer added in v0.0.14

func GetLayer(layer LayerName) Layer

func ParseNextLayer added in v0.0.14

func ParseNextLayer(data []byte, src, dst *uint16) Layer

type LayerName added in v0.0.14

type LayerName string
const (
	LayerETH    LayerName = "ETH"
	LayerIPv4   LayerName = "IPv4"
	LayerIPv6   LayerName = "IPv6"
	LayerARP    LayerName = "ARP"
	LayerTCP    LayerName = "TCP"
	LayerUDP    LayerName = "UDP"
	LayerICMP   LayerName = "ICMP"
	LayerICMPv6 LayerName = "ICMPv6"
	LayerDNS    LayerName = "DNS"
	LayerFTP    LayerName = "FTP"
	LayerHTTP   LayerName = "HTTP"
	LayerSNMP   LayerName = "SNMP"
	LayerSSH    LayerName = "SSH"
	LayerTLS    LayerName = "TLS"
)

type Message

type Message struct {
	PacketLength     uint32
	PaddingLength    uint8
	MesssageType     uint8
	MesssageTypeDesc string
	Payload          []byte
}

func (*Message) String

func (m *Message) String() string

type Operation added in v0.0.6

type Operation uint16
const (
	OperationRequest Operation = 1
	OperationReply   Operation = 2
)

type QueryEntry

type QueryEntry struct {
	Name  string       `json:"name"`         // Name of the node to which this record pertains.
	Type  *RecordType  `json:"record-type"`  // Type of RR in numeric form.
	Class *RecordClass `json:"record-class"` // Class code.
}

func (*QueryEntry) String

func (qe *QueryEntry) String() string

type RDataA

type RDataA struct {
	Address netip.Addr `json:"address"`
}

func (*RDataA) String

func (d *RDataA) String() string

type RDataAAAA

type RDataAAAA struct {
	Address netip.Addr `json:"address"`
}

func (*RDataAAAA) String

func (d *RDataAAAA) String() string

type RDataCNAME

type RDataCNAME struct {
	CName string `json:"cname"`
}

func (*RDataCNAME) String

func (d *RDataCNAME) String() string

type RDataHTTPS

type RDataHTTPS struct {
	SvcPriority uint16      `json:"svc-priority"`
	Length      int         `json:"length"`
	TargetName  string      `json:"target-name"`
	SvcParams   []*SvcParam `json:"svc-params"`
}

func (*RDataHTTPS) String

func (d *RDataHTTPS) String() string

type RDataMX

type RDataMX struct {
	Preference uint16 `json:"preference"`
	Exchange   string `json:"exchange"`
}

func (*RDataMX) String

func (d *RDataMX) String() string

type RDataNS

type RDataNS struct {
	NsdName string `json:"ns"`
}

func (*RDataNS) String

func (d *RDataNS) String() string

type RDataOPT

type RDataOPT struct {
	UDPPayloadSize     uint16 `json:"udp-payload-size"`
	HigherBitsExtRCode uint8  `json:"higer-bits-in-extended-rcode"`
	EDNSVer            uint8  `json:"edns0-version"`
	Z                  uint16 `json:"z"`
	DataLen            uint16 `json:"data-length"`
}

func (*RDataOPT) String

func (d *RDataOPT) String() string

type RDataSOA

type RDataSOA struct {
	PrimaryNS            string `json:"primary-nameserver"`
	RespAuthorityMailbox string `json:"responsible-authority-mailbox"`
	SerialNumber         uint32 `json:"serial-number"`
	RefreshInterval      uint32 `json:"refresh-interval"`
	RetryInterval        uint32 `json:"retry-interval"`
	ExpireLimit          uint32 `json:"expire-limit"`
	MinimumTTL           uint32 `json:"minimum-ttl"`
}

func (*RDataSOA) String

func (d *RDataSOA) String() string

type RDataTXT

type RDataTXT struct {
	TxtData string `json:"txt-data"`
}

func (*RDataTXT) String

func (d *RDataTXT) String() string

type RDataUnknown

type RDataUnknown struct {
	Data string `json:"data"`
}

func (*RDataUnknown) String

func (d *RDataUnknown) String() string

type Record

type Record struct {
	ContentType     uint8
	ContentTypeDesc string
	Version         *TLSVersion
	Length          uint16
	Data            []byte
}

func (*Record) String

func (r *Record) String() string

type RecordClass

type RecordClass struct {
	Name string `json:"name"`
	Val  uint16 `json:"val"`
}

func (*RecordClass) String

func (c *RecordClass) String() string

type RecordType

type RecordType struct {
	Name string `json:"name"`
	Val  uint16 `json:"val"`
}

func (*RecordType) String

func (rt *RecordType) String() string

type ResourceRecord

type ResourceRecord struct {
	Name     string       `json:"name"`         // Name of the node to which this record pertains.
	Type     *RecordType  `json:"record-type"`  // Type of RR in numeric form.
	Class    *RecordClass `json:"record-class"` // Class code.
	TTL      uint32       `json:"ttl"`          // Count of seconds that the RR stays valid.
	RDLength uint16       `json:"rdata-length"` // Length of RData field (specified in octets).
	RData    fmt.Stringer `json:"rdata"`        // Additional RR-specific data.
}

func (*ResourceRecord) String

func (rt *ResourceRecord) String() string

func (*ResourceRecord) Summary added in v0.0.14

func (rt *ResourceRecord) Summary() string

type SNMPMessage

type SNMPMessage struct {
	Payload []byte
}

https://www.ranecommercial.com/legacy/pdf/ranenotes/SNMP_Simple_Network_Management_Protocol.pdf https://wiki.wireshark.org/SNMP port 161, 162

func (*SNMPMessage) Name added in v0.0.14

func (s *SNMPMessage) Name() LayerName

func (*SNMPMessage) NextLayer

func (s *SNMPMessage) NextLayer() Layer

func (*SNMPMessage) Parse

func (s *SNMPMessage) Parse(data []byte) error

func (*SNMPMessage) String

func (s *SNMPMessage) String() string

func (*SNMPMessage) Summary

func (s *SNMPMessage) Summary() string

type SSHMessage

type SSHMessage struct {
	Protocol string
	Messages []*Message
}

func (*SSHMessage) Name added in v0.0.14

func (s *SSHMessage) Name() LayerName

func (*SSHMessage) NextLayer

func (s *SSHMessage) NextLayer() Layer

func (*SSHMessage) Parse

func (s *SSHMessage) Parse(data []byte) error

func (*SSHMessage) String

func (s *SSHMessage) String() string

func (*SSHMessage) Summary

func (s *SSHMessage) Summary() string

type ServerName added in v0.0.3

type ServerName struct {
	Type         uint16
	Length       uint16
	SNListLength uint16
	SNType       uint8
	SNNameLength uint16
	SNName       string
}

func (*ServerName) Parse added in v0.0.3

func (sn *ServerName) Parse(data []byte) error

func (*ServerName) String added in v0.0.3

func (sn *ServerName) String() string

type SvcParam added in v0.0.14

type SvcParam struct {
	Key    *SvcParamKey `json:"svc-param-key"`
	Length uint16       `json:"svc-param-value-length"`
	Value  []byte       `json:"svc-param-value"` // TODO: add proper parsing
}

func (*SvcParam) String added in v0.0.14

func (sp *SvcParam) String() string

type SvcParamKey added in v0.0.14

type SvcParamKey struct {
	Val  uint16 `json:"val"`
	Desc string `json:"desc"`
}

func (*SvcParamKey) String added in v0.0.14

func (spk *SvcParamKey) String() string

type TCPFlag added in v0.0.6

type TCPFlag struct {
	Val  uint8
	Desc string
}

type TCPFlags

type TCPFlags struct {
	Raw uint8
	Val []*TCPFlag
}

func (*TCPFlags) String

func (t *TCPFlags) String() string

type TCPSegment

type TCPSegment struct {
	SrcPort uint16 // Identifies the sending port.
	DstPort uint16 // Identifies the receiving port.
	// If the SYN flag is set (1), then this is the initial sequence number. The sequence number of the actual
	// first data byte and the acknowledged number in the corresponding ACK are then this sequence number plus 1.
	// If the SYN flag is unset (0), then this is the accumulated sequence number of the first data byte of this
	// segment for the current session.
	SeqNumber uint32
	// If the ACK flag is set, the value is the next sequence number that the sender of the ACK is expecting.
	AckNumber  uint32
	DataOffset uint8     // 4 bits specifies the size of the TCP header in 32-bit words.
	Reserved   uint8     // 4 bits reserved for future use and should be set to zero.
	Flags      *TCPFlags // Contains 8 1-bit flags (control bits)
	// The size of the receive window, which specifies the number of window size units[b] that the sender of
	// this segment is currently willing to receive.
	WindowSize uint16
	// The 16-bit checksum field is used for error-checking of the TCP header, the payload and an IP pseudo-header.
	Checksum uint16
	// If the URG flag is set, then this 16-bit field is an offset from the sequence number
	// indicating the last urgent data byte.
	UrgentPointer uint16
	Options       []byte // The length of this field is determined by the data offset field.
	Payload       []byte
}

TCP protocol is described in RFC 761.

func (*TCPSegment) Name added in v0.0.14

func (t *TCPSegment) Name() LayerName

func (*TCPSegment) NextLayer

func (t *TCPSegment) NextLayer() Layer

func (*TCPSegment) Parse

func (t *TCPSegment) Parse(data []byte) error

Parse parses the given byte data into a TCPSegment struct.

func (*TCPSegment) String

func (t *TCPSegment) String() string

func (*TCPSegment) Summary

func (t *TCPSegment) Summary() string

type TLSClientHello added in v0.0.3

type TLSClientHello struct {
	Type               uint8
	TypeDesc           string
	Length             int // 3 bytes int(uint(b[2]) | uint(b[1])<<8 | uint(b[0])<<16))
	Version            *TLSVersion
	Random             []byte // 32 bytes
	SessionIDLength    uint8  // if 0 no session follows
	SessionID          string
	CipherSuitesLength uint16
	CipherSuites       []*CipherSuite
	CmprMethodsLength  uint8  // usually 0x01
	CmprMethods        []byte // usually 0x00
	ExtensionLength    uint16
	Extensions         []*Extension
	ServerName         *ServerName
	ALPN               []string
}

https://wiki.osdev.org/TLS_Handshake#Client_Hello_Message

func (*TLSClientHello) MarshalJSON added in v0.0.4

func (tch *TLSClientHello) MarshalJSON() ([]byte, error)

func (*TLSClientHello) ParseHS added in v0.0.3

func (tch *TLSClientHello) ParseHS(data []byte) error

func (*TLSClientHello) String added in v0.0.3

func (tch *TLSClientHello) String() string

type TLSClientHelloRequest added in v0.0.4

type TLSClientHelloRequest struct {
	SNI          string   `json:"sni,omitempty"`
	Type         string   `json:"type,omitempty"`
	Version      string   `json:"version,omitempty"`
	SessionID    string   `json:"session_id,omitempty"`
	CipherSuites []string `json:"cipher_suites,omitempty"`
	Extensions   []string `json:"extensions,omitempty"`
	ALPN         []string `json:"alpn,omitempty"`
}

type TLSClientHelloRequestWrapper added in v0.0.4

type TLSClientHelloRequestWrapper struct {
	Request TLSClientHelloRequest `json:"tls_request"`
}

type TLSMessage

type TLSMessage struct {
	Records []*Record
	Data    []byte
}

port 443 https://tls12.xargs.org/#client-hello/annotated https://tls13.xargs.org/#client-hello/annotated https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-5

func (*TLSMessage) Name added in v0.0.14

func (t *TLSMessage) Name() LayerName

func (*TLSMessage) NextLayer

func (t *TLSMessage) NextLayer() Layer

func (*TLSMessage) Parse

func (t *TLSMessage) Parse(data []byte) error

func (*TLSMessage) String

func (t *TLSMessage) String() string

func (*TLSMessage) Summary

func (t *TLSMessage) Summary() string

type TLSServerHello added in v0.0.3

type TLSServerHello struct {
	Type             uint8
	TypeDesc         string
	Length           int // 3 bytes int(uint(b[2]) | uint(b[1])<<8 | uint(b[0])<<16))
	Version          *TLSVersion
	Random           []byte // 32 bytes
	SessionIDLength  uint8  // if 0 no session follows
	SessionID        string
	CipherSuite      *CipherSuite
	CmprMethod       uint8
	ExtensionLength  uint16
	Extensions       []*Extension
	SupportedVersion *TLSVersion
}

https://wiki.osdev.org/TLS_Handshake#Server_Hello_Message

func (*TLSServerHello) MarshalJSON added in v0.0.4

func (tsh *TLSServerHello) MarshalJSON() ([]byte, error)

func (*TLSServerHello) ParseHS added in v0.0.3

func (tsh *TLSServerHello) ParseHS(data []byte) error

func (*TLSServerHello) String added in v0.0.3

func (tsh *TLSServerHello) String() string

type TLSServerHelloResponse added in v0.0.4

type TLSServerHelloResponse struct {
	Type             string   `json:"type,omitempty"`
	Version          string   `json:"version,omitempty"`
	SessionID        string   `json:"session_id,omitempty"`
	CipherSuite      string   `json:"cipher_suite,omitempty"`
	Extensions       []string `json:"extensions,omitempty"`
	SupportedVersion string   `json:"supported_version,omitempty"`
}

type TLSServerHelloResponseWrapper added in v0.0.4

type TLSServerHelloResponseWrapper struct {
	Response TLSServerHelloResponse `json:"tls_response"`
}

type TLSVersion added in v0.0.3

type TLSVersion struct {
	Val  uint16
	Desc string
}

func (*TLSVersion) String added in v0.0.3

func (tv *TLSVersion) String() string

type TrafficClass

type TrafficClass struct {
	Raw      uint8
	DSCP     uint8
	DSCPDesc string
	ECN      uint8
}

func (*TrafficClass) String

func (p *TrafficClass) String() string

type UDPSegment

type UDPSegment struct {
	// UDP protocol is defined in RFC 768.
	SrcPort   uint16 // Identifies the sending port.
	DstPort   uint16 // Identifies the receiving port.
	UDPLength uint16 // Specifies the length in bytes of the UDP header and UDP data.
	Checksum  uint16 // The checksum field may be used for error-checking of the header and data.
	Payload   []byte
}

func NewUDPSegment added in v0.0.9

func NewUDPSegment(srcPort, dstPort uint16, payload []byte) (*UDPSegment, error)

func (*UDPSegment) MarshalBinary added in v0.0.9

func (u *UDPSegment) MarshalBinary() ([]byte, error)

func (*UDPSegment) Name added in v0.0.14

func (u *UDPSegment) Name() LayerName

func (*UDPSegment) NextLayer

func (u *UDPSegment) NextLayer() Layer

func (*UDPSegment) Parse

func (u *UDPSegment) Parse(data []byte) error

Parse parses the given byte data into a UDPSegment struct.

func (*UDPSegment) SetChecksum added in v0.0.14

func (u *UDPSegment) SetChecksum(pseudo []byte) error

func (*UDPSegment) String

func (u *UDPSegment) String() string

func (*UDPSegment) Summary

func (u *UDPSegment) Summary() string

func (*UDPSegment) ToBytes added in v0.0.9

func (u *UDPSegment) ToBytes() []byte

func (*UDPSegment) UnmarshalBinary added in v0.0.9

func (u *UDPSegment) UnmarshalBinary(data []byte) error

Jump to

Keyboard shortcuts

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